语句覆盖

语句覆盖:覆盖所有的基本语句。如果在下图中只要覆盖B和D就满足语句覆盖的条件了。

如何实现语句覆盖 生成测试用例 Java 实现 语句覆盖的测试用例_白盒测试


设计测试用例满足语句覆盖:

测试用例

覆盖路径

a=2,b=0,x=2

SABCDE

但是,语句覆盖有一个缺点:它发现不了程序中的逻辑运算错误,假如我们在写程序的时候将第一个判定写成了 a>1 || b == 0,那么语句覆盖的测试用例将测试不出来这种错误。

判定覆盖

判定覆盖:使得程序中每个判断的真假值至少取一次。
设计测试用例满足判定覆盖:

测试用例

第一个判定,第二个判定

覆盖路径

a=2,b=0,x=3

TT

SABCDE

a=1,b=0,x=1

FF

SACE

或者

测试用例

第一个判定,第二个判定

覆盖路径

a=3,b=0,x=3

TF

SABCE

a=2,b=1,x=1

FT

SACDE

可见由上面的例子,满足判定覆盖,至少需要2个测试用例就可以满足了。但是,如果将判定条件X>1错写成X<1,用最后一个测试用例来测试却不影响结果,所以判定覆盖无法确定判断内部条件的错误。

条件覆盖

条件覆盖:使得程序中每个判定中的每一个条件的真假值至少取一次。
第一个判断的4种情况:

条件

表达式的值

类别

a>1

T

记为T1

a≤1

F

记为F1

b=0

T

记为T2

b≠0

F

记为F2

第二个判断的4种情况

条件

表达式的值

类别

a=2

T

记为T3

a≠2

F

记为F3

x>1

T

记为T4

x≤1

F

记为F4

设计测试用例满足条件覆盖:

测试用例

覆盖条件

路径

判定结果

a=2,b=1,x=1

T1 F2 T3 F4

SACDE

FT

a=1,b=0,x=3

F1 T2 F3 T4

SACDE

FT

由上面的测试用例可以看出,第一个判定只取到了F,第二个判定只取到了T,所以满足条件覆盖不一定满足判定覆盖。条件覆盖只考虑判定中的条件,而不考虑判定结果。

判定—条件覆盖

判定条件覆盖:顾名思义,既要满足判定覆盖,又要满足条件覆盖。
设计测试用例满足判定—条件覆盖:

测试用例

覆盖条件

路径

判定结果

a=2,b=0,x=3

T1 T2 T3 T4

SABCDE

TT

a=1,b=1,x=1

F1 F2 F3 F4

SACE

FF

上面的测试用例,既满足判定覆盖,又满足条件覆盖。

条件组合

条件组合覆盖:所谓条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。

条件组合覆盖也是既满足判定覆盖,又满足条件覆盖,但是有可能会漏掉路径,测试也不完全。

如何实现语句覆盖 生成测试用例 Java 实现 语句覆盖的测试用例_测试用例_02


对于每个判断,要求所有可能的条件取值的组合都必须取到。在图中的每个判断各有两个条件,所以各有4个条件取值的组合。我们取4个测试用例,就可用以覆盖上面8种条件取值的组合。在这儿我们只考虑每个判定内的条件组合,如果让两个判定的条件组合,则需要16个测试用例。

测试用例

覆盖组合

路径

覆盖条件

判定结果

a=2,b=0,x=3

①⑤

SABCDE

T1 T2 T3 T4

TT

a=2,b=1,x=1

②⑥

SACDE

T1 F2 T3 F4

FT

a=1,b=0,x=3

③⑦

SACDE

F1 T2 F3 T4

FT

a=1,b=1,x=1

④⑧

SACE

F1 F2 F3 F4

FF

上面的程序有4条不同的路径:SABCDE、SACDE、SACE、SABCE,可见上面的条件组合测试用例,漏了最后一条路径。

路径覆盖

路径覆盖:覆盖所有的路径。
满足路径覆盖的测试用例只要在上面的测试用例再加一条就可以了:

测试用例

路径

a=3,b=0,x=3

SABCE