白盒测试之分支-条件覆盖

news2025/3/16 9:11:04

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

实验介绍

分支(判定)覆盖是设计一定量的测试用例使程序中的每个判断语句的真假分支都得到覆盖,但是分支覆盖不能保证判断语句中每个条件的真、假分支都得到覆盖。那么,使用条件覆盖是否可以解决覆盖不全面的问题呢?通过上一小节的学习,我们发现:条件覆盖虽然可以覆盖判断语句中每个条件的真、假分支,但可能没有将所有判断语句的真、假分支覆盖全,仍然做不到对程序的 100% 的覆盖。所以,我们需要把分支(判定)和条件覆盖一起进行综合考虑。

分支-条件覆盖,也叫判定-条件覆盖,是指运行代码进行测试时,程序中所有判断语句中的条件取值为真、取值为假的情况和整个判断语句取真分支、假分支的情况都被覆盖到(即,至少被执行过一次)。分支条件覆盖率的计算方法为:( 测试时覆盖到的条件语句为真、为假情况的总数 + 判断语句为真、为假情况的总数) / (程序中条件语句真、假情况的总数 + 判断语句为真、为假情况的总数)。例如,判断语句 if(a == 0 or b > 2) 中有两个条件 a == 0 和 b > 2 ,如果设计一个测试用例 a = 0 , b = 3 ,可以覆盖条件 a == 0 的真分支和条件 b > 2 的真分支,并可覆盖整个判断语句 if(a == 0 or b > 2) 的真分支,分支-条件覆盖率为 3 / 6 = 50%; 如果再设计一个测试用例 a = 2 , b = 2 ,则可以覆盖条件 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 or b > 2T1
a == 0 or b > 2F1
a > 0 and c > 0T2
a > 0 and c > 0F2

条件:

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

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

根据分支-条件覆盖法的定义,这种方法是将分支覆盖和条件覆盖结合起来,设计一些测试用例,使程序中每个判定语句中的每个条件为真和为假的情况都至少被执行一次,并且每个判断语句本身为真、为假的情况也至少被执行一次。因此,我们可以设计如下表中的测试用例来对程序中的两个判断语句及其四个条件进行覆盖:

测试用例编号输入数据预期结果条件覆盖情况分支覆盖情况
testcase_01a = 0 , b = 5 , c = 0result = 5Y1、Y2、N3、N4T1、F2
testcase_02a = 5 , b = 1 , c = 3result = 15N1、N2、Y3、Y4F1、T2

通过执行以上两个用例可以实现程序的分支-条件 100% 覆盖。那么,是不是实现了分支-条件覆盖就代表程序已经被覆盖全面了呢?下图是该程序标识了执行路径的流程图:

图片描述

从上图中可以看出,这段代码共有四条路径,分别为:路径 1( A - C )、路径 2( A - D )、路径 3 ( B - C )、路径 4( B - D )。通过分析,我们可以知道:测试用例 testcase_01 覆盖的路径是路径 3 ( B - C ),测试用例 testcase_02 覆盖的路径是路径 2( A - D ),路径 1 和路径 4 没有被覆盖到。所以,分支-条件覆盖的覆盖强度仍然不够,如果判断语句中的逻辑运算存在问题可能仍然无法被发现。例如,如果将第一个判断语句 if(a == 0 or b > 2) 中的 or 错写成了 and ,使用这两个测试用例仍然能执行通过,但未检查出程序中的逻辑运算错误。

实验总结

分支-条件覆盖可以使程序中的判断语句以及判断语句中的条件的真、假分支都得到覆盖,但是分支-条件覆盖达到 100% 仍然强度不够,程序中的某些逻辑运算等错误仍然可能不会被发现。

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

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

相关文章

Linux的学习之路:5、粘滞位与vim

摘要 这里主要是把上章没说完的权限的粘滞位说一下,然后就是vim的一些操作。 目录 摘要 一、粘滞位 二、权限总结 三、vim的基本概念 四、vim的基本操作 五、vim正常模式命令集 1、插入模式 2、从插入模式切换为命令模式 3、移动光标 4、删除文字 5、复…

详解UART通信协议以及FPGA实现

文章目录 一、UART概述二、UART协议帧格式2.1 波特率2.2 奇校验ODD2.3 偶校验EVEN 三、UART接收器设计3.1 接收时序图3.2 Verilog代码3.3 仿真文件测试3.4 仿真结果3.5 上版测试 四、UART发送器设计4.1 发送时序图4.2 Verilog代码4.3 仿真文件测试4.4 仿真结果4.5 上板测试 五、…

温湿度传感器(DHT11)以及光照强度传感器(BH1750)的使用

前言 对于一些单片机类的环境检测或者智能家居小项目中,温湿度传感器(DHT11)以及光照强度传感器(BH1750)往往是必不可少的两个外设,下面我们来剖析这两个外设的原理,以及使用。 1. 温湿度传感…

仿真服务器介绍及应用

仿真服务器是一种高性能的计算设备,专门用于运行复杂的仿真软件和处理大量的计算任务。 仿真服务器通常具备以下特点: 1. 高性能硬件配置:为了满足仿真软件对计算能力的要求,仿真服务器通常配备高性能的CPU、大量的内存以及高速的…

Ollama教程——使用langchain:ollama与langchain的强强联合

相关文章: Ollama教程——入门:开启本地大型语言模型开发之旅 Ollama教程——模型:如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——使用langchain:ollama与…

【Windows】SecureCRT v9.2.3永久使用教程亲测可用

​ 软件介绍 SecureCRT 是一款常用的 SSH(安全外壳协议)和 Telnet 客户端软件,主要用于远程服务器管理和网络设备配置。它具有以下主要功能: 1.安全连接:SecureCRT 提供了强大的加密算法,保障用户与服务…

线性表概念及顺序表的实现

文章目录 前言一、线性表1.定义2.特点3.一般线性表的抽象数据类型定义 二、线性表的顺序存储(顺序表)1.基本概念2.数组实现顺序表3.顺序表中基本操作的具体实现4.顺序表总结 总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学…

计算机虚拟机服务器中了mallox勒索病毒怎么办Mallox勒索病毒解密流程工具

在当今社会,人们的工作生活离不开网络,尤其企业离不开网络办公,网络为企业提供了极大便利,大大提升了企业的生产效率与办公水平,但网络是一把双刃剑,在为企业提供便利的同时也为企业的数据带来严重威胁。近…

第10章 物理安全要求

10.1 站点与设施设计的安全原则 假如没有对物理环境的控制,任何管理的、技术的或逻辑的访问控制技术都无法提供足够的安全性。 如果怀有恶意的人员获取了对设施及设备的物理访问权,那么他们几乎可以为所欲为,包括肆意破坏或窃取、更改数据。…

管理和维护索引

本文接上一篇创建、更改、删除索引继续讨论如何管理和维护SinoDB数据库的B树索引。 1. 索引的好处 ① 基于索引的排序 一列或多列的索引可用于按序取回数据。使用索引读取数据可以让数据库服务器按照请求的顺序直接返回数据,免去了排序的操作。 ② 强制保证唯一性…

使用matlab GUI设计离线问卷

很久没有更新了。没有更新的日子,也在努力学习,坚定了继续搞科研的决心,至死不渝。希望我们每个人都能有远大的理想,并为之付出不懈的奋斗。 目录 一、为什么 二、怎么设计 1. 问题和答案的显示 2. 答案的记录和保存 三、代…

V神演讲展望Web3发展并认为可引入人工智能

前言 2024 香港 Web3 嘉年华期间,以太坊联合创始人 Vitalik Buterin 发表主旨演讲《Reaching the Limits of Protocol Design》。以下是演讲内容: 区块链与ZK-SNARKS 我们用来构建协议的技术类型在过去 10 年里发生了很大变化。那么,当 2…

德国高速主轴SycoTec代理 高精度高转速主轴一览

速科德电机科技,作为德国高速主轴品牌SycoTec代理以及亚太服务中心,一直致力于将最先进、最可靠的高速电主轴技术带给广大机械加工企业。在现代精密机械制造业中,高速电主轴的应用已经变得不可或缺,而SycoTec高速电主轴以其卓越的…

【七 (1)FineBI FCP模拟试卷-股票收盘价分析】

目录 文章导航一、字段解释二、需求三、操作步骤1、添加计算字段(每月最后一天的收盘价)2、绘制折线图 文章导航 【一 简明数据分析进阶路径介绍(文章导航)】 一、字段解释 Company Name:公司名称 Date:…

UE5 C++ 创建3DWidgete 血条 再造成伤害

一.创建 二.UI里声明变量 创建类 public:UPROPERTY(EditAnywhere,BlueprintReadWrite,Category "MyWidget")float CurrentHealth 100.0f;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category "MyWidget"…

【嵌入式】嵌入式开发中常见的面试题(持续更新中)

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

Linux--进程间的通信--进程池

进程间的通信–匿名管道 进程池的概念 进程池是一种将多个进程组织起来以执行特定任务的机制。它由多个预先创建好的资源进程和一个管理进程组成。这些资源进程被管理进程负责分配和调度,用于处理任务。 当有新的任务提交时,管理进程会从进程池中取出一…

主线程捕获子线程异常

正常情况下使用多线程出现异常时,都是按照单个任务去处理异常,在线程间不需要通信的情况下,任务之间互不影响,主线程也不必知道子线程是否发成异常。 那么只需要处理子线程异常即可 Task.Run(() > {try{throw new Exception(&…

苍穹外卖学习记录(二)

本节,主要是学习业务逻辑,我们以菜品管理为例: 在实现这部分前,我们要完成Mybatis的配置,即指定映射的mapper.xml文件路径以及对应的实体类,这部分配置是在application.yml文件中实现的。 mybatis:#mapper…

计算机网络(四)网络层

网络层 基本概念 网络互联: 将两个以上的计算机网络,通过一定的办法,用一种或多种通信处理设备(即中间设备)相互连接起来,以构成更大的网络系统。中间设备又称中间系统或中继系统 中继系统分为4种: 物理层中继系统…