语句覆盖
语句覆盖:覆盖所有的基本语句。如果在下图中只要覆盖B和D就满足语句覆盖的条件了。
设计测试用例满足语句覆盖:
测试用例 | 覆盖路径 |
---|---|
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 |
上面的测试用例,既满足判定覆盖,又满足条件覆盖。
条件组合
条件组合覆盖:所谓条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。
条件组合覆盖也是既满足判定覆盖,又满足条件覆盖,但是有可能会漏掉路径,测试也不完全。
对于每个判断,要求所有可能的条件取值的组合都必须取到。在图中的每个判断各有两个条件,所以各有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 |