逻辑覆盖
逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖
分为以下几种
- 语句覆盖 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 |