等價類划分法是一種典型的黑盒測試用例設計方法。采用等價類划分法時,完全不用考慮程序內部結構,設計測試用例的唯一依據是軟件需求規格說明書。
等價類
所謂等價類,是輸入條件的一個子集合,該輸入集合中的數據對於揭示程序中的錯誤是等價的。等價類又分為有效等價類和無效等價類。有效等價類代表對程序有效的輸入,而無效等價類則是其他任何可能的輸入(即不正確的輸入值)。有效等價類和無效等價類都是使用等價類划分法設計用例時所必須的,因為被測程序若是正確的,就應該既能接受有效的輸入,也能接受無效輸入的考驗。
划分等價類的標准:
1.完備測試、避免冗余;
2.划分等價類重要的是:集合的划分,划分為互不相交的一組子集,而子集的並是整個集合;
3.並是整個集合:完備性;
4.子集互不相交:保證一種形式的無冗余性;
5.同一類中標識(選擇)一個測試用例,同一等價類中,往往處理相同,相同處理映射到"相同的執行路徑"。
等價類划分的方法:
1.如果輸入條件規定了一個取值范圍,那么就應該確定一個有效等價類以及兩個無效等價類。
如月份取值在1~12之間,由此可確定一個有效等價類即月份在1~12之間,和兩個無效等價類,即月份取值小於1及月份取值大於12.
2.規定了輸入條件必須如何的情況下可以確定一個有效等價類和一個無效等價類。
如輸入值必須大於0,則有效等價類為輸入值大於0 ,無效等價類為輸入值小於或者等於0.
3.在輸入數據是一個bool常量的情況下,可以確定一個有效等價類和一個無效等價類。
4.在規定了輸入數據由n個值構成的情況下,並要求定其中的每個值進行測試時,可以確定n個有效等價類和一個無效等價類。
如交通工具類型為公共汽車、卡車、出租車、火車或者摩托車,那么就應該為每一個輸入值確定一個有效等價類和一個無效等價類例如拖車。
5.在規定了輸入數據冰箱最受的規則的情況下,可以確定一個有效等價類和若干個無效等價類(從不同角度違反規則)。
如輸入值必須是數字類型的字符,則可確定一個有效等價類,及輸入值為數字類型得字符,和多個無效等價類,即輸入值為字母、為專用字符(如+、*、@等)以及為非打印字符(如回車、空格等)。
6.在確知已划分的等價類中各元素在程序處理中的方式不同的情況下,則應再將該等價類進一步的划分為更小的等價類。
划分等價類之后,應建立等價類表,列出與每一個輸入條件對於的有效等價類和無效等價類。
設計測試用例
1.為每一個等價類規定一個唯一的編號;
2.設計一個新的測試用例,使其盡可能多地覆蓋尚未被覆蓋地有效等價類,重復這一步,直到所有的有效等價類都被覆蓋為止;
3.設計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋的無效等價類,重復這一步,直到所有的無效等價類都被覆蓋為止。
舉例
注冊郵箱時郵箱名要求6~18個字符,可使用字母、數字、下划線,需以字母開頭。

等價類表
| 輸入條件 | 有效等價類 | 無效等價類 |
| 郵箱名 | 6~18個字符(1) | 少於6個字符(2) |
| 包含字母、數字、下划線(5) | 除字母、數字、下划線的特殊字符(6) |
|
| 以字母開頭(9) | 以數字或下划線開頭(10) |
測試用例
| 編號 | 輸入數據 | 覆蓋等價類 | 預期輸出 |
| 1 | test_123 | (1)(5)(9) | 合法輸入 |
| 2 | test | (2)(5)(9) | 非法輸入 |
| 3 | test_1234567890_1234567890 | (3)(5)(9) | 非法輸入 |
| 4 | NULL | (4) | 非法輸入 |
| 5 | test&&123 | (1)(6)(9) | 非法輸入 |
| 6 | test 123 | (1)(7)(9) | 非法輸入 |
| 7 | test測試123 | (1)(8)(9) | 非法輸入 |
| 8 | 123_test | (1)(5)(10) | 非法輸入 |
