2018-09-10代码覆盖率

在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标。需要注意的是,覆盖率只能用来做参考,不能当做测试的法宝。

代码覆盖率 = 代码的覆盖程度,一种度量方式。

以下面的代码来分析

1、    if (A>0 && B==0)

2、    x = X / A;

3、    (A==2 || X>1)

4、    x = X+1;

从覆盖源程序语句的详细程度的不同,有以下一些覆盖标准。

1、语句覆盖:选择足够多的测试数据,使被测程序中每个语句至少执行一次。

测试用例:A=2,B=0,X=4,执行了所有语句,但不能保证程序无错,比如 A==2 || A>1 写成 A==2 || X<1.。

2、判定覆盖:又叫分支覆盖,不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,即每个判定的每个分支都至少执行一次

测试用例:A=3,B=0,X=3;A=2,B=1,X=1

判定覆盖比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高,比如上面的测试用例就只覆盖了程序全部路径的一半。

3、条件覆盖:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。

上面的代码共两个判定表达式,每个表达式中有两个条件,在第一行代码处,有几种情况:A>1,A≤=1,B=0,B≠0;在第3行代码处,有几种情况:A=2,A≠2,X>1,X≤1。

测试用例:A=2,B=0,X=4(满足A>1,B=0,A=2,X>1的条件);A=1,B=1,X=1(满足A≤1,B≠0,X≤1的条件)

条件覆盖通常比判定覆盖强,因为它使判定表达式中每个条件都取到了两个不同的结果,判定覆盖却只关系整个判定表达式的值。

满足条件覆盖不一定满足判定覆盖,条件覆盖也不一定包含判定覆盖。如:A=2,B=0,X=1;A=1,B=1,X=2,满足条件覆盖,但不满足判定覆盖。

4、判定/条件覆盖:使判定表达式中的每个条件都取得各种可能的值,且每个判断表达式也取到各种可能值。

上面的代码共两个判定表达式,每个表达式中有两个条件,在第一行代码处,有几种情况:A>1,A≤1,B=0,B≠0;在第3行代码处,有几种情况:A=2,A≠2,X>1,X≤1。

测试用例:A=2,B=0,X=4(满足A>1,A=2,,B=0,X>1,不满足A=2 || X>1,满足A>1&&B==0);A=1,B=1,X=1(满足A=2。A≠2,B≠1,X≤1,满足A=2 || X>1,不满足A>1&&B==0)。与条件覆盖用例相同,说明判定/条件覆盖并一定不比条件覆盖更强。

5、条件组合覆盖:每个判定表达式中条件的各种可能组合都至少出现一次。

上面的例子有8种组合:1、A>1,B=0;2、A>1,B≠0;3、A≤1,B=0;4、A≤1,B≠;5、A=2,X>1;6、A=2,X≤1;7、A≠2,X>1;8、A≠2,X≤1。

测试用例:A=2,B=0,X=4,针对1和5;A=2,B=1,X=1,针对2和6;A=1,B=0,X=2,针对3和7;A=1,B=1,X=1,针对4和8。

条件组合覆盖是上面几种覆盖标准中最强的,满足条件组合覆盖的一定满足判定覆盖、条件覆盖、判定/条件覆盖。但是满足条件组合覆盖的不一定使程序中的每条路径都执行到。

6、路径覆盖:使程序的每条可能路径都至少执行一次。

你可能感兴趣的:(2018-09-10代码覆盖率)