白盒测试
1、白盒测试的概念即特点
代码逻辑的测试
- 白盒测试,又称结构测试、逻辑驱动测试或基于程序代码内部构成的测试。此时,测试工程师需深入考察程序代码的内部结构、逻辑设计等。
- 对于白盒测试工程师来说,软件产品内部构成是透明的。
把程序看成装在一个透明的盒子里,测试者完全知道程序的结构和处理算法,按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
白盒测试主要应用于单元测试阶段。
白盒测试特点
- 优点:代码覆盖率高
- 缺点:
- 覆盖所有代码路径难度大
- 业务功可能覆盖不全
- 测试开销大
白盒测试设计方法
- 静态
- 桌面检查
- 代码审查
- 代码走查
- 代码扫描工具
- 动态
- 逻辑覆盖法
- 基本路径测试法
2、逻辑覆盖
逻辑覆盖:是通多对程序逻辑结构的遍历实现程序的覆盖,分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖等。
逻辑覆盖 | 总结 |
---|---|
语句覆盖 | 每个可执行语句至少执行一次 |
判定覆盖 | 每个判定至少都获得一次“真”值和“假”值 |
条件覆盖 | 每个判定包含的每个条件的可能取值(真/假)都至少满足一次 |
判定/条件覆盖 | 每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次 |
条件组合覆盖 | 每个判定的所有可能的条件取值组合都至少出现一次 |
路径覆盖 | 要求覆盖程序中所有可能的路径 |
2.1、语句覆盖
语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次
-
如果是顺序结构,就是让测试从头执行到尾
-
如果有分支、条件和循环,需要利用下面的方法,执行足够的测试覆盖全部语句
![image-20211108192232859](https://gitee.com/baucd/could-images/raw/master/img/%E4%BE%8B%E9%A2%98.png)
测试用例设计:
数据 | 覆盖的语句 |
---|---|
a=2,b=1,c=6 | 1,2,3,4,5 |
语句覆盖缺点 :
-
语句覆盖是最弱的逻辑覆盖。语句覆盖不能准确的判断运算中的逻辑关系错误。
-
a>0&&b>0 替换成 a>0||b>0 时,在上述实例中,无法发现
2.2、判定覆盖
不仅每个语句必须至少执行一次,而且每个判定的真假值都应该至少执行一次。
![image-20211108192232859](https://gitee.com/baucd/could-images/raw/master/img/%E4%BE%8B%E9%A2%98.png)
测试用例设计:
数据 | 判定一 | 判定二 |
---|---|---|
a=2,b=1 ,c=6 | T | T |
a=-2,b=-1 ,c=-3 | F | F |
或者:
数据 | 判定一 | 判定二 |
---|---|---|
a=1,b=1 ,c=-3 | T | F |
a=1,b=-2 ,c=3 | F | T |
只要满足判定覆盖标准就一定满足语句覆盖标准。
判定覆盖缺点:
- a>0&&b>0 替换成 a>0||b>0 时,同样无法发现
2.3、条件覆盖
不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到真假值。条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,总之,判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。
![image-20211108192232859](https://gitee.com/baucd/could-images/raw/master/img/%E4%BE%8B%E9%A2%98.png)
测试用例设计:
测试用例 | a>0 | b>0 | a>1 | c>1 | 路径 |
---|---|---|---|---|---|
a=2,b=-1,c=-2 | T | F | T | F | 1-3-4 |
a=-1,b=2,c=3 | F | T | F | T | 1-3-4 |
判定一满足条件覆盖但不满足判定覆盖。
2.4、判定-条件覆盖
使得判定表达式中的每个条件都取到真假值,每个判定表达式也都取到真假值。
即同时满足100%判定覆盖和100%条件覆盖。
![image-20211108192232859](https://gitee.com/baucd/could-images/raw/master/img/%E4%BE%8B%E9%A2%98.png)
测试用例设计:
测试用例 | a>0 | b>0 | a>1 | c>1 | 判定一 | 判定二 | 路径 |
---|---|---|---|---|---|---|---|
输入:a=2,b=1,c=6 输出:a=2,b=1,c=5 | T | T | T | T | T | T | 1-2-4 |
输入:a=-1,b=-2,c=-3 输出:a=-1,b=-2,c=-5 | F | F | F | F | F | F | 1-3-5 |
判定条件覆盖缺点:
- a>0&&b>0 替换成 a>0||b>0 时,同样无法发现
2.5、条件组合覆盖
要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。
条件组合覆盖是前述几种覆盖标准中最强的。
满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。但是,条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到,是从对程序路径的覆盖程度分析的逻辑覆盖标准。
![image-20211108192232859](https://gitee.com/baucd/could-images/raw/master/img/%E4%BE%8B%E9%A2%98.png)
条件组合:
组合编号 | a>0 | b>0 | a>1 | c>1 | 判定1 | 判定2 |
---|---|---|---|---|---|---|
1 | T | T | T | T | T | T |
2 | T | F | T | F | F | T |
3 | F | T | F | T | F | T |
4 | F | F | F | F | F | F |
测试用例设计:
测试用例 | a>0 | b>0 | a>1 | c>1 | 判定1 | 判定2 | 路径 |
---|---|---|---|---|---|---|---|
a=2,b=1,c=6 | T | T | T | T | T | T | 1-2-4 |
a=2,b= -1,c= -2 | T | F | T | F | F | T | 1-3-4 |
a=-1,b=2,c=3 | F | T | F | T | F | T | 1-3-4 |
a= -1,b= -2,c= -3 | F | F | F | F | F | F | 1-3-5 |
条件组合覆盖缺点:
- 覆盖了所有组合,但覆盖路径有限,1-2-5 没被覆盖
- 线性地增加了测试用例的数量
2.6、基本路径覆盖
选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次。
![image-20211108192232859](https://gitee.com/baucd/could-images/raw/master/img/%E4%BE%8B%E9%A2%98.png)
找出所有路径:
测试用例 | 路径 | 判定1 | 判定2 |
---|---|---|---|
a=2,b=1,c=6 | 1-2-4 | T | T |
a=2,b= -1,c= -2 | 1-2-5 | F | T |
a=-1,b=2,c=3 | 1-3-4 | F | T |
a= -1,b= -2,c= -3 | 1-3-5 | F | F |
路径覆盖特点
-
满足路径覆盖一定满足判定覆盖,不一定满足条件覆盖。
-
优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
-
缺点 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。
3、基本路径测试
基本路径测试是Tom McCabe提出的一种白盒测试技术。
基本路径测试步骤:
-
依据代码绘制流程图
-
计算流程图的环路复杂度
-
导出可执行路径
-
设计测试用例覆盖每条基本路径
![image-20211108205504782](https://gitee.com/baucd/could-images/raw/master/img/%E5%9F%BA%E6%9C%AC%E8%B7%AF%E5%BE%84%E6%B5%8B%E8%AF%95.png)
-
Path1: 1-2-3-6-7-9-10-1-11
-
Path2: 1-2-3-6-8-9-10-1-11
-
Path3: 1-2-3-4-5-10-1-11
-
Path4: 1-11
基本路径测试并不是测试所有路径的组合,仅仅保证每条基本路径被执行一次