一、等價類划分法
1. 什么等價類划分法
等價類划分是一種典型的黑盒測試用例設計方法,使用該方法主要是對
測試子項進行測試規格分析,等到用例,而不用對系統內部的處理深入了解。
等價類是指某個
輸入域的子集合,在該子集合中,
各個輸入的數據對於揭露軟件中的錯誤都是等效的。並合理地假定:
測試某等價類的代表值就等於對這一類的其它的值的測試。因此,可以把全部輸入數據合理划分為若干等價類,在每一個等價類中取一個數據作為輸入條件,就可以
用少量代表性的測試數據取得較好的測試結果。
等價類划分有兩種情況,
有效等價類 和
無效等價類。
有效等價類:是指對於的規格說明來說是合理的,有意義的輸入數據構成的集合。利用有效等價類可以檢驗程序是否實現了規格說明中所規定的功能和性能。
無效等價類:是指對於系統的規格說明來說是不合理或無意義的輸入數據構成的集合。
2. 產生的背景(或說目的)
采用等價類划分,是將系統的輸入域划分為若干部分,然后從每個部分選取少量代表性數據進行測試,這樣可以
避免窮舉法產生的大量用例。
3. 如何使用等價類划分法
3.1 划分等價類
等價類划分追求效率與效果的平衡,到底將等價類划分多細取決於人力資源與進度,但必須做到將所有的等價類都覆蓋到。出發點與目標是考慮設計用例把每個輸入的每種情況都有用例覆蓋。具體可以參考如下幾條原則:
1. 在輸入條件規定了取值范圍或值的個數時,可以確定一個有效等價類和兩個無效等價類。
例:
輸入條件
|
有效等價類
|
無效等價類
|
1~9
|
1~9
|
小於1
大於9
|
輸入數字字符個數為3(不考慮非數字字符)
|
輸入3個數字
|
輸入少於3個
輸入多於3個
|
2. 在輸入條件規定了輸入值的集合或者必須如何的條件時,可以確定一個有效等價類和一個無效等價類。
例:
輸入條件
|
有效等價類
|
無效等價類
|
集合[1,2,3]
|
[1,2,3]
|
非[1,2,3]
|
數字字符
|
數字字符
|
非數字字符
|
3. 在輸入條件是一個布爾值時,可以確定一個有效等價類和一個無效等價類
例:
輸入條件
|
有效等價類
|
無效等價類
|
true
|
true
|
false
|
4. 在輸入條件規定了輸入數據為一組值,假設為n,且程序會對每個值分別進行處理時,可以確定n個有效等價類和一個無效等價類。(區別的集合,集合強調的是整體概念,即集合中的所有值會得到相同的情況,這也是為什么此種情況為何強調程序對每個值分別進行處理的原因)
例:
輸入條件
|
有效等價類
|
無效等價類
|
某公司對員工職級與薪水划分為3級,對應輸入條件P1、P2、P3分別得到m1、m2、m3三種薪水
|
P1
P2
P3
|
除了P1、P2、P3之外任意值
|
5. 在輸入條件規定了輸入數據必須遵守的規則時,則可確立一個有效等價類和若干個無效等價類。
例:
輸入條件
|
有效等價類
|
無效等價類
|
注冊用戶名:
必須為大寫字母開頭,且為字母、數字組合
|
以大寫字母開頭的字母及數字字符組合的字符串
|
非大寫字母開頭
無數字字符
數字字符開頭
空
...
(從不同的角度出發,可以有不同的無效等價類)
|
6. 在確知已划分的等價類中各元素在程序處理中的方式不同時,則應再將該等價類類進一步划分為更小的等價類。
例:
輸入條件
|
有效等價類
|
無效等價類
|
注冊用戶名:
必須為大寫字母開頭,且為字母、數字組合、長度為[3,8]
|
輸入字符類型:以大寫字母開頭的字母及數字字符組合的字符串
|
非大寫字母開頭
無數字字符
數字字符開頭
空
特殊字符
...
(從不同的角度出發,可以有不同的無效等價類)
|
輸入字符長度:[3,8]
|
長度小於3
長度大於8
|
7. 輸出域覆蓋:當遇到中間輸出結果,對最終結果有影響時,需要將中間作為輸入條件進行考慮。(對於所測試的功能來說,輸入輸出之間一般為非線性關聯,所以在對輸入進行等價類邊界值方法進行划分區間,選取數據進行測試用例設計時,並不能覆蓋到所有的輸出結果。輸出域覆蓋法,則是根據現有輸入,以及已存在的數據得到輸出結果,然后對輸出結果進行等價類邊界值分析,從而反推輸入信息,來進行測試用例設計的方法)
例:輸入三個整數為三角形三邊a,b,c,檢查確定三角形為一般三角形、等腰三角形、等邊三角形。
域
|
輸入條件(輸入域的輸出結果)
|
有效等價類
|
無效等價類
|
輸入域
|
輸入3個整數
|
三個數為整數
|
一邊為非整數 a為非整數
b為非整數
c為非整數
兩邊為非整數 ab為非整數
ac為非整數
bc為非整數
三邊為非整數 abc均為非整數
|
3個數
|
只輸入一個數 只輸入a
只輸入b
只輸入c
只輸入兩個數 只輸入ab
只輸入ac
只輸入bc
輸入三個以上 輸入3個以上
|
||
正數
|
一邊為非正 a<=0
b<=0
c<=0
兩邊為非正 a<=0&b<=0
a<=0&c<=0
b<=0&c<=0
三邊為非正 a<=0、b<=0、c<=0
|
||
輸出域
|
一般三角形
|
a+b>c
a+c>b
b+c>a
|
a+b<=c
a+c<=b
b+c<=a
|
等腰三角形
|
a=b
a=c
b=c
(且以上三個條件,兩邊之后大於第三邊)
|
a!=b&a!=c&b!=c
|
|
等邊三角形
|
a=b=c
|
a!=b=c
a=b!=c
a!=b!=c
|
3.2 確定測試用例
划分完等價類后可以按以下步驟設計測試用例
1. 為每一個等價類確定一個唯一的編號
2. 用最少的用例覆蓋最多的有效等價類,即有效等價類要盡可能多的覆蓋尚未覆蓋的有效等價類,重復這一步,直到所有有效等價類都被覆蓋
3. 每個無效等價類對應一個用例,重復這一步,直到所有無效等價類都被覆蓋
3.3 案例
輸入三個一正整數,判斷三個數組成一般三角形、等腰三角形、等邊三解開:
第一步:划分有效等價類、無效等價類並編號
域
|
輸入條件(輸入域的輸出結果)
|
有效等價類
|
無效等價類
|
輸入域
|
輸入3個整數
|
三個數為整數(1)
|
一邊為非整數 a為非整數(11)
b為非整數(12)
c為非整數 (13)
兩邊為非整數 ab為非整數(14)
ac為非整數(15)
bc為非整數(16)
三邊為非整數 abc均為非整數(17)
|
3個數(2)
|
只輸入一個數 只輸入a(18)
只輸入b(19)
只輸入c(20)
只輸入兩個數 只輸入ab(21)
只輸入ac(22)
只輸入bc(23)
輸入三個以上 輸入3個以上 (24)
三個數都不輸入 abc均為空 (25)
|
||
正數(3)
|
一邊為非正 a<=0(26)
b<=0(27)
c<=0(28)
兩邊為非正 a<=0&b<=0(29)
a<=0&c<=0(30)
b<=0&c<=0(31)
三邊為非正 a<=0、b<=0、c<=0(32)
|
||
輸出域
|
一般三角形
|
a+b>c(4)
a+c>b(5)
b+c>a(6)
|
a+b<=c(33)
a+c<=b(34)
b+c<=a(35)
|
等腰三角形
|
a=b(7)
a=c(8)
b=c(9)
(且以上三個條件,兩邊之后大於第三邊)
|
a!=b&a!=c&b!=c(36)
|
|
等邊三角形
|
a=b=c(10)
|
a!=b=c (37)
a=b!=c (38)
a!=b!=c (39)
|
第二步:覆蓋有效等價類,無效等價類
① 有效等價類覆蓋
測試數據
|
預期結果
|
覆蓋范圍
|
6,7,8
|
一般三角形
|
(1)(2)(3)(4)(5)(6)
|
6,6,7
|
等腰三角形
|
(1)(2)(3)(4)(5)(6)(7)
|
6,7,6
|
(1)(2)(3)(4)(5)(6)(8)
|
|
6,7,7
|
(1)(2)(3)(4)(5)(6)(9)
|
|
6,6,6
|
等邊三角形
|
(1)(2)(3)(4)(5)(6)(10)
|
②無效等價類覆蓋
測試數據
|
預期結果
|
覆蓋范圍
|
0,1,2
|
不構成三角形
|
(11)
|
1,0,2
|
(12)
|
|
1,2,0
|
(13)
|
|
0,0,1
|
(14)
|
|
0,1,0
|
(15)
|
|
1,0,0
|
(16)
|
|
0,0,0
|
(17)
|
|
6,[],[]
|
(18)
|
|
[],7,[]
|
(19)
|
|
[],[],8
|
(20)
|
|
6,7,[]
|
(21)
|
|
6,[],8
|
(22)
|
|
[],7,8
|
(23)
|
|
6,7,8,9
|
(24)
|
|
[],[],[]
|
(25)
|
|
-1,1,2
|
(26)
|
|
1,-1,2
|
(27)
|
|
1,2,-1
|
(28)
|
|
-2,-1,1
|
(29)
|
|
-2,1,-1
|
(30)
|
|
1,-2,-1
|
(31)
|
|
-3,-2,-1
|
(32)
|
|
6,7,14
|
(33)
|
|
6,14,7
|
(34)
|
|
14,6,7
|
(35)
|
|
3,4,5
|
非等腰三角形
|
(36)
|
4,5,5
|
非等邊三角形
|
(37)
|
4,4,5
|
(38)
|
|
4,5,6
|
(39)
|
黑盒用例設計方法后續內容,持續更新~~~