白盒测试用例之逻辑覆盖
白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。
白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试。这里只讲逻辑覆盖,逻辑覆盖有6种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。其中语句覆盖和路径覆盖与执行路径有关,因此下面放到一起讲(图1),其余4个覆盖与条件判断有关,用图2来举例说明,为方便看图,我把图放到用例的中间。
1、语句覆盖:每条语句至少被执行一次(图1)
用例 |
a |
i |
路径 |
说明 |
1 |
1 |
1 |
ABDEGHI |
本用例一个用例就能执行完所有语句,因为路径C, J没有执行语句,路径F后面虽然有语句”k=2”,但是在本用例路径E已经执行过了 |
(图1) 语句覆盖和路径覆盖实例图
6、路径覆盖:覆盖程序中所有可能的路径,包括循环、条件组合、分支选择等(图1)
用例 |
a |
i |
路径 |
说明 |
1 |
1 |
1 |
ABDEGHI |
从图的起点到终点画出所有路径,有几条路径即需要几个测试用例,每个用例执行一条路径.本例题有3个判断分支,每个分支有两条路径,因此有3*2=6条路径,需要6个用例 |
2 |
1 |
0 |
ABDEGJ |
|
3 |
-1 |
1 |
ABFGHI |
|
4 |
-1 |
0 |
ABFGJ |
|
5 |
0 |
1 |
ACHI |
|
6 |
0 |
0 |
ACJ |
2、判定覆盖(分支覆盖):每个判定(分支)至少执行一次, 注意没有代码的分支可不执行(图2)
用例 |
x |
y |
路径 |
测试内容 |
1 |
90 |
90 |
ABF |
AB分支(判定1=TRUE) |
2 |
50 |
50 |
ACEF |
AC分支(判定1=FALSE) CE分支(判定2=FALSE) |
3 |
90 |
70 |
ACDF |
CD分支(判定2=TRUE) |
3、条件覆盖:每个条件真假至少各执行一次, 不考虑判定结果(分支)(图2)
用例 |
x |
y |
路径 |
测试内容 |
1 |
90 |
90 |
ABF |
X>=80: TRUE Y>=80:TRUE |
2 |
50 |
50 |
ACEF |
X>=80:FALSE Y>=80:FALSE X+Y>=140:FALSE X>=90:FALSE Y>90:FALSE |
3 |
90 |
70 |
ACDF |
X+Y>=140:TRUE X>=90:TRUE |
4 |
70 |
95 |
ACDF |
Y>90:TRUE |
(图2) 判定覆盖、条件覆盖、判定/条件覆盖和条件组合覆盖实例图
4、判定/条件覆盖:每个条件真假至少各执行一次,并且每个分支至少执行一次(图2)
用例 |
x |
y |
路径 |
测试内容 |
1 |
90 |
90 |
ABF |
X>=80:TRUE Y>=80:TRUE AB分支(判定1=TRUE) |
2 |
50 |
50 |
ACEF |
X>=80:FALSE Y>=80:FALSE AC分支(判定1=FALSE) X+Y>=140:FALSE X>=90:FALSE Y>90:FALSE CE分支(判定2=FALSE) |
3 |
90 |
70 |
ACDF |
X+Y>=140:TRUE X>=90:TRUE CD分支(判定2=TRUE) |
4 |
70 |
95 |
ACDF |
Y>90:TRUE |
5、条件组合覆盖:每个条件的所有可能组合至少出现一次(图2)
用例 |
x |
y |
路径 |
测试内容 |
1 |
90 |
90 |
ABF |
判定1真真组合 |
2 |
90 |
70 |
ACDF |
判定1真假组合 判定2真真假组合 |
3 |
70 |
95 |
ACDF |
判定1假真组合 判定2真假真组合 |
4 |
70 |
70 |
ACEF |
判定1假假组合 判定2真假假组合 |
5 |
90 |
30 |
ACEF |
判定2假真假组合 |
6 |
30 |
95 |
ACEF |
判定2假假真组合 |
7 |
50 |
50 |
ACEF |
判定2假假假组合 |
注1:判定2真真真组合不必测试,因为此判定会执行AB分支,不会执行AC分支 注2:判定2假真真组合不存在,后两个条件同时为真时第一个条件肯定为真 |