jacoco代码覆盖率管理

news2024/9/21 3:15:52

jacoco-maven-plugin 中,覆盖率阈值可以设置为行覆盖率(Line Coverage)和分支覆盖率(Branch Coverage),甚至可以设置类、方法、指令等不同类型的覆盖率。可以通过 check 目标对每个类型的覆盖率进行精细化控制。

行覆盖率 vs. 分支覆盖率

  1. 行覆盖率 (Line Coverage):表示测试执行中,代码的每一行是否被执行。
  2. 分支覆盖率 (Branch Coverage):表示控制流语句(如 if-elseswitch)的所有分支是否被执行,包括 true 和 false 分支。

设置覆盖率阈值

jacoco-maven-plugin 提供了灵活的配置方式,可以针对不同类型的覆盖率(如行、分支、类等)设置阈值,并在代码未达到设定的覆盖率时使构建失败。

详细配置示例

下面是一个配置示例,包含行覆盖率和分支覆盖率的设置。

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.10</version>
            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <!-- 定义规则:检测所有的包 -->
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <!-- 设置行覆盖率的最低阈值 -->
                                    <limit>
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.80</minimum> <!-- 行覆盖率最低要求 80% -->
                                    </limit>
                                    <!-- 设置分支覆盖率的最低阈值 -->
                                    <limit>
                                        <counter>BRANCH</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.75</minimum> <!-- 分支覆盖率最低要求 75% -->
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

解释:

    • LINE:代表行覆盖率,即代码每一行的覆盖情况。
    • BRANCH:代表分支覆盖率,即条件语句的分支覆盖情况。
    • COVEREDRATIO:表示覆盖率的比例(即已覆盖/总量)。
    • 用于设定最低覆盖率的阈值,如果覆盖率低于这个值,则构建失败。

其他覆盖率类型

除了行覆盖率和分支覆盖率,jacoco-maven-plugin 还允许针对其他指标设置阈值,例如:

  • INSTRUCTION:指令覆盖率(字节码指令)。
  • COMPLEXITY:代码复杂度覆盖率。
  • METHOD:方法覆盖率。
  • CLASS:类覆盖率。

示例:

<limits>
    <limit>
        <counter>METHOD</counter>
        <value>COVEREDRATIO</value>
        <minimum>0.85</minimum> <!-- 方法覆盖率最低要求 85% -->
    </limit>
    <limit>
        <counter>CLASS</counter>
        <value>COVEREDRATIO</value>
        <minimum>0.90</minimum> <!-- 类覆盖率最低要求 90% -->
    </limit>
</limits>

完整配置示例(行、分支、类、方法覆盖率)

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.10</version>
            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>check</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <!-- 规则1:检测所有的包 -->
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <!-- 行覆盖率最低要求 80% -->
                                    <limit>
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.80</minimum>
                                    </limit>
                                    <!-- 分支覆盖率最低要求 75% -->
                                    <limit>
                                        <counter>BRANCH</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.75</minimum>
                                    </limit>
                                    <!-- 方法覆盖率最低要求 85% -->
                                    <limit>
                                        <counter>METHOD</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.85</minimum>
                                    </limit>
                                    <!-- 类覆盖率最低要求 90% -->
                                    <limit>
                                        <counter>CLASS</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.90</minimum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

使用技巧和最佳实践

  1. 动态调整阈值:根据项目的不同阶段和实际需要,可以动态调整不同的覆盖率阈值。例如,在早期项目中可能会设定较低的覆盖率要求(如 50%),随着项目的成熟再提高到 80% 或更高。

  2. 逐步提升覆盖率:如果项目初期覆盖率不高,可以逐步提升覆盖率标准,使用工具如 SonarQube 或 CI 系统来监控覆盖率的提升过程。

  3. 排除不必要的类:对于一些生成的代码或第三方库,可以通过 excludes 将它们排除在覆盖率统计之外,确保报告准确反映实际开发代码的覆盖情况。


总结

  1. 设置覆盖率阈值jacoco-maven-plugin 提供了灵活的覆盖率阈值配置,支持行覆盖率和分支覆盖率的设置。通过 check 目标可以根据项目需求定义最低标准,确保代码质量。
  2. 详细配置:行覆盖率、分支覆盖率、方法覆盖率、类覆盖率等指标都可以单独设定阈值,灵活控制构建流程中的覆盖率标准。
  3. 实践应用:通过逐步提升覆盖率阈值,结合 CI/CD 工具进行自动化检测,可以有效保证代码的质量和可测试性。

通过这些配置和实践建议,你可以轻松配置和使用 Jacoco 进行全面的代码覆盖率管理。

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

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

相关文章

arm开发板通信

c语言复习 查询Ubuntu版本&#xff08;18.04&#xff09;和内核&#xff08;5.4&#xff09; 查询使用软件的版本号 arm开发板通信- 直播视频-- 项目第二天下午 2024-09-20 linux和windows下操作开发板前提是开发板中已经导入系统 以下是具体操作 linux下开发板的操作 li…

Java项目实战II基于Java+Spring Boot+MySQL的读书笔记共享平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在信息爆炸…

无人机黑飞打击技术详解

随着无人机技术的普及&#xff0c;无人机“黑飞”&#xff08;未经授权或违反规定的飞行&#xff09;现象日益严重&#xff0c;对公共安全、隐私保护及重要设施安全构成了严重威胁。为有效应对这一挑战&#xff0c;各国政府和安全机构纷纷研发并部署了一系列无人机黑飞打击技术…

龙头名企HR数字创新:超8成参调企业上线电子签

近日&#xff0c;法大大与人力资源智享会&#xff08;以下简称“智享会”&#xff09;联合发布了《第七届人力资源共享服务中心研究报告》&#xff08;点击阅读及下载&#xff1a;最新&#xff01;《第七届人力资源共享服务中心研究报告》重磅来袭&#xff09;&#xff0c;该报…

反转字符串中的单词--力扣151

反转字符串中的单词 题目思路代码 题目 思路 题目的难点在于首先要清除多余的空格&#xff0c;并且单词之间要留一个空格&#xff0c;首单词前和末尾单词后不能有多余空格。我们使用双指针去除所有的空格&#xff0c;然后在处理完一个单词后手动加一个单词。具体思路是当快指针…

李沐 过拟合和欠拟合【动手学深度学习v2】

模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维

GBDT算法原理及其公式推导过程

GBDT&#xff08;Gradient Boosting Decision Tree&#xff0c;梯度提升决策树&#xff09;是一种集成学习方法&#xff0c;主要用于回归和分类任务。它的基本思想是通过迭代地构建一系列弱学习器&#xff08;通常是决策树&#xff09;&#xff0c;并将这些弱学习器组合成一个强…

C++11 新的类功能

前言 上一期我们对右值引用和完美转发作了介绍&#xff0c;本期我们接着上期继续介绍C11的新的类功能&#xff01; 目录 前言 • 新的类功能 默认成员函数 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认成员函数的关键字delete 继承和多态中的final…

流动网红打卡车!苏州金龙海格双层巴士带你体验别样津门津韵

近日&#xff0c;由文化和旅游部主办&#xff0c;天津市文化和旅游局等单位承办的2024中国文化旅游产业博览会在天津拉开帷幕&#xff0c;展会期间&#xff0c;来自全国各地的文旅产品精彩亮相。而在天津交通集团展台&#xff0c;来自苏州金龙海格客车制造的网红双层观光“音乐…

redis安装(以6.0.13为例)

redis-6.0.13安装 1.创建安装目录2. 上传安装包3. 替换repo文件4.依赖安装5. redis安装5.1 解压5.2 编译5.3 安装5.4 配置 6. 常用命令 1.创建安装目录 mkdir -p /apps/scripts/ cd /apps/scripts/2. 上传安装包 将redis-6.0.13.tar.gz 上传至/apps/scripts/目录下 下载链接…

一站式语音识别服务:中文、方言、多语言全覆盖

在当今全球化与多元化的社会背景下&#xff0c;语音识别技术的需求日益增长。智匠MindCraft凭借其先进的语音识别功能&#xff0c;不仅覆盖了标准的中文识别&#xff0c;还扩展到了多种方言和多国语言的识别&#xff0c;为用户提供了一站式的语音转文本解决方案。 技术亮点 1…

c# 视觉识别图片文字 二维码

1.二维码识别 插件 ZXing.Net using System; using System.Drawing; // 如果你使用的是System.Drawing.Common using ZXing;class Program {static void Main(){string imagePath "path_to_your_qr_code_image.png";var barcodeBitmap (Bitmap)Image.FromFile(im…

9.20哈好

函数体 #include"SeqList.h"void SeqList::init(int n) {this->ptrnew data[n];this->len0;this->sizen; }bool SeqList::empty() {return this->len0; }bool SeqList::full() {return this->sizethis->len; }void SeqList::push_back(data e) {i…

Zookeeper安装使用教程

# 安装 官网下载安装包 #配置文件 端口默认8080&#xff0c;可能需要更改一下 #启动 cd /Users/lisongsong/software/apache-zookeeper-3.7.2-bin/bin ./zkServer.sh start #查看运行状态 ./zkServer.sh status #停止 ./zkServer.sh stop #启动客户端 ./zkCli.sh ls /

Linux:Bash中的文件描述符

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的所有进程&#xff0c;都拥有自己的文件描述符(File Descriptor, FD)&#xff0c;它是操作系统在管理进程和文件时的一种抽象概念。每个文件描述符由一个非负整…

在渗入测试和峰谷测试中选Flat还是Ramp-up?

前面的一篇文章中我们为大家介绍了在基准测试和规划测试中选Flat还是Ramp-up&#xff0c;具体应该怎么配置&#xff0c;在这篇文章里&#xff0c;我们继续为大家介绍在渗入测试和峰谷测试中选Flat还是Ramp-up&#xff1f; 渗入测试&#xff08;疲劳强度测试&#xff09; 使用固…

vue-ts-demo

npm i -g vue/cli PS D:\kwai\vue3\project> vue create vue3-te-demo element-plus 一个 Vue 3 UI 框架 | Element Plus https://element-plus.org/zh-CN/guide/installation.html 安装&#xff1a; npm install element-plus --save 完整引入使用&#xff1a; 使用&…

AI大模型微调实战训练营,文旅对话 知识库 大模型实战(模型参数微调)

一、引言 随着人工智能技术的飞速发展&#xff0c;AI大模型在各个领域的应用日益广泛。其中&#xff0c;大模型微调作为一种强大的工具&#xff0c;能根据特定任务定制化模型性能&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;文旅对话和知识库构建…

eclipse使用 笔记02

创建一个项目&#xff1a; 【File-->New-->Dynamic Web Project】 进入页面&#xff1a; Project name为项目命名 Target runtime&#xff1a;选择自己所对应的版本 finish创建成功&#xff1a; 创建成功后的删除操作&#xff1a; 创建前端界面&#xff1a; 【注意&a…

二叉树的层序遍历 II

题目链接 二叉树的层序遍历 II 题目描述 注意点 树中节点数目在范围 [0, 2000] 内-1000 < Node.val < 1000 解答思路 根据队列先进先出的特点层序遍历所有的节点&#xff08;从左到右&#xff09;&#xff0c;又因为需要自底向上的输出层序遍历的结果&#xff0c;所…