白盒测试技术—逻辑覆盖方法
逻辑覆盖测试,又称,对判定的测试
1.逻辑覆盖基本测试原则
- 对程序中所有的逻辑值均需要测试真值和假值的情况
注:图片中应该是程序流程图,而不是控制流图
1.1语句覆盖
-
设计测试用例时,需要保证程序中每一条可执行语句至少应执行一次。
-
实质上就是,满足控制流图中的点覆盖(即:访问程序中所有节点)
-
-
语句覆盖的弊端
- 关注语句,而非关注判定节点
- 对隐式分支无效
- 对策:优选测试数据
- 更强的覆盖标准:判定覆盖
语句覆盖是最弱的一种覆盖标准,它主要存在两方面弊端。
1.2判定覆盖
- 判定覆盖也称为分支覆盖;
- 设计测试用例时,应保证程序中每个判定节点取得每种可能结果至少一次。
- 判定覆盖相当于对控制流图进行边覆盖。
- 需同时执行
L13
和L24
,或者同时执行L14
和L23
- 判定覆盖的局限性
1.3条件覆盖
- 设计测试用例时,应保证程序中每个复合判定表达式中,每个简单判定条件的取真和取假情况至少执行一次。
- 条件覆盖并不能确保满足判定覆盖
- 相比于判定覆盖,条件覆盖虽然进一步深入检查了判定节点中的每个子条件,但判定节点局部的完全覆盖并不能保证对判定节点整体的完全覆盖
1.4判定/条件覆盖
- 测试用例设计应满足判定节点的取真、取假分支至少执行一次,且每个简单判定条件的取真和取假情况也至少执行一次,即判定覆盖+条件覆盖。
- 将程序中的所有复合判定表达式拆分为简单节点,消除复合表达式中的“与”、“或”关系,此时,判定/条件覆盖就等同于判定覆盖了。
- 设计测试用例的难度大
1.5 条件组合覆盖
- 测试用例的设计应满足每个判定节点中,所有简单判定条件的所有可能的取值组合情况应至少执行一次。
- 考虑判定条件之间是否存在关联性
两个判定节点构成串联关系,判定节点的整体取值存在多种组合情况,如果也需要完全覆盖到,则应将所有子条件的取值放在一起考虑。例子所示:应有16种。
这里,判定条件存在关联,故有些测试用例组合不存在!!!
- 优势:方法简单;只需要找到所有简单条件,并列出真值表,穷尽所有组合情况即可。
- 弊端:测试用例太多,冗余严重。
总结:已有的覆盖指标
- 语句覆盖太弱;
- 判定覆盖和条件覆盖不够全面;
- 判定/条件覆盖设计难度大;
- 条件组合覆盖的测试用例数量太多;
1.6修正的判定/条件覆盖指标
- 通过引入判定条件的独立影响来克服以上不足。
- 该覆盖指标被广泛应用于国防和航空航天领域。
基本思想:在满足判定/条件覆盖的基础上,每个简单判定条件都应独立地影响到整个判定表达式的取值。
实质:利用简单判定条件的
独立影响性
来消除测试用例的冗余。
什么是独立影响性
?
为了消除冗余,我们分别考察条件A和条件B对整个判定节点的独立影响性。
若条件A取真值,则结果为真;
若条件A取假值,则结果为假。
对于本例与关系来说,若条件B取假值,则条件A的取值对整个判定表达式的结果不产生任何影响。
具体措施:抽取能体现所有简单判定条件独立影响性的最少独立影响对。
无法处理耦合的判定条件,例如:year这个变量,同时存在于两个子条件中,则无法使用这种方法,满足修正的判定条件覆盖。
1.7对判定的测试小结
-
前三种,使用最为广泛