白盒测试-条件覆盖

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

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

​ 判断语句 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));
    }
}

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis开源协议变更了?我们还能用吗?

Redis是一款广泛使用的开源键值存储数据库,其开源协议的变更引起了社区和行业的广泛关注。根据搜索结果,Redis Labs宣布Redis将采用双重源代码可用许可证(RSALv2)和服务器端公共许可证(SSPLv1),…

AI自我推理和规划,OpenAI和Meta今年要打开“潘多拉盒子”了 油价100美元几乎已经成了华尔街的共识

OpenAI和Meta今年要打开“潘多拉盒子”了 OpenAI首席运营官Brad Lightcap表示,“我们将开始看到AI能够以更复杂的方式执行更复杂的任务。” OpenAI和Meta正准备发布新的AI模型,他们称这些模型将能够进行自我推理和规划,而这是实现机器“超…

Jmeter —— 自动录制脚本

1、Jmeter配置 1.1新增一个线程组 1.2Jmeter中添加HTTP代理 1.3配置HTTP代理服务器 修改端口 修改Target Cintroller(目标控制器) 修改Grouping(分组) 编辑录制中的包含和排除 在“URL Patterns to include包含模式”中填入.*(123456).*用以过滤请求地址中不包含123456的请求…

设计模式-接口隔离原则

基本介绍 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上先看一张图: 类A通过接口Interface1 依赖类B,类C通过接口Interface1 依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类…

LangChain入门:17.使用 ConversationChain实现对话记忆功能

在默认情况下,无论是 LLM 还是代理都是无状态的,每次模型的调用都是独立于其他交互的。也就是说,我们每次通过 API 开始和大语言模型展开一次新的对话,它都不知道你其实昨天或者前天曾经和它聊过天了。 你肯定会说,不可…

3.2.k8s搭建-kubeadm

目录 一、虚拟机准备 二、所有节点环境准备 1.所有节点做hosts解析 2.所有节点重新命名 3.所有节点安装docker 4.所有节点为docker做linux内核转发 5.所有节点配置docker 6.所有节点关闭swap分区 7.所有节点验证网卡硬件编号是否冲突 8.所有节点配置允许iptables桥接…

【HTML】简单制作一个分形动画

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建一个文本文档,其中HTML的文件名改为[index.html]&a…

【原创教程】Smart200通过Modbus RTU实现V90位置控制的方法

1 绪论 1.1 本文的目的 S7-200Smart 可通过标准的 Modbus 功能块发送伺服驱动器的控制指令及读写驱动器的参数。本文详细叙述了 S7-200 SMART PLC 通过 Modbus RTU 通信连接 SINAMICS V90 实现内部位置的 MDI 功能。(MDI(Manual Data Input)称为设定值直接给定运行方式。…

岛屿个数c++

参考文章 岛屿个数1岛屿个数2 题目 输入样例: 2 5 5 01111 11001 10101 10001 11111 5 6 111111 100001 010101 100001 111111输出样例: 1 3样例解释 对于第一组数据,包含两个岛屿,下面用不同的数字进行了区分: 0…

计算机网络-TCP基础、三次挥手、四次握手过程

TCP基础 定义:TCP是面向连接的、可靠的、基于字节流的传输层通信协议。这意味着在发送数据之前,TCP需要建立连接,并且它能确保数据的可靠传输。此外,TCP将数据视为无结构的连续字节流。面向连接:TCP只能一对一进行连接…

Harmony与Android项目结构对比

主要文件对应 Android文件HarmonyOS文件清单文件AndroidManifest.xmlmodule.json5Activity/Fragmententryability下的ts文件XML布局pages下的ets文件resresourcesModule下的build.gradleModule下的build-profile.json5gradlehvigor根目录下的build.gradle根目录下的build-profi…

动态内存管理详解

一.为什么要存在动态内存分配: 下图是不同类型数据在内存中的分配: 上述的开辟空间的⽅式有两个特点: • 空间开辟⼤⼩是固定的。 • 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整 但是对…

DeepStream做对象模糊的几种方法

有时候,我们需要对视频的敏感信息做模糊处理,比如模糊人脸,车牌。 有时候,也需要对整帧做模糊,或者遮挡。比如这个例子。 下面介绍几种模糊的办法。 1. 通过nvosd deepstream-test1是DeepStream最简单的一个例子&…

基于SpringBoot的“垃圾分类网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“垃圾分类网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统功能界面图 用户登录、用户注…

基于java+springboot+vue实现的人事管理系统(文末源码+Lw)23-242

摘 要 使用旧方法对人事管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在人事管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的人事管理…

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测 目录 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索…

SQL 注入之 Windows/Docker 环境 SQLi-labs 靶场搭建!

在安全测试领域,SQL注入是一种常见的攻击方式,通过应用程序的输入执行恶意SQL查询,从而绕过认证和授权,可以窃取、篡改或破坏数据库中的数据。作为安全测试学习者,如果你要练习SQL注入,在未授权情况下直接去…

(2022级)成都工业学院数据库原理及应用实验一:CASE工具概念数据模型建模

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 PowerDesigner 16.1 实验要求 某医院一个门诊部排班管理子系统涉及如下信息: 若干科室&a…

传输大咖22|如何利用ProtoBuf实现高效的数据传输?

在今日信息技术日新月异的时代,数据传输的速度与安全性无疑成为了软件开发中的重中之重。无论是微服务架构下的服务间交流,还是客户端与服务器间的数据互动,寻求一种既高效又稳妥的数据传输方式已成为共识。尽管传统的数据格式,如…

论文复现 混淆矩阵

概念 参考视频: 使用pytorch和tensorflow计算分类模型的混淆矩阵_哔哩哔哩_bilibili 混淆矩阵是评判模型结果的一种指标,属于模型评估的一部分,常用于评判分类器模型的优劣。 准确率:所有预测正确的验证集样本个数/所有的验证集…