白盒测试之条件组合覆盖

白盒测试之条件组合覆盖(蓝桥课学习笔记)

实验介绍

使用分支-条件覆盖法设计白盒测试用例时可以使程序中所有判断语句中的条件取值为真、为假的情况和整个判断语句取真分支、假分支的情况都至少被执行过一次,但无法覆盖到所有路径,仍然会有一些逻辑运算等错误未被测试到。

条件组合覆盖又称为多条件覆盖,是指设计足够数据的测试用例,使每个判定语句中的所有判定条件的各种可能的组合都至少被执行一次。条件组合覆盖与分支-条件覆盖的不同之处在于:条件组合覆盖不是简单的要求每个条件为真、为假两种情况都至少被执行一次,而是要求让每个条件为真、为假情况所有可能的组合都至少被执行一次。例如,判断语句 if ( a == 0 or b > 2 ) 中有两个条件 a == 0 和 b > 2 ,使用条件组合覆盖法设计测试用例时,要求这两个条件的取真值和取假值的组合至少各执行一次,即 a == 0(真)与 b > 2 (真)、a == 0(真)与 b > 2 (假)、 a == 0(假)与 b > 2 (真)、 a == 0(假)与 b > 2 (假)这四种组合情况。

本实验主要通过实例介绍使用条件组合覆盖法设计白盒测试用例。

知识点
  • 条件组合覆盖法设计白盒测试用例

实验内容

为了方便作比较,本实验仍然使用如下的代码作为测试对象:

    public static int test(int a,int b,int c) {
1         int result = 0;
2         if(a == 0 or b > 2) {
3             result = b - a;
          }
4         if(a > 0 and c > 0) {
5             result = c * a;
        }
6        return result;
    }

使用条件组合覆盖法设计白盒测试用例的具体步骤如下:

第 1 步:分析待测试代码,画出程序的流程图。上述代码的参考流程图如下图所示:

图片描述

标识了路径的流程图如下:

图片描述

第 2 步:分析流程图。

由流程图可知:这段代码中有两个判断语句,分别是上图中标识为 ② 和 ③ 的语句,语句 ② 中有两个条件语句,分别为 a == 0 和 b > 2 ;语句 ③ 中也有两个条件,分别为 a > 0 和 c > 0 。为了使后续的分析过程更加清晰明了,我们先将条件语句进行相应的标识,具体如下:

条件取值标识
a == 0Y1
a == 0N1
b > 2Y2
b > 2N2
a > 0Y3
a > 0N3
c > 0Y4
c > 0N4

根据条件组合覆盖法的定义,我们需要设计一些测试用例分别使判断语句 ② 中两个条件的四种组合及判断语句 ③ 中两个条件的四种组合都至少执行一次,如下表所示:

组合编号判断语句条件组合
1a == 0 or b > 2Y1 + Y2
2a == 0 or b > 2Y1 + N2
3a == 0 or b > 2N1 + Y2
4a == 0 or b > 2N1 + N2
5a > 0 and c > 0Y3 + Y4
6a > 0 and c > 0Y3 + N4
7a > 0 and c > 0N3 + Y4
8a > 0 and c > 0N3 + N4

第 3 步:使用条件组合覆盖法编写测试用例。

分别设计测试用例覆盖上表中的各种组合,具体如下:

测试用例编号输入数据预期结果条件组合覆盖条件覆盖路径覆盖
testcase_01a = 0 , b = 3 , c = 1result = 3组合 1 、组合 7Y1、Y2、N3、Y4B - C
testcase_02a = 0 , b = 1 , c = 0result = 1组合 2 、组合 8Y1、N2、N3、N4B - C
testcase_03a = 1 , b = 5 , c = 3result = 3组合 3 、组合 5N1、Y2、Y3、Y4B - D
testcase_04a = 2 , b = 0 , c = -1result = 1组合 4 、组合 6N1、N2、Y3、N4A - C

通过对上表的分析我们可以发现 :条件组合覆盖可以使程序判断断语句中的条件组合都至少被执行一次,但是,满足了条件组合覆盖也不能保证所有的路径都已经得到覆盖,在本例中,四个测试用例实现了条件组合的 100% 覆盖,但是仍有路径 A - D 未被覆盖到。如果要将路径全部覆盖,需要再增加一个覆盖路径 A - D 的测试用例,即使用条件组合 + 分支覆盖的全部测试用例如下:

测试用例编号输入数据预期结果条件组合覆盖条件覆盖路径覆盖
testcase_01a = 0 , b = 3 , c = 1result = 3组合 1 、组合 7Y1、Y2、N3、Y4B - C
testcase_02a = 0 , b = 1 , c = 0result = 1组合 2 、组合 8Y1、N2、N3、N4B - C
testcase_03a = 1 , b = 5 , c = 3result = 3组合 3 、组合 5N1、Y2、Y3、Y4B - D
testcase_04a = 2 , b = 0 , c = -1result = 0组合 4 、组合 6N1、N2、Y3、N4A - C
testcase_05a = 2 , b = 0 , c = 5result = 10组合 4 、组合 5N1、N2、Y3、Y4A - D

实验总结

条件组合覆盖可以使程序所有判断语句中的条件组合都被覆盖,但是仍然不能保证覆盖所有路径,需要再补充用例进行路径覆盖。另外,如果程序中的条件和分支比较多,需要设计的测试用例数量会很庞大。

  • 25
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大猪猪吃虎虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值