当前位置:网站首页>jacoco代码覆盖率
jacoco代码覆盖率
2022-07-07 13:17:00 【傲娇的喵酱】
原文地址:
jacoco 增量方案使用说明书_dray_的博客-CSDN博客_jacoco 增量
一、Jacoco简介:
JaCoCo是一个开源的Java代码覆盖率工具。
JaCoCo 只是统计了全量代码的覆盖率,在代码迭代过程中,比如修改了bug,又重新发布了一版代码。JaCoCo 的统计就被清空了,需要从头执行触发代码覆盖。
这种场景,我们只需要测试增量代码就可以了,这个时候需要对jacoco进行二次开发。
jacoco 统计代码覆盖率,一般与自动化相结合,比如jacoco与接口自动化相结合。当时我们也可以手工执行case,来统计代码覆盖率。
可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。
很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。
二、代码覆盖率介绍:
覆盖率是用来衡量测试代码对功能代码的测试情况。通过统计测试代码中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。
代码覆盖率=代码的覆盖程度,一种度量方式。
覆盖率简单说:跑了一个测试用例,项目代码中的那些模块、文件、类、方法 执行了。
其中行覆盖率是最细颗粒度,其他覆盖率都可从行覆盖率情况统计算出来。
2.1 行覆盖
当至少一个指令被指定源码行执行时,该源码行被认为已执行。
通俗的说就是,测试行为,触发了这某一行代码,则这一行代码就被覆盖了。
2.2 分支覆盖
if 和switch 语句算作分支覆盖率,这个指标计算一个方法中的分支总数,并决定已执行和未执行的分支的数量。
全部未覆盖:所有分支均未执行,红色标志
部分覆盖:部分分支被执行,黄色标志
全覆盖:所有分支均已执行,绿色标志。
2.3 方法覆盖
当方法中至少有一个指令被执行,该方法被认为已执行,包括构造函数和静态初始化方法。
2.4 代码覆盖率意义
分析未覆盖部分的代码,反推测试设计是否充分,没有覆盖到的代码是否存在测试设计盲点。
2.5 覆盖率的误区
若代码如下:
if (i>100)
j = 10/i // 没有除0错误
else
j = 10/(i+2) // i==-2,除0错误
覆盖2个分支,只需要设计i==101 和 i==1,但是对于找到i==-2这个bug点时没有作用的。
所以:
1、不要简单的追求高的代码覆盖率
2、高覆盖率测试用例不等于测试用例有效
3、没覆盖的分支相当于该分支上的任何错误肯定都找不到
三、jacoco原理
jacoco使用插桩的方式来记录覆盖率数据,是通过一个probe探针来注入。
插桩模式有2种:
3.1 on-the-fly模式
7、Jacoco增量覆盖
7.1 增量覆盖
增量覆盖:两次提交之间有哪些代码或者分支没有被覆盖。
目的:检测同一个测试用例在修改前后代码上的行覆盖情况
假设两次提交代码变更如下:
if(x>100)
- print(1)
+ print(2)
else
- print(3)
+ print(4)
每行代码有3种状态:+、-、不变
修改前后,跑同一个测试用例,每行有4种状态:修改前覆盖/修改前未覆盖,修改后覆盖/修改后未覆盖。
所以增量覆盖总共有3x4=12种情况,比较重要的有:新增代码没有覆盖,新增代码覆盖了,不变的代码修改前覆盖,修改后未覆盖等等。
7.2 增量应用
jacoco 二开: https://gitee.com/Dray/jacoco.git
增量代码获取: https://gitee.com/Dray/dode-diff.git
使用方法:
1、jacoco客户端,收集信息
边栏推荐
- [server data recovery] data recovery case of raid failure of a Dell server
- word中删除一整页
- Classification of regression tests
- [deep learning] image hyperspectral experiment: srcnn/fsrcnn
- 居然从408改考自命题!211华北电力大学(北京)
- Ctfshow, information collection: web8
- Apache multiple component vulnerability disclosure (cve-2022-32533/cve-2022-33980/cve-2021-37839)
- Compile advanced notes
- CPU与chiplet技术杂谈
- buffer overflow protection
猜你喜欢
暑期安全很重要!应急安全教育走进幼儿园
Unity之ASE实现卡通火焰
CTFshow,信息搜集:web4
[Data Mining] Visual Pattern Mining: Hog Feature + cosinus Similarity / K - means Clustering
CTFshow,信息搜集:web6
Ctfshow, information collection: web1
知否|两大风控最重要指标与客群好坏的关系分析
Do you know the relationship between the most important indicators of two strong wind control and the quality of the customer base
Guangzhou Development Zone enables geographical indication products to help rural revitalization
Deformable convolutional dense network for enhancing compressed video quality
随机推荐
Promoted to P8 successfully in the first half of the year, and bought a villa!
What is the process of ⼀ objects from loading into JVM to being cleared by GC?
Compile advanced notes
摘抄的只言片语
What are PV and UV? pv、uv
MySQL installation configuration 2021 in Windows Environment
With 8 modules and 40 thinking models, you can break the shackles of thinking and meet the thinking needs of different stages and scenes of your work. Collect it quickly and learn it slowly
Lidar Knowledge Drop
CTFshow,信息搜集:web13
Ctfshow, information collection: web12
Change win10 Screensaver
MongoD管理数据库的方法介绍
【深度学习】图像超分实验:SRCNN/FSRCNN
JSON parsing instance (QT including source code)
【深度学习】语义分割实验:Unet网络/MSRC2数据集
Mathematical modeling -- what is mathematical modeling
MySQL bit类型解析
leetcode:648. Word replacement [dictionary tree board + find the shortest matching prefix among several prefixes]
Xiaomi's path of chip self-development
Cocoscreator resource encryption and decryption