白盒测试技术—逻辑覆盖方法

逻辑覆盖测试,又称,对判定的测试

1.逻辑覆盖基本测试原则

  • 对程序中所有的逻辑值均需要测试真值和假值的情况

在这里插入图片描述

在这里插入图片描述

注:图片中应该是程序流程图,而不是控制流图

1.1语句覆盖

  • 设计测试用例时,需要保证程序中每一条可执行语句至少应执行一次。

  • 实质上就是,满足控制流图中的点覆盖(即:访问程序中所有节点)

  • 在这里插入图片描述

  • 语句覆盖的弊端

    • 关注语句,而非关注判定节点
    • 对隐式分支无效
    • 对策:优选测试数据
    • 更强的覆盖标准:判定覆盖

    语句覆盖是最弱的一种覆盖标准,它主要存在两方面弊端。

1.2判定覆盖

  • 判定覆盖也称为分支覆盖;
  • 设计测试用例时,应保证程序中每个判定节点取得每种可能结果至少一次。
  • 判定覆盖相当于对控制流图进行边覆盖。

在这里插入图片描述

  • 需同时执行L13L24,或者同时执行L14L23

在这里插入图片描述

  • 判定覆盖的局限性

在这里插入图片描述

1.3条件覆盖

  • 设计测试用例时,应保证程序中每个复合判定表达式中,每个简单判定条件的取真和取假情况至少执行一次。
  • 条件覆盖并不能确保满足判定覆盖
  • 相比于判定覆盖,条件覆盖虽然进一步深入检查了判定节点中的每个子条件,但判定节点局部的完全覆盖并不能保证对判定节点整体的完全覆盖

在这里插入图片描述

1.4判定/条件覆盖

  • 测试用例设计应满足判定节点的取真、取假分支至少执行一次,且每个简单判定条件的取真和取假情况也至少执行一次,即判定覆盖+条件覆盖。
  • 将程序中的所有复合判定表达式拆分为简单节点,消除复合表达式中的“与”、“或”关系,此时,判定/条件覆盖就等同于判定覆盖了。
  • 设计测试用例的难度大

在这里插入图片描述

1.5 条件组合覆盖

  • 测试用例的设计应满足每个判定节点中,所有简单判定条件的所有可能的取值组合情况应至少执行一次。
  • 考虑判定条件之间是否存在关联性

在这里插入图片描述

两个判定节点构成串联关系,判定节点的整体取值存在多种组合情况,如果也需要完全覆盖到,则应将所有子条件的取值放在一起考虑。例子所示:应有16种。

在这里插入图片描述

在这里插入图片描述

这里,判定条件存在关联,故有些测试用例组合不存在!!!
在这里插入图片描述

  • 优势:方法简单;只需要找到所有简单条件,并列出真值表,穷尽所有组合情况即可。
  • 弊端:测试用例太多,冗余严重。

总结:已有的覆盖指标

  • 语句覆盖太弱;
  • 判定覆盖和条件覆盖不够全面;
  • 判定/条件覆盖设计难度大;
  • 条件组合覆盖的测试用例数量太多;

1.6修正的判定/条件覆盖指标

  • 通过引入判定条件的独立影响来克服以上不足。
  • 该覆盖指标被广泛应用于国防和航空航天领域。

基本思想:在满足判定/条件覆盖的基础上,每个简单判定条件都应独立地影响到整个判定表达式的取值。

实质:利用简单判定条件的独立影响性来消除测试用例的冗余。

什么是独立影响性

  • 在这里插入图片描述

为了消除冗余,我们分别考察条件A和条件B对整个判定节点的独立影响性。

若条件A取真值,则结果为真;

若条件A取假值,则结果为假。

对于本例与关系来说,若条件B取假值,则条件A的取值对整个判定表达式的结果不产生任何影响。

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

具体措施:抽取能体现所有简单判定条件独立影响性的最少独立影响对。

  • 在这里插入图片描述

无法处理耦合的判定条件,例如:year这个变量,同时存在于两个子条件中,则无法使用这种方法,满足修正的判定条件覆盖。

1.7对判定的测试小结

-在这里插入图片描述

  • 在这里插入图片描述

前三种,使用最为广泛

  • 在这里插入图片描述
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐