邏輯覆蓋
邏輯覆蓋是通過對程序邏輯結構的遍歷實現程序的覆蓋
分為以下幾種
-
語句覆蓋 Statement coverage
-
判定覆蓋 Decision coverage
-
條件覆蓋 Condition coverage
-
條件/判定覆蓋 Condition/decision coverage
-
條件組合覆蓋 Condition combination coverage
-
路徑覆蓋 Path coverage
例子
Path:
-
L1(a → c → e)
-
L2(a → b → d)
-
L3(a → b → e)
-
L4(a → c → d)
語句覆蓋 Statement coverage
語句覆蓋的要求是使所有可執行語句至少執行一次
以上圖為例,所有的可執行語句都在L1上,只要選取一個用例A=2,B=0,x=3即可滿足語句覆蓋
判定覆蓋 Decision coverage
使每個判定獲得一種可能的結果至少一次。
選取用例
-
A=2,B=0,x=3 覆蓋了L1
-
A=1,B=1,x=1 覆蓋了L2
使每個判定的結果都獲得了一次
條件覆蓋 Condition coverage
使每個條件都要完成一次
-
對於第一個判定
-
條件A>1 True為T1,False為!T1
-
條件B=0 True為T2,False為!T2
-
對於第二個判定
-
條件A=2 True為T3,False為!T3
-
條件X>1 True為T4,False為!T4
可以選出以下用例
Test case | Path | Condition value | Coverage branch |
---|---|---|---|
(2,0,3) | ace(L1) | T1 T2 T3 T4 | c,e |
(1,1,1) | abd(L2) | !T1 !T2 !T3 !T4 | b,d |
或者以下這種
Test case | Path | Condition value | Coverage branch |
---|---|---|---|
(1,0,3) | ace(L1) | !T1 T2 !T3 T4 | b,e |
(2,1,1) | abd(L2) | T1 !T2 T3 !T4 | b,e |
條件判定覆蓋 Condition/decision coverage
設計測試用例,使得每個判定的結果都獲得一次,同時每個條件也要完成一次
可以選出以下用例
Test case | Path | Condition value | Coverage branch |
---|---|---|---|
(2,0,3) | ace(L1) | T1 T2 T3 T4 | c,e |
(1,1,1) | abd(L2) | !T1 !T2 !T3 !T4 | b,d |
條件組合覆蓋 Condition combination coverage
設計測試用例,使得每個判定中的所有條件組合都至少實現一次
如果測試用例實現了條件組合覆蓋,那么它一定也實現了條件覆蓋、判定覆蓋和條件判定覆蓋
本例子中每個判定的條件組合如下
- 第一個判定
① A>1, B=0 as T1T2
② A>1, B≠0 as T1!T2
③ A<=1, B=0 as !T1T2
④ A<=1, B≠0 as !T1!T2
- 第二個判定
⑤ A=2, X>1 as T3T4
⑥ A=2, X>=1 as T3!T4
⑦ A≠2, X>1 as !T3T4
⑧ A≠2, X>=1 as !T3!T4
可以選出以下測試用例
Test case | Path | Condition value | Coverage condition no. |
---|---|---|---|
(2,0,3) | ace(L1) | T1 T2 T3 T4 | ①⑤ |
(2,1,1) | abe(L3) | T1 !T2 T3 !T4 | ②⑥ |
(1,0,3) | abe(L3) | !T1 T2 !T3 T4 | ③⑦ |
(1,1,1) | abd(L2) | !T1 !T2 !T3 !T4 | ④⑧ |
盡管這四個測試用例覆蓋了所有的條件組合和4條分支,但是只有3條路徑被覆蓋了,路徑“acd”沒有被經過
路徑覆蓋
設計測試用例覆蓋所有可能的路徑
以上的例子可以選出如下測試用例
Test case | Path | Condition value |
---|---|---|
(2,0,3) | ace(L1) | T1 T2 T3 T4 |
(1,0,1) | abd(L2) | !T1 !T2 !T3 !T4 |
(2,1,1) | abe(L3) | T1 !T2 T3 !T4 |
(3,0,3) | acd(L4) | T1 T2 !T3 !T4 |