搞懂逻辑覆盖

2019-02-28

逻辑覆盖

逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖

分为以下几种

  • 语句覆盖 Statement coverage

  • 判定覆盖 Decision coverage

  • 条件覆盖 Condition coverage

  • 条件/判定覆盖 Condition/decision coverage

  • 条件组合覆盖 Condition combination coverage

  • 路径覆盖 Path coverage

例子

avatar

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

使每个判定获得一种可能的结果至少一次。

选取用例

  1. A=2,B=0,x=3 覆盖了L1

  2. 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 casePathCondition valueCoverage branch
(2,0,3)ace(L1)T1 T2 T3 T4c,e
(1,1,1)abd(L2)!T1 !T2 !T3 !T4b,d

或者以下这种

Test casePathCondition valueCoverage branch
(1,0,3)ace(L1)!T1 T2 !T3 T4b,e
(2,1,1)abd(L2)T1 !T2 T3 !T4b,e

条件判定覆盖 Condition/decision coverage

设计测试用例,使得每个判定的结果都获得一次,同时每个条件也要完成一次

可以选出以下用例

Test casePathCondition valueCoverage branch
(2,0,3)ace(L1)T1 T2 T3 T4c,e
(1,1,1)abd(L2)!T1 !T2 !T3 !T4b,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 casePathCondition valueCoverage 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 casePathCondition 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