白盒测试之条件覆盖

发布于:2024-04-18 ⋅ 阅读:(131) ⋅ 点赞:(0)

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

条件覆盖

实验介绍

条件覆盖是指运行代码进行测试时,程序中所有判断语句中的条件取值为真值为假的情况都被覆盖到,即每个判断语句的所有条件取真值和假值的情况都至少被经历过一次。条件覆盖率的计算方法为:测试时覆盖到的条件语句真、假情况的总数 / 程序中条件语句真、假情况的总数。例如,判断语句 if(a == 0 or b > 2) 中有两个条件 a == 0 和 b > 2 ,使用条件覆盖法需要分别设计测试用例让这两个条件为真和为假的情况都被覆盖到。例如,设计测试用例 a = 0 ,b = 3 ,可以覆盖 a == 0 和 b > 2 这两个条件为真时的情况,此时程序的条件覆盖率为 2 / 4 = 50% ; 如果再设计一个测试用例 a = 1,b = 1 ,则可以将 a == 0 和 b > 2 这两个条件为假的情况也覆盖。也就是说,设计两个测试用例即可以让判断语句 if(a == 0 or b > 2) 的条件覆盖率达到 100% 。

白盒测试中的条件覆盖法是指设计适当数量的测试用例,运行被测程序,使得程序中每个判断语句中条件的真、假分支至少被执行一次。本实验主要通过实例介绍使用条件覆盖法设计白盒测试用例的方法。

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

实验内容

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

    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 == 0 Y1
a == 0 N1
b > 2 Y2
b > 2 N2
a > 0 Y3
a > 0 N3
c > 0 Y4
c > 0 N4

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

根据条件覆盖法的定义,我们需要设计一些测试用例,使程序中所有判定语句中的每个条件为真和为假的情况都至少被执行一次,即上表中列出的 8 种情况都需要至少被执行一次。因此,我们可以设计如下表中的测试用例来对程序中的四个条件进行覆盖:

测试用例编号 输入数据 预期结果 条件覆盖情况 分支覆盖情况
testcase_01 a = 0 , b = 5 , c = 9 result = 5 Y1、Y2、N3、Y4 判断语句 ② 的真分支和③ 的假分支
testcase_02 a = 5 , b = 1 , c = -3 result = 0 N1、N2、Y3、N4 判断语句 ② 的假分支和 ③ 的假分支

通过对上表的分析我们可以发现 :条件覆盖可以使程序中判断语句的每个条件都至少被执行一次,但是,满足了条件覆盖也不能保证所有的分支都已经得到覆盖,例如,本例中的两个测试用例使程序达到了 100% 的条件覆盖,但分支(判定)覆盖只达到了 75%,判断语句 ③ 的真分支未能覆盖到,依然存在着漏测的风险。

实验总结

条件覆盖法可以使程序中判断语句的每个条件都至少被覆盖一次,但满足了条件覆盖却不一定会满足分支(判定)覆盖,对于有些程序判定的错误仍无法发现。