等價類
定義:1、等價:如果多個輸入在程序中處理方式(路徑)相同,則認為這些輸入是等價的,測試一個即可。(前提:測試不能窮舉)
2、輸入:分為兩類,有效輸入(可以保存)、無效輸入(不可保存)
3、結合:有效等價類、無效等價類
滿足規則:只需尋找一個全部滿足規則的(有效等價類)
不滿足規則:需分開,每條不滿足條件的舉出一個,方便定位錯誤(無效等價類)
規則的幾種情況:
1 若規則是布爾式的
有效、無效分別取一個 一個真,一個假
2. 若規則是區
有效的取一個 無效的,在小於區間的取一個,大於區間的取一個,空或零取一個
3. 規則是集合:
有效取一個 無效的在集合外取一個
4. 規則是必須滿足的一個條件:
對無效,要細分無效(先試試其他有效等價類,再試試全部等價類全都不滿足)
例:郵箱注冊,注冊名只能以小寫字母開頭,設計無效等價類時,先試試其他有效等價類,如大寫字母、數字等,再試試其他有效全部都不滿足的情況
有效等價類:程序規格說明有意義,合理的輸入數據
無效等價類:程序規格說明無意義,不合理的輸入數據
ASCII碼
7位 表示27=128個字符 每個字符存儲占用1個字節
分類:不可見字符
控制字符:LF(換行)、CR(回車)
通信字符
NULL(空)
可見字符
空格
數字
字母(大寫、小寫)
符號
練習
1.1年齡注冊
注冊頁面要求輸入年齡,限制:1到150期間的正整數
1、需求分析—找出全部的輸入條件
1)、正整數
2)、[1,150]
注意:分解的過程中,條件之間不用組合(完全獨立),在設計有效用例輸入的時候再考慮組合(一對多)
2、繪制等價類表格
條件 |
有效等價類 |
有效編號 |
無效等價類 |
無效編號 |
|
正整數 |
>1 |
A01 |
數字 |
小數 |
B01 |
負數 |
B02 |
||||
0 |
B03 |
||||
非數字 |
空(NULL) |
B04 |
|||
空格 |
B05 |
||||
字母 |
B06 |
||||
符號 |
B07 |
||||
[1,150] |
[1,150] |
A02 |
<1 |
B08 |
|
>150 |
B09 |
3、設計測試用例輸入
原則:有效輸入—盡可能多去覆蓋有效等價類 (一對多)
無效輸入---只能覆蓋一個無效等價類 (一對一)
目的:A、出現問題可以更好的去定位
B、有可能第一個無效處理后,后續無效值被漏測
輸入序號 |
有效輸入值 |
覆蓋有效等價類 |
輸入序號 |
無效輸入值 |
覆蓋無效等價類 |
1 |
100 |
A01、A02 |
2 |
1.8 |
B01 |
|
|
|
3 |
-9 |
B02 |
4 |
0 |
B03、B08 |
|||
5 |
空(NULL) |
B04 |
|||
6 |
空格 |
B05 |
|||
7 |
W |
B06 |
|||
8 |
@ |
B07 |
|||
9 |
200 |
B09 |
1.2.年齡注冊
某保險公司注冊頁面要求輸入年齡,限制:1到150期間的正整數,其中:
[1,10] 適用的費率 10%
[11,50] 適用的費率 30%
[51,150] 適用的費率 80%
條件 |
有效等價類 |
有效編號 |
無效等價類 |
無效編號 |
|
正整數 |
>1 |
A01 |
數字 |
小數 |
B01 |
負數 |
B02 |
||||
0 |
B03 |
||||
非數字 |
空(NULL) |
B04 |
|||
空格 |
B05 |
||||
字母 |
B06 |
||||
符號 |
B07 |
||||
[1,150] |
[1,10] |
A02 |
<1 |
B08 |
|
[11,50] |
A03 |
>150 |
|
||
[51,150] |
A04 |
|
|
輸入序號 |
有效輸入值 |
覆蓋有效等價類 |
輸入序號 |
無效輸入值 |
覆蓋無效等價類 |
1 |
5 |
A01、A02 |
4 |
1.8 |
B01 |
2 |
30 |
A01、A03 |
5 |
-9 |
B02 |
3 |
100 |
A01、A04 |
6 |
0 |
B03、B08 |
|
|
|
7 |
空(NULL) |
B04 |
8 |
空格 |
B05 |
|||
9 |
W |
B06 |
|||
10 |
@ |
B07 |
|||
11 |
200 |
B09 |
1.3.擴充
考慮全角和半角問題(GB231)
其中,半角占1個字節
全角占2個字節
字符集
1、ASCII
2、GB2312 -> GB18030 一個漢字占2個字節
BIG5(繁體)
3、ISO Unicode (UTF-16) -> UTF-8(變長存儲) 一個漢字可能占3個字節
條件 |
有效等價類 |
有效編號 |
無效等價類 |
無效編號 |
|
正整數 |
>1(半角) |
A01 |
|
|
|
|
|
||||
|
0 |
B03 |
|||
>1(全角) |
A02 |
半角字符 |
空(NULL) |
B04 |
|
空格 |
B05 |
||||
字母 |
B06 |
||||
符號 |
B07 |
||||
全角字符 |
空格 |
B08 |
|||
字母 |
B09 |
||||
符號 |
B10 |
||||
漢字 (字符集) |
GB-2312 |
B11 |
|||
BIG-5 |
B12 |
||||
[1,150] |
[1,150] |
A03 |
<1 |
B13 |
|
>150 |
B14 |
分解粒度:根據功能的重要性決定(用例圖----執行者角色,考慮用戶的關注功能)
根據成本、時間決定
取消負數、小數的原因:
1、前提:在編輯框內輸入年齡,程序在接收編輯框的內容時,一般以字符(或字符串)的形式接收,再根據需要進行類型轉換,如年齡,需要轉換為整型
2、小數中的“小數點”和負數中的“負號”都認為是符號,不允許保存
邊界值
取值(5個):上點、內點、離點
1、上點、內點取值與區間的開閉無關
2、離點和上點互為有效
作用:(有序、有范圍)等價類的補充
補充:考慮數據類型的邊界
如 int 類型 占4個字節 即 32bit 取值范圍[-231, 231-1]
上點:邊界上的點
內點:區間內的點
離點:離邊界值最近且與上點不屬於同一等價類的點(對於小數,沒有離點,不用取)
規則的幾種情況:
1. 規則是區間:
按上點、內點、離點取
2. 規則是取值的個數:
取最小、最大、中間個數
3.規則是a~z序列:
取a、z
4.規則是集合:
取一個集合內的,取一個集合外的
(0,20)上點是0,20 離點是1,19 [0,20]上點是0,20 離點是-1,21
若規則是下拉菜單:建議每個下拉值都選擇一個
2.1.年齡
條件 |
有效等價類 |
有效邊界值 |
有效編號 |
無效等價類 |
無效邊界值 |
無效編號 |
|
正整數 |
>=1 |
上點:1 |
A01 |
數字 |
小數 |
|
B01 |
內點:100 |
A02 |
負數 |
|
B02 |
|||
|
|
離點:0 |
0 |
B03 |
|||
非數字 |
空(NULL) |
|
B04 |
||||
空格 |
|
B05 |
|||||
大寫字母 |
上點:A |
B06 |
|||||
上點:Z |
|
||||||
內點:M |
|
||||||
符號 |
離點:@ |
B07 |
|||||
離點:[ |
|
||||||
[1,150] |
[1,150] |
上點:1 |
A03 |
離點: |
0 |
B08 |
|
上點:150 |
A04 |
離點: |
151 |
B09 |
|||
內點:100 |
A05 |
|
|
|
有效用例輸入:1 、100、150
2.2.用戶名注冊
1、測試需求分析
1、內容:字母、數字、
2、長度:[6,18]
3、約束:字母開頭
字母或數字結尾
不允許重名
不允許使用保留字
自動去除首尾空格
2、等價類划分
條件 |
有效等價類 |
有效編號 |
無效等價類 |
無效編號 |
|
內容 |
字母 |
大寫字母 |
A01 |
符號(除下划線) |
B01 |
小寫字母 |
A02 |
NULL(空) |
B02 |
||
數字 |
[0,9] |
A03 |
空格 |
B03 |
|
下划線 |
下划線 |
A04 |
GB2312 |
B04 |
|
|
|
|
BIG5 |
B05 |
|
長度 |
[6,18] |
[6,18] |
A05 |
<6 |
B06 |
>18 |
B07 |
||||
約束 |
字母開頭 |
大寫字母開頭 |
A06 |
數字開頭 |
B08 |
小寫字母開頭 |
A07 |
下划線開頭 |
B09 |
||
|
|
符號(非下划線)開頭 |
B10 |
||
漢字開頭 |
B11 |
||||
字母或數字結尾 |
大寫字母結尾 |
A08 |
下划線結尾 |
B12 |
|
小寫字母結尾 |
A09 |
符號(非下划線)結尾 |
B13 |
||
數字結尾 |
A10 |
漢字結尾 |
B13 |
||
不允許重名 |
不重名 |
A11 |
重名 |
B15 |
|
去除首尾空格 |
A12 |
|
|
||
不允許使用保留字 |
不使用 |
A13 |
使用保留字 |
B16 |
3、用例設計
序號 |
有效輸入 |
有效邊界值 |
序號 |
無效輸入 |
無效邊界值 |
1 |
(當前系統無AAb_4) AAbb_4 |
A01、A02、A04、A03 A05、A06、A10 A11、A13 |
5 |
abc@a |
B01 |
2 |
(當前系統無AAb_4) aAbcvb_A |
A01、A02、A04、A03 A05、A07、A08 A11、A13 |
|
……….. |
|
3 |
(當前系統無AAb_4) aA555b_b |
A01、A02、A04、A03 A05、A07、A09 A11、A13 |
|
(當前系統存在aaf5bc) (空格)aaf5bc(空格) |
B15 |
4 |
(當前系統無aaf5bc) (空格)aaf5bc(空格) |
A12 |
|
Administrator |
B16 |
2.3.變量命名
在某一版的編程語言中對變量名稱規格作如下規定:變量名稱是由字母開頭的,后跟字母或者數字的任意組合構成,並且區分字母大小寫。編譯器能夠區分的有效字符數為8個,並且變量名稱必須先聲明,后使用,在同一聲明語句中,變量名稱至少必須有一個。
1、測試需求分析
內容:字母、數字
長度:[1,8]
約束:字母開頭
大小寫敏感
先聲明后使用
變量的個數[1,?] (需要和需求人員溝通)
在同一作用域中不允許重名
不能使用關鍵字
2、等價類划分
3、確定邊界值
4、設計用例輸入
2.4.進銷存價格
代碼實現:
if (isNumberString(document.form2.tichen.value,"1234567890.")!=1)
{
alert("價格只能為數字!");
return false;
}
根據代碼的實現,價格編輯框只接受鍵盤的“數字鍵”和“小數點”共11個字符
等價類
條件 |
有效等價類 |
無效等價類 |
內容 |
數字 |
字母 字母、符號處理方式(路徑)相同,認為都是等價的 |
小數點 |
||
約束 |
小數點最多有1個 |
>1個小數點 |
|
|
|
2.5.Windows文件命名
目錄 目錄長度 文件最大長度 目錄+文件最大長度
C:\ 3 255個 = 258
C:\ABCD 7 251個 =258
C:\ABCD\AAAA 12 246個 =258
根目錄: 255
非根目錄: 254 (文件夾最小長度為1)
1、測試需求分析
內容:非“\/:*?"<>|”的字符
長度: 根目錄: 255
非根目錄: 254 (文件夾最小長度為1)
約束:同目錄下不能重名(去除首尾空格)
不同擴展名使用不同的圖標
不能為空
總結
1、適用范圍:針對程序的輸入
2、使用步驟
1)、測試需求分析,找出全部條件(顯示、隱士)(條件之間不能交叉或者組合,到設計用例的時候再考慮多條件的組合)
2)、划分等價類
划分依據:相同的處理方式(路徑)
分類:有效等價類、無效等價類
3)、使用邊界值補充(有序、有范圍的)等價類
內容:上點、離點、內點
要求:上點、內點與區間開閉無關,離點和上點互為有效
分類:將邊界值分為有效邊界和無效邊界,填入等價類表格
4)、對每個等價類進行唯一的編號
5)、設計用例的輸入
原則:有效等價類,一對多
無效等價類,一對一
3、優點:對輸入的考慮充分
4、缺點:如果不清楚系統的實現方式,造成大量的冗余用例(黑盒方法共有)
對於多輸入的組合不太適宜
規則的幾種情況:
1 .若規則是布爾式的
有效、無效分別取一個 一個真,一個假
2. 若規則是區間
有效的取一個 無效的,在小於區間的取一個,大於區間的取一個,空或零取一個
3. 規則是集合:
有效取一個 無效的在集合外取一個
4. 規則是必須滿足的一個條件:
對無效,要細分無效(先試試其他有效等價類,再試試全部等價類全都不滿足)
例:郵箱注冊,注冊名只能以小寫字母開頭,設計無效等價類時,先試試其他有效等價類,如大寫字母、數字等,再試試其他有效全部都不滿足的情況
有效等價類:程序規格說明有意義,合理的輸入數據
無效等價類:程序規格說明無意義,不合理的輸入數據
邊界值
上點:邊界上的點
內點:區間內的點
離點:離邊界值最近且與上點不屬於同一等價類的點(對於小數,沒有離點,不用取)
規則的幾種情況:
1. 規則是區間:
按上點、內點、離點取
2. 規則是取值的個數:
取最小、最大、中間個數
3.規則是a~z序列:
取a、z
4.規則是集合:
取一個集合內的,取一個集合外的
(0,20)上點是0,20 離點是1,19 [0,20]上點是0,20 離點是-1,21
若規則是下拉菜單:建議每個下拉值都選擇一個