白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。
白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试。这里只讲逻辑覆盖,逻辑覆盖有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假真真组合不存在,后两个条件同时为真时第一个条件肯定为真 |