本文通過案例的形式,詳細講解黑盒測試用例設計技術中的等價類划分法。
等價類划分是一種典型的黑盒測試方法,其原理是把程序的輸入域划分成若干部分(子集),然后從每一個子集中選取少數具有代表性的數據作為測試用例。
通過等價類划分,可以在盡可能覆蓋所有測試路徑的前提下,大幅度減少測試用例的數目。
本文的主要內容有:
- 等價類的概念介紹
- 划分等價類的原則
- 根據等價類設計測試用例的方法
- 案例演示
划分等價類
等價類是指某個輸入域的子集合。在該子集合中,各個輸入數據對於揭露程序中的錯誤都是等效的。並合理的假設,測試某等價類的代表值就等於對這一類其它值的測試。
等價類划分有兩種不同的情況:
- 有效等價類:指對於程序的規格說明來說是合理的、有意義的輸入數據構成的集合。
- 無效等價類:指對程序的規格說明是不合理的或無意義的輸入數據所構成的集合。對於具體的問題,無效等價類至少應有一個,也可能有多個。
在設計測試用例時,要同時考慮有效等價類和無效等價類,以此驗證軟件在正常操作和異常操作時是否都能正常運行。
確定等價類的6條原則:
1、在輸入條件規定了取值范圍或取值的個數的情況下,可以確立一個有效等價類和兩個無效等價類。
- 例1:輸入值是學生成績,輸入形式為文本框,要求的輸入范圍是0~100
- 有效等價類:0<=輸入成績<=100;
- 無效等價類1:輸入成績<0;
- 無效等價類2:輸入成績>100
2、在輸入條件規定了輸入值的集合或者規定了“必須如何”的條件的情況下,可以確立一個有效等價類和一個無效等價類。
- 例2:輸入值是人員性別,輸入形式為文本框,要求輸入的內容必須在集合{男,女}中
- 有效等價類:性別=’男’ 或者 ‘女’
- 無效等價類:性別=’人妖’
3、在輸入條件是一個布爾量的情況下,可以確立一個有效等價類和一個無效等價類。
- 例3:輸入值是狀態標識位“是否完成”,輸入形式為單選下拉框,選擇范圍為{是,否}
- 有效等價類:選項=’是’ 或者 ‘否’
- 無效等價類:未進行選擇操作
4、在規定了輸入數據的一組值(假設N個),並且程序要對每一個輸入值進行處理的情況下,可以確立N個有效等價類和一個無效等價類。
- 例4:輸入值是人員性別,輸入形式為文本框,要求輸入的內容必須在集合{男,女}中;不同的性別選擇將跳轉至不同的處理頁面
- 有效等價類1:性別=’男’
- 有效等價類2:性別=’女’
- 無效等價類:性別=’人妖’
5、在規定了輸入數據必須遵守的規則的情況下,可以確立一個有效等價類(符合條件)和若干無效等價類(從各個角度違反規則)。
- 例5:輸入值是人員性別,輸入形式為單選下拉框,要求輸入的內容必須在集合{男,女}中;
- 有效等價類:性別=’男’ 或者 ‘女’
- 無效等價類1:未選擇人員性別
- 無效等價類2:在瀏覽器開發工具中將人員性別的屬性值更改為’人妖’
6、在確知已划分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類划分為更小的等價類。
- 例6:在例2(輸入值是人員性別,輸入形式為文本框,要求輸入的內容必須在集合{男,女}中)的基礎上,不同的性別選擇將跳轉至不同的處理頁面
- 有效等價類:性別=’男’ 或者 ‘女’
- 有效等價類細分1:性別=’男’
- 有效等價類細分2:性別=’女’
- 無效等價類:性別=’人妖’
- 有效等價類:性別=’男’ 或者 ‘女’
列出等價類表
| 輸入條件 | 有效等價類 | 無效等價類 |
|---|---|---|
| … | … | … |
確定測試用例
根據已列出的等價類表,按照如下步驟確定測試用例:
1)為每個等價類規定一個唯一的編號
2)設計一個新的測試用例,使其盡可能多地覆蓋尚未覆蓋的有效等價類。重復這一步,最后使得所有有效等價類均被測試用例所覆蓋。
3)設計一個新的測試用例,使其只覆蓋一個無效等價類。重復這一步,使所有無效等價類均被覆蓋。
Example1
某程序具有如下功能:輸入3個正數a、b、c,分別作為三邊的邊長構成三角形,輸出這3個數所構成的三角形類型。
用等價類划分方法為該程序進行測試用例設計。
划分等價類
分析思路: 步驟一、要求輸入3個數,且3個數都為正數;參照規則5,划分為一個有效等價類和三個無效等價類。
- 有效等價類(1):a>0; b>0; c>0;
- 無效等價類(2):a<=0
- 無效等價類(3):b<=0
- 無效等價類(4):c<=0
步驟二、在有效等價類(1)的基礎上,參照規則6,對該等價類進行細分;考察3個數能否構成三角形,參照規則5,划分為一個有效等價類和三個無效等價類。
- 有效等價類(5):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a
- 無效等價類(6):a>0; b>0; c>0; a+b<=c
- 無效等價類(7):a>0; b>0; c>0; b+c<=a
- 無效等價類(8):a>0; b>0; c>0; a+c<=b
步驟三、在有效等價類(5)的基礎上,參照規則6,對該等價類進行細分;考察3個數能否構成等邊三角形,參照規則2,划分為一個有效等價類和一個無效等價類。
- 有效等價類(9):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a; a=b=c
- 無效等價類(10):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a; a!=b 或 b!=c 或 c!=a
步驟四、在無效等價類(10)的基礎上,參照規則6,對該等價類進行細分;考察3個數能否構成等腰三角形,參照規則4,划分為三個有效等價類和一個無效等價類。
- 有效等價類(11):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a; a=b!=c
- 有效等價類(12):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a; b=c!=a
- 有效等價類(13):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a; c=a!=b
- 無效等價類(14):a>0; b>0; c>0; a+b>c; a+c>b; b+c>a; a!=b; a!=c; b!=c
設計測試用例
| 序號 | [a,b,c] | 覆蓋等價類 | 預期輸出結果 |
|---|---|---|---|
| – | – | 覆蓋有效等價類 | – |
| 1 | [6,6,6] | (1)(5)(9) | 等邊三角形 |
| 2 | [3,3,5] | (1)(5)(10)(11) | 等腰三角形 |
| 3 | [3,4,4] | (1)(5)(10)(12) | 等腰三角形 |
| 4 | [4,5,4] | (1)(5)(10)(13) | 等腰三角形 |
| – | – | 覆蓋無效等價類 | – |
| 5 | [3,4,5] | (1)(5)(14) | 一般三角形 |
| 6 | [-1,3,2] | (2) | 不能構成三角形 |
| 7 | [3,-1,2] | (3) | 不能構成三角形 |
| 8 | [3,2,-1] | (4) | 不能構成三角形 |
| 9 | [1,2,3] | (1)(6) | 不能構成三角形 |
| 10 | [3,1,2] | (1)(7) | 不能構成三角形 |
| 11 | [1,3,2] | (1)(8) | 不能構成三角形 |
Example2
某程序具有如下功能:文本框要求輸入日期信息,日期限定在1990年1月~2049年12月,並規定日期由6位數字字符組成,前4位表示年,后2位表示月;程序需對輸入的日期有效性進行校驗。
用等價類划分方法為該程序的“日期檢查功能”設計測試用例。
划分等價類
步驟一、要求輸入6個數字字符yyyynn;參照規則5,划分為一個有效等價類和三個無效等價類。
- 有效等價類(1):輸入6個數字字符
- 無效等價類(2):輸入6個字符,存在非數字的情況
- 無效等價類(3):輸入少於6個字符
- 無效等價類(4):輸入多於6個字符
步驟二、在有效等價類(1)的基礎上,參照規則6,對該等價類進行細分;考察6個數是否滿足日期格式要求,1990<=yyyy<=2049,01<=nn<=12,參照規則,划分為一個有效等價類和四個無效等價類。
- 有效等價類(5):日期格式滿足要求,1990<=yyyy<=2049,01<=nn<=12
- 無效等價類(6):yyyy不滿足要求,yyyy<1990
- 無效等價類(7):yyyy不滿足要求,yyyy>2049
- 無效等價類(8):nn不滿足要求,nn<01
- 無效等價類(9):nn不滿足要求,nn>12
設計測試用例
| 序號 | yyyynn | 覆蓋等價類 | 預期輸出結果 |
|---|---|---|---|
| – | – | 覆蓋有效等價類 | – |
| 1 | 199307 | (1)(5) | 日期格式有效 |
| – | – | 覆蓋無效等價類 | – |
| 2 | 19June | (2) | 日期格式無效 |
| 3 | 19Jun | (3) | 日期格式無效 |
| 4 | 19June2 | (4) | 日期格式無效 |
| 5 | 198805 | (6) | 日期格式無效 |
| 6 | 205005 | (7) | 日期格式無效 |
| 7 | 198800 | (8) | 日期格式無效 |
| 8 | 199513 | (9) | 日期格式無效 |
