標籤:
本文通過案例的形式,詳細講解黑箱測試用例設計技術中的等價類別劃分法。
等價類別劃分是一種典型的黑箱測試方法,其原理是把程式的輸入欄位劃分成若干部分(子集),然後從每一個子集中選取少數具有代表性的資料作為測試案例。
通過等價類別劃分,可以在儘可能覆蓋所有測試路徑的前提下,大幅度減少測試案例的數目。
本文的主要內容有:
- 等價類別的概念介紹
- 劃分等價類別的原則
- 根據等價類別設計測試案例的方法
- 案例示範
劃分等價類別
等價類別是指某個輸入欄位的子集合。在該子集合中,各個輸入資料對於揭露程式中的錯誤都是等效的。併合理的假設,測試某等價類別的代表值就等於對這一類其它值的測試。
等價類別劃分有兩種不同的情況:
- 有效等價類別:指對於程式的規格說明來說是合理的、有意義的輸入資料構成的集合。
- 無效等價類別:指對程式的規格說明是不合理的或無意義的輸入資料所構成的集合。對於具體的問題,無效等價類別至少應有一個,也可能有多個。
在設計測試案例時,要同時考慮有效等價類別和無效等價類別,以此驗證軟體在正常操作和異常操作時是否都能正常運行。
確定等價類別的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) |
日期格式無效 |
黑箱測試用例設計技術--等價類別劃分法