测试覆盖率
1、概念
覆盖率测试,也称为测试覆盖率分析,是软件测试中的一个重要概念,用来衡量测试用例执行时对代码的覆盖程度。它提供了一种量化的方法来评估测试集的充分性,即测试是否足够广泛地触及了应用程序的所有部分。覆盖率测试可以应用于不同的抽象层次,从源代码级别的细节到更高层次的功能需求。
2、测试覆盖率的主要类型
代码覆盖率
这是最常用的测试覆盖率形式,通常在单元测试阶段进行计算。它关注的是代码结构的哪些部分被测试执行到了。常见的代码覆盖率指标包括:
- 语句覆盖率(Statement Coverage):检查程序中的每个可执行语句是否至少被执行过一次。
- 判定/分支覆盖率(Decision/Branch Coverage):确保每个判断条件的真假两个分支都被测试到。
- 条件覆盖率(Condition Coverage):每个逻辑条件的可能结果都至少出现一次。
- 路径覆盖率(Path Coverage):确保程序中所有可能的路径都被执行。
语句覆盖
- 含义:语句覆盖要求设计的测试用例能够使得程序中的每一条可执行语句至少被执行一次。例如,对于下面一段简单的代码:
def add_numbers(a, b):result = a + bprint(result)return result
只要有一组测试数据(比如 a = 1,b = 2)能够使得这三行代码(result = a + b、print (result)、return result)都被执行,就达到了语句覆盖。
- 优点:简单直观,容易理解和实现。它能够快速发现未被执行的代码语句,有助于发现一些基本的代码逻辑错误,比如语法错误导致某些语句无法执行等。
- 缺点:语句覆盖不能发现程序中逻辑判断的错误。例如,在一个包含 if - else 语句的程序中,只执行了 if 分支,即使 else 分支有错误,语句覆盖也无法发现。
判定/分支覆盖
- 含义:分支覆盖要求设计的测试用例能够使得程序中的每个判定(如 if 语句、while 语句等条件判断)的所有可能结果(真和假)至少出现一次。例如:
def check_number(n):if n > 0:print("Positive")else:print("Non - positive")
测试用例需要包括 n 大于 0(使得 if 分支执行)和 n 小于等于 0(使得 else 分支执行)两种情况,这样才能达到分支覆盖。
- 优点:相比语句覆盖,分支覆盖能够更好地测试程序中的逻辑判断部分,对于发现条件判断错误有很好的效果,如错误的比较运算符等。
- 缺点:它可能会忽略一些内部的分支嵌套情况,并且对于多条件组合的复杂判定,可能无法完全覆盖所有的条件组合情况。
条件覆盖
- 含义:条件覆盖是指设计测试用例,使得每个判定中的每个条件的所有可能结果至少出现一次。例如,对于判定 “if (a> 0 and b < 10)”,条件覆盖要求测试用例能够使得 “a > 0” 为真和假、“b < 10” 为真和假的情况都出现。
- 优点:能够更细致地测试条件表达式,对于复杂的条件判断,可以发现条件本身的错误。
- 缺点:条件覆盖可能会导致测试用例数量过多,而且不能保证覆盖所有的分支情况。有可能出现满足了条件覆盖,但没有满足分支覆盖的情况。
路径覆盖
- 含义:路径覆盖要求设计的测试用例能够覆盖程序中所有可能的执行路径。对于一个包含多个分支和循环的程序,不同的分支选择和循环次数会形成多种执行路径。例如,一个包含两个嵌套的 if - else 语句的程序,可能会有 4 条不同的执行路径,路径覆盖就需要设计测试用例来覆盖这 4 条路径。
- 优点:是最全面的覆盖标准,能够发现程序中各种复杂的逻辑错误,包括由于不同路径执行导致的错误,如变量在不同路径下初始化错误等。
- 缺点:随着程序复杂度的增加,可能的执行路径数量会呈指数级增长,导致测试用例数量巨大,测试成本非常高。
需求覆盖率
指的是测试用例对需求规格说明书的覆盖情况。这通常与功能测试相关联,目的是确保每个需求都被验证。
缺陷覆盖率
这个较少提及,但理论上它可以指代已知缺陷是否已经被修复或验证。
3、实施步骤
- 制定测试计划:明确测试的目标、范围、时间、资源等,并确定需要进行覆盖率测试的代码模块。
- 选择合适的覆盖率指标:根据需求和项目的特点,选择适当的覆盖率指标,如语句覆盖率、分支覆盖率、条件覆盖率等。
- 编写测试用例:根据选择的覆盖率指标,设计和编写相应的测试用例,覆盖尽可能多的代码路径,包括边界情况和异常情况。
- 执行测试:按照测试计划执行测试用例,记录相应的覆盖率数据。
- 分析覆盖率数据:使用工具可视化显示覆盖率结果,并深入分析未覆盖到的代码部分,识别潜在问题和改进空间。
- 优化测试用例:根据分析结果优化测试用例,增加覆盖率并提高测试效果。
4、测试覆盖率的价值和局限性
价值
高覆盖率意味着更多的代码得到了测试,有助于发现潜在的问题,提高软件质量。同时,它也可以帮助识别未被测试的部分,从而指导开发人员添加新的测试用例。
局限性
高的覆盖率并不保证软件没有错误。例如,如果一个重要的逻辑条件被遗漏或者实现有误,即使覆盖率很高也可能无法检测到问题。此外,追求过高的覆盖率可能会导致高昂的成本,因为需要额外的时间和资源来创建和维护复杂的测试用例。
5、实践建议
建议
- 在实际项目中,应该根据项目的特性和资源限制设定合理的覆盖率目标,而不是盲目追求100%的覆盖率。
- 结合静态代码分析和其他测试技术,以确保更全面的质量保障。
实践
- 使用适当的工具来自动化覆盖率的收集和报告,如JaCoCo对于Java项目。
jacoco
它是一个用于 Java 语言的代码覆盖率工具。可以集成到 Maven 或 Gradle 构建工具中,在测试执行过程中收集覆盖率数据。它能够提供详细的覆盖率报告,包括语句覆盖、分支覆盖等多种覆盖率指标。例如,在一个基于 Maven 的 Java 项目中,通过在 pom.xml 文件中配置 JaCoCo 插件,就可以在测试后生成覆盖率报告,帮助开发人员了解测试的覆盖程度。
报告
JaCoCo 可以实现多种覆盖率的报告,主要包括语句覆盖、分支覆盖。
- 语句覆盖(Instruction/Line Coverage):这是最基础的覆盖率类型,JaCoCo会检查每个可执行语句是否至少被执行过一次。在JaCoCo的报告中,这通常以“指令”或“行”覆盖率的形式展示。
- 分支覆盖(Branch Coverage):jaCoCo也支持判定覆盖或分支覆盖,这意味着它会确保每个判断条件的真假两个分支都被测试到。对于if-else、switch-case等结构,JaCoCo会计算不同路径的比例。
JaCoCo确实提供了条件覆盖率的计算,但它不是默认显示的指标之一。条件覆盖率指的是布尔表达式中的每个子条件都被评估为真和假的情况。为了查看条件覆盖率,你可能需要调整JaCoCo的配置或者使用额外的插件来生成更详细的报告。
至于路径覆盖,JaCoCo并不直接提供这个指标。路径覆盖要求所有可能的控制流路径都得到执行,这对于复杂逻辑来说可能会产生指数级增长的路径数,因此很少被工具直接支持。实现完全的路径覆盖通常是不切实际的,因为这可能导致过多的测试用例,并且一些路径可能是不可达的。
综上所述,JaCoCo默认提供的覆盖率报告主要是语句覆盖率和分支覆盖率。如果你对条件覆盖率感兴趣,可以查阅文档或探索JaCoCo的高级配置选项。对于路径覆盖,你可能需要结合其他分析方法或手动设计测试用例来确保关键路径得到了充分的测试。
实现文档参考
jacoco功能测试-代码覆盖率_jacoco代码覆盖率测试代码-CSDN博客
6、总结
测试覆盖率是一个有用的指标,但它应当与其他度量标准一起使用,以获得关于软件质量和测试效率的完整视图。
相关文章:
测试覆盖率
1、概念 覆盖率测试,也称为测试覆盖率分析,是软件测试中的一个重要概念,用来衡量测试用例执行时对代码的覆盖程度。它提供了一种量化的方法来评估测试集的充分性,即测试是否足够广泛地触及了应用程序的所有部分。覆盖率测试可以应…...
clickhouse query_log 常用查询语句
1、查询一段时间耗时超过3秒的语句。 SELECT* FROMsystem.query_log WHEREquery_duration_ms > 30000AND event_time > 2024-12-31 15:50:00 AND event_time < 2024-12-31 17:50:00 ORDER BYevent_time desc;2、查询一段时间报错的语句 SELECT* FROMsystem.query_lo…...
uni-app 资源引用(绝对路径和相对路径)方法汇总
文章目录 一、前言🍃二、绝对路径和相对路径2.1 绝对路径2.2 相对路径 三、引用组件四、引用js4.1 js 文件引入4.2 NPM支持 五、引用css六、引用json6.1 json文件引入 七、引用静态资源7.1 模板内引入静态资源7.2 css 引入静态资源7.3 js/uts 引入静态资源7.4 静态资…...
Java SpringBoot使用EasyExcel导入导出Excel文件
点击下载《Java SpringBoot使用EasyExcel导入导出Excel文件(源代码)》 在 Java Spring Boot 项目中,导入(读取)和导出(写入) Excel 文件是一项常见的需求。EasyExcel 是阿里巴巴开源的一个用于简化 Java 环境下 Excel…...
CDN SSLTLS以及安全
随着互联网的发展,内容分发网络(CDN)在提升网站访问速度和安全性方面发挥了重要作用。然而,CDN在带来便利的同时也面临一些安全挑战。本文将探讨CDN的安全风险,并深入解析SSL/TLS加密技术及其在CDN中的应用。 CDN的安全…...
安卓11 SysteUI添加按钮以及下拉状态栏的色温调节按钮
最近客户想要做一个台灯产品,需要实现 串口调节台灯功能 ,其中包括 亮度调节 色温调节 开关 三个功能 话不多说,贴代码 diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml old mode 100644 new …...
SpringMVC启动与请求处理流程解析
目录 SpringMVC的基本结构 1.MVC简介 2.基本结构 什么是Handler? 什么是HandlerMapping? 什么是HandlerAdapter? RequestMapping方法参数解析 DispatcherServlet的init()方法 DispatcherServlet的doService()方法 SpringBoot整合SpringMVC …...
RabbitMQ案例
1. 导入依赖 <!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 发送消息 注入RabbitTemplate Autowired RabbitT…...
前路漫漫,曙光在望 !
起始 从20年大一开始写作至今,转眼五年时光已经过去了,最开始在CSDN这个平台写博客也只是因为一次机缘巧合情况下得知写博客可以获取奖赏,所以那个时期开始疯狂在CSDN发文记录自己编程学习过程,但是至今也未从写作中获利一分哈…...
音视频-----RTSP协议 音视频编解码
流媒体协议详解:RTSP、RTP、RTCP、SIP、SDP、RTMP、WebRTC、WebSocket-CSDN博客 上文讲解比较清楚 多媒体编解码基础知识 一文详解WebRTC、RTSP、RTMP、SRT-腾讯云开发者社区-腾讯云 RTP :(Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传…...
SpringMVC的消息转换器
SpringMVC的消息转换器(Message Converter)是Spring框架中用于处理HTTP请求和响应体与Java对象之间转换的组件。它们使得开发人员可以轻松地将HTTP请求的数据映射到方法参数,并将返回的对象转换为HTTP响应。 工作原理 当一个HTTP请求到达Spr…...
计算机网络练习题
学习这么多啦,那就简单写几个选择题巩固一下吧! 1. 在IPv4分组各字段中,以下最适合携带隐藏信息的是(D) A、源IP地址 B、版本 C、TTL D、标识 2. OSI 参考模型中,数据链路层的主要功能是(…...
本地测试文件解析
PostMapping("/test") public void test() throws IOException {Path csvFile Paths.get("D:\\test/27.csv");//虚拟机退出时删除临时文件csvFile.toFile().deleteOnExit();List<String> list Files.readAllLines(csvFile, Charset.forName("…...
websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库
推荐一个C#开发的,实现WebSocket功能的开源项目。 01 项目简介 websocket-sharp提供 WebSocket 客户端和服务器库,基于 C# 开发的,并遵循 WebSocket 协议规范,使得开发人员能够轻松地在 .NET 应用程序中实现 WebSocket 通信。 …...
SwiftUI 撸码常见错误 2 例漫谈
概述 在 SwiftUI 日常撸码过程中,头发尚且还算茂盛的小码农们经常会犯这样那样的错误。虽然犯这些错的原因都很简单,但有时想要快速准确的定位它们却并不容易。 况且这些错误还可能在模拟器和 Xcode 预览(Preview)表现的行为不甚…...
回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测
回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-GRU卷积门控循环单元多输入单输出回归预测 数据准备&#x…...
Nginx常用配置之详解(Detailed Explanation of Common Nginx Configurations)
Nginx常用配置详解(图文全面总结) Nginx Nginx 是一款轻量级的高性能 HTTP、 和反向代理服务器。 Nginx,被广泛用于负载均衡、静态文件服务、和代理.........等。 Nginx,以高并发、低内存占用、和高可用性著称,大部分的大厂以及公司都在使…...
【PyTorch入门】 PyTorch不同优化器的比较
本次分享pytorch中几种常用的优化器,并进行互相比较。 PyTorch 优化器原理及优缺点分析 在 PyTorch 中,torch.optim 提供了多种优化器用于神经网络训练。每种优化器背后有不同的更新规则和机制,旨在适应不同的训练需求。以下是五种常见优化器…...
jest使用__mocks__设置模拟函数不生效 解决方案
模拟文件 // __mocks__/axios.js const axios jest.fn(); axios.get jest.fn(); axios.get.mockResolvedValue({data: {undoList: [get data],}, }); export default axios; 测试文件 jest.mock(axios); import Axios from axios;test(mytest, () > {console.log("…...
聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载
聆听音乐手机版是面向广大音乐爱好者的移动应用程序,用户可以随时随地通过手机享受丰富的音乐资源。它提供了多种魅力功能,让用户在手机上畅享更舒适的音乐体验,每位用户都能享受精彩纷呈的收听体验。此外,软件还支持无损音质音乐…...
VMware去虚拟化
介绍两款用于去除VMware虚拟机虚拟化特征的工具,这些工具可以帮助用户在虚拟机中运行游戏时避免被游戏检测到虚拟机环境,从而防止游戏因检测到虚拟机而闪退。这些工具通过修改虚拟机的硬件信息(如硬盘、声卡、网卡、主板芯片组、显卡、主板信…...
汉王扫描王 2.9.16 |免费无广告的智能扫描软件,支持多种格式导出
汉王扫描王是一款功能全面的智能扫描软件,集成了文字识别、表格提取和文档转换等功能。它支持将文档转换为PDF、Word、Excel等多种格式,非常适合学生、教师、业务人员和财务工作者使用。该软件具备手机扫描仪功能,能够自动抠边、矫正文档&…...
毕设中所学
1、交叉引用 在毕业设计论文Word中交叉引用参考文献_交叉引用如何标注[1~6]-CSDN博客 另:将标号或其他文字改为上标的快捷键是CtrlShift。 图的交叉引用一样,修改引用类型即可。 2、ENVI安装 ENVI5.6 安装教程,新手入门(超详细…...
[微服务]分布式搜索Java客户端
快速入门 使用RestClient客户端进行数据搜索可以分为两步 构建并发起请求 代码解读: 第一步,创建SearchRequest对象,指定索引库名第二步,利用request.source()构建DSL,DSL中可以包含查询、分页、排序、高亮等 query…...
STM32 拓展 低功耗案例3:待机模式 (hal)
配置PA0的两种方式: 第一种 第二种 复制寄存器代码然后对其进行修改 mian.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body…...
在Linux下安装部署Tomcat教程
摘要 Tomcat是由Apache开发的要给Servlet容器,实现了对Servlet 和JSP的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台,安全管理和Tomcat阀等。简单来说,Tomcat是一个由WEB应用程序的托管平台,可以让用户编写的WEB应用程序,别Tomcat所托管,并提供网…...
第5章 串行接口
8251A的基本特性 可用于同步和异步传送。 同步传送:5~8bit/字符,内同步或外同步,自动插入同步字符; 异步传送:5~8bit/字符,接收/发送时钟频率为通信波特率的1,16或64倍; 可产生中止字符、1,1.5,2位停止位。…...
Vue 百度地图 搜索框+点击地图获取坐标
本文通过vueele百度地图,实现点击地图获取坐标,或者搜索框智能联想下拉框,点击获取坐标及地图位置标点。 百度地图通过public文件夹下index.html,script方式 引入全局 代码如下: <template><div><div id"l-…...
Python学习路线
以下是一个Python详细学习路线: 一、入门阶段(第1 - 2个月) 环境搭建与基础语法 安装与配置: 从Python官方网站(Download Python | Python.org)下载适合自己操作系统的Python版本并进行安装。 配置环境变…...
Web Services 简介
Web Services 简介 1. 引言 Web Services 是一种基于网络的软件服务,它允许不同的应用程序在互联网上相互通信和交互。这种技术是基于开放的互联网标准,如HTTP、XML、SOAP和WSDL,使得不同平台和编程语言的应用程序能够轻松地实现互操作性。Web Services 的出现,极大地推动…...
option api compose api
option api & compose api <script setup> import { ref, computed } from vue; // 原始数据 const data ref([ { position: { x: 1, y: 2 } }, { position: { x: 3, y: 4 } }, { position: { x: 5, y: 6 } } ]); // 数据转换函数 const convertData …...
tcpdump的常见方法
详解tcpdump的使用方法:网络数据包捕获与分析 tcpdump是一个功能强大的命令行工具,用于捕获和分析通过网络接口传输的数据包。它广泛应用于网络故障诊断、网络安全监控和协议分析等领域。本文将详细介绍tcpdump的使用方法,包括安装、基本命令…...
【C语言】可移植性陷阱与缺陷(四):字符是有符号整数还是无符号整数
在 C 语言中,字符类型(char)是一个字节大小的整数类型,但它可以被编译器解释为有符号整数或无符号整数,这是一个容易导致可移植性问题的重要因素。这种解释的不确定性可能会在程序的逻辑、比较运算和数据处理等多个方面引发错误。 一、字符类型的默认行为 根据C语言标准…...
[Linux]进程间通信-管道
目录 1. 进程间通信 2.父子进程之间的通信 3.匿名管道 匿名管道的创建 管道读写的情况 管道的5种特性 4.命名管道 指令级 命名管道原理 代码级 读取端 1. 进程间通信 当我们有两个进程操作数据库的时候,一个进程负责写入操作,一个进…...
设置开机自启动的应用
设置开机自启动的应用 step1:按住ShiftctrlEsc step2:找到启动应用 step3:鼠标到启动那里,右键就可以禁用了...
QQ长截屏
QQ长截屏 第一步:CtrlAltA 第二步:点击剪刀之后,再滑动滚轮就可以了。 展示...
38 Opencv HOG特征检测
文章目录 HOGDescriptor 构造函数setSVMDetector 设置支持向量机(SVM)检测器,用于目标检测。compute 用于计算图像区域的HOG描述符。detectMultiScale 多尺度检测目标。示例 HOGDescriptor 构造函数 HOGDescriptor(); HOGDescriptor(const S…...
Segment Anything论文详细翻译【Part2:引言Introduction】
目录 写在前面 Introduction 第1段 第2段 第3段 第4段 第5段 第6段 第7段 第8段 第9段 第10段 第11段 第12段 Figure2 关键特点 图中具体内容 图例说明 写在前面 为啥要写这篇文章?因为找不到一篇写的特别好的【翻译并仔细解释】文章。网上大多千…...
Mac中配置Node.js前端vscode环境(第二期)
核心组件:vscode、谷歌浏览器、Node.js(重点)、git 一、Node.js安装(nvm安装) 点击macos中的终端,保持bash,而不是zsh 若为zsh,则可在终端中使用下面命令变成bash chsh -s /bin/…...
基于COT(Chain-of-Thought Prompt)的教学应用:如何通过思维链提示提升模型推理能力
引言 随着人工智能技术的快速发展,大型语言模型(LLMs)在自然语言处理领域展现出了强大的能力。然而,面对复杂的推理任务时,模型的表现往往不尽如人意,尤其是在需要多步逻辑推导的场景中。为了应对这一挑战…...
Python Notes 1 - introduction with the OpenAI API Development
Official document:https://platform.openai.com/docs/api-reference/chat/create 1. Use APIfox to call APIs 2.Use PyCharm to call APIs 2.1-1 WIN OS.Configure the Enviorment variable #HK代理环境,不需要科学上网(价格便宜、有安全风险&#…...
MySQL图形化界面工具--DataGrip
之前介绍了在命令行进行操作,但是不够直观,本次介绍图形化界面工具–DataGrip。 安装DataGrip 官网链接:官网下载链接 常规的软件安装流程。 参考链接:DataGrip安装 使用DataGrip 添加数据源: 第一次使用最下面会…...
WPF+Prism View与ViewModel绑定
1、开发环境,Win10VS2022.NET8Prism.DryIoc(9.0.537)或Prism.Unity。 2、通过NuGet安装Prism.DryIoc(9.0.537)或Prism.Unity。 2.1、创建ViewModels文件夹用于存放ViewModel文件、创建Views文件夹存放View文件。 将…...
关于Zotero
1、文献数据库: Zotero的安装 Zotero安装使用_zotero只能安装在c盘吗-CSDN博客 2、如何使用zotero插件 我刚下载的时候就结合使用的是下面的这两个博主的分享,感觉暂时是足够的。 Zotero入🚪基础 - 小红书 Green Frog申请easyscholar密钥…...
Luma AI 简单几步生成视频
简单几步生成视频 登录我们的 AceDataPlatform 网站,按照下图所示即可生成高质量的视频,同时,我们也提供了简单易用的 API 方便集成调用,可以查看 Luma API了解详情 技术介绍 我们使用了 Luma 的技术,实现了上面的图…...
从索尼爱立信手机打印短信的简单方法
昨天,我买了一部新手机来代替我的旧索尼爱立信Xperia,但手机上有很多珍贵的短信,是我男朋友发来的,我不想失去它们。然后我尝试打印它们,但我无法从我的索尼爱立信手机中取出它们。您有什么从索尼爱立信手机打印短信的…...
深入浅出梯度下降算法:快速抵达函数最小值的方法
引言 梯度是机器学习和优化领域中不可或缺的概念,它为我们提供了理解和调整多维空间中函数行为的工具。本文将详细介绍梯度的定义、性质,并通过具体的一元和多元函数案例展示如何使用梯度下降算法找到最佳参数。 一、梯度的基础知识 1.1 定义与计算 梯…...
OPC DA激活报错
报错提示: 解决办法: 查看Missing license keys,根据提示破解...
PyTorch到C++再到 CUDA 的调用链(C++ ATen 层) :以torch._amp_update_scale_调用为例
今天在看pytorch源码,遇到的问题,记录一下 。 source:/lib/python3.10/site-packages/torch/amp/grad_scaler.py torch._amp_update_scale_(_scale,_growth_tracker,found_inf_combined,self._growth_factor,self._backoff_factor,self._growth_interva…...
yolov5核查数据标注漏报和误报
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、误报二、漏报三、源码总结 前言 本文主要用于记录数据标注和模型预测之间的漏报和误报思想及其源码 提示:以下是本篇文章正文内容,…...