白盒测试-条件覆盖

news2025/6/21 14:17:28

​ 条件覆盖是指运行代码进行测试时,程序中所有判断语句中的条件取值为真值为假的情况都被覆盖到,即每个判断语句的所有条件取真值和假值的情况都至少被经历过一次

​ 条件覆盖率的计算方法为:测试时覆盖到的条件语句真、假情况的总数 / 程序中条件语句真、假情况的总数。

​ 判断语句 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) {
    int result = 0;
    if (a == 0 || b > 2) {
        result = b - a;
    }
    if (a > 0 && c > 0) {
        result = c * a;
    }
    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

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

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

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

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

代码实例

​ 根据以上流程图和设计的测试用例,编写单元测试类。

Demo.java

public class Demo {
    public static int test(int a, int b, int c) {
        int result = 0;
        if (a == 0 || b > 2) {
            result = b - a;
        }
        if (a > 0 && c > 0) {
            result = c * a;
        }
        return result;
    }
}

DemoTest.java

import org.junit.Assert;
import org.junit.Test;

public class DemoTest {

    private Demo demo = new Demo();

    @Test
    public void testDemoTest01() {
        Assert.assertEquals(5, demo.test(0, 5, 9));
    }

    @Test
    public void testDemoTest02() {
        Assert.assertEquals(0, demo.test(5, 1, -1));
    }
}

​ 可以看到,条件覆盖不一定可以达到分支也覆盖。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

期货学习笔记-MACD指标学习2

MACD底背离把握买入多单的技巧 底背离的概念及特征 底背离指的是MACD指标与价格低点之间的对比关系,这里需要明白的是MACD指标的涨跌动能和价格形态衰竭形态之间的关系,如果市场价格创新低而出现衰竭形态同时也有底背离形态的出现,此时下跌…

2024认证杯数学建模A题思路模型代码

目录 2024认证杯数学建模A题思路模型代码:4.11开赛后第一时间更更新,获取见文末名片 2023年认证杯数学建模 2024年认证杯思路代码获取见此 2024认证杯数学建模A题思路模型代码:4.11开赛后第一时间更更新,获取见文末名片 2023年认…

关于AI发展的3种声音:杨植麟 朱啸虎 王小川

1、杨植麟:技术信仰派 2、朱啸虎:市场信仰派 3、王小川:中间派 References 对话月之暗面杨植麟:向延绵而未知的雪山前进朱啸虎讲了一个中国现实主义AIGC故事王小川想提出中国AGI第三种可能性

【C 数据结构】线性表

文章目录 【 1. 线性表 】【 2. 顺序存储结构、链式存储结构 】【 3. 前驱、后继 】 【 1. 线性表 】 线性表,全名为线性存储结构,线性表结构存储的数据往往是可以依次排列的(不考虑数值大小顺序)。 例如,存储类似 {1…

Golang快速入门教程(一)

目录 一、环境搭建 1.windows安装 2.linux安装 3.开发工具 二、变量定义与输入输出 1.变量定义 2.全局变量与局部变量 3.定义多个变量 4.常量定义 5.命名规范 6.输出 7.输入 三、基本数据类型 1.整数型 2.浮点型 3.字符型 4.字符串类型 转义字符 多行字符…

RN使用蓝牙扫描

我项目需要用到蓝牙模块,蓝牙扫描到设备并且获取到电量显示到页面上,因此我做了如下demo,使用了react-native-ble-plx这个插件 点击进入官方文档官方文档 1.安卓环境配置(ios暂定,还没做ios,不过下面的方法是兼容的,自行配置ios权限) android/app/src/main/AndroidManifest.xml…

API管理平台:你用的到底是哪个?

Apifox是不开源的,在github的项目只是readme文件,私有化需要付费。当然saas版目前是免费使用的。 一、Swagger 为了让Swagger界面更加美观,有一些项目可以帮助你实现这一目标。以下是一些流行的项目,它们提供了增强的UI和额外的功…

代码签名证书:确保软件安全与可信性的关键工具

在数字化时代,软件已成为各行各业的核心驱动力。然而,随着网络威胁日益复杂,用户对于软件来源的可靠性、内容的完整性和发布者的可信度提出了更高要求。为满足这一需求,代码签名证书应运而生,它通过先进的加密技术&…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…

【智能优化算法详解】粒子群算法PSO量子粒子群算法QPSO

1.粒子群算法PSO 博主言简意赅总结-算法思想&#xff1a;大方向下个体自学习探索群体交流共享 对比适应度找到最优点 背景 粒子群算法&#xff0c;也称粒子群优化算法或鸟群觅食算法&#xff08;Particle Swarm Optimization&#xff09;&#xff0c; 缩写为 PSO。粒子群…

小白部署springboot+vue网站到服务器踩坑总结【维护更新篇】

目录 前言如何更新前端nginx安装和启动言归正传&#xff0c;更新前端 如何更新后端杀死进程 前言 在上一篇文章里详细介绍了怎样部署一个前后端分离的网站&#xff0c;链接: 链接在此 但是部署完之后&#xff0c;在本地的开发更新后&#xff0c;重新上传到服务器上又遇到了一些…

mybatis(5)参数处理+语句查询

参数处理&#xff0b;语句查询 1、简单单个参数2、Map参数3、实体类参数4、多参数5、Param注解6、语句查询6.1 返回一个实体类对象6.2 返回多个实体类对象 List<>6.3 返回一个Map对象6.4 返回多个Map对象 List<Map>6.5 返回一个大Map6.6 结果映射6.6.1 使用resultM…

[图解]DDD领域驱动设计伪创新-聚合根01

0 00:00:00,070 --> 00:00:06,010 今天我们来说一下领域驱动设计的另外一个伪创新&#xff0c;聚合根 1 00:00:06,870 --> 00:00:09,440 这个我们分为几个部分来讲 2 00:00:12,610 --> 00:00:15,580 前面说过很多遍&#xff0c;伪创新 3 00:00:16,760 --> 00:00…

登陆qq,经常收到qq游戏中心的推送信息,关闭推送信息

手动关闭推送信息的步骤&#xff1a; 1.点开左侧游戏中心 2、在打开界面&#xff0c;点击左下角自己的头像 3、打开设置中心&#xff0c;关闭所有的推送 4、完成关闭&#xff0c;不会推送了

基于springboot实现教学资源库系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现教学资源库系统演示 摘要 社会的进步&#xff0c;教育行业发展迅速&#xff0c;人们对教育越来越重视&#xff0c;在当今网络普及的情况下&#xff0c;教学模式也开始逐渐网络化&#xff0c;各大高校开始网络教学模式。 本文研究的教学资源库系统基于Sprin…

锂电池升降压转换利器:PW2224转换器,实现3.3V高效持续输出

描述&#xff1a; PW2224是一款专为锂电池供电设备设计的高效单电感降压-升压转换器。这款转换器能够在3V至4.2V的锂电池输入电压范围内工作&#xff0c;实现升降压模式自动切换&#xff0c;稳定输出3.3V电压&#xff0c;并持续提供高达1A的负载电流。此外&#xff0c;PW2224的…

Linux C++ 029-STL之queue容器

Linux C 029-STL之queue容器 本节关键字&#xff1a;Linux、C、queue 相关库函数&#xff1a;push、pop、back、front queue基本概念 概念&#xff1a;queue是一种先进先出&#xff08;First In Fisrst Out&#xff0c;FIFO&#xff09;的数据结构&#xff0c;它有两个端口 关…

数据可视化-ECharts Html项目实战(11)

在之前的文章中&#xff0c;我们学习了如何在ECharts中特殊图表的双y图以及自定义形状词云图。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECh…

栈与队列2s总结(不含单调栈)

6.栈与队列 栈与队列理论基础 队列是先进先出&#xff0c;栈是先进后出。 C中stack 是容器么&#xff1f; 我们使用的stack是属于哪个版本的STL&#xff1f; 我们使用的STL中stack是如何实现的&#xff1f; stack 提供迭代器来遍历stack空间么&#xff1f; 栈和队列是STL…

甘特图在生产进度管理中的应用

生产进度管理在生产制造过程中起着至关重要的作用。 它主要关注对生产进程的掌控和安排&#xff0c;确保生产活动能够按照预定的计划和时间顺利进行&#xff0c;以达到按时交付产品的目标。 在生产进度管理中&#xff0c;首先需要制定一个详细且合理的生产计划&#xff0c;明…