当前位置:网站首页>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客户端,收集信息
边栏推荐
- Win10 or win11 taskbar, automatically hidden and transparent
- Niuke real problem programming - Day9
- Pat grade a 1103 integer factorizatio
- Unity's ASE realizes cartoon flame
- MySQL bit类型解析
- [understanding of opportunity -40]: direction, rules, choice, effort, fairness, cognition, ability, action, read the five layers of perception of 3GPP 6G white paper
- Ffmpeg --- image processing
- Mathematical modeling -- what is mathematical modeling
- Cocoscreator operates spine for animation fusion
- Unity之ASE实现卡通火焰
猜你喜欢
Win10 or win11 taskbar, automatically hidden and transparent
【数据挖掘】视觉模式挖掘:Hog特征+余弦相似度/k-means聚类
Ctfshow, information collection: Web3
CTFshow,信息搜集:web3
Unity's ASE achieves full screen sand blowing effect
JSON parsing instance (QT including source code)
Niuke real problem programming - Day12
拜拜了,大厂!今天我就要去厂里
CTFshow,信息搜集:web1
【跟着江科大学Stm32】STM32F103C8T6_PWM控制直流电机_代码
随机推荐
Infinite innovation in cloud "vision" | the 2022 Alibaba cloud live summit was officially launched
[make a boat diary] [shapr3d STL format to gcode]
PG basics -- Logical Structure Management (locking mechanism -- table lock)
Unity之ASE实现卡通火焰
一个需求温习到的所有知识,h5的表单被键盘遮挡,事件代理,事件委托
Apache multiple component vulnerability disclosure (cve-2022-32533/cve-2022-33980/cve-2021-37839)
Unity's ASE realizes cartoon flame
Niuke real problem programming - Day9
Ctfshow, information collection: web9
Mathematical modeling -- what is mathematical modeling
Delete a whole page in word
2022年5月互联网医疗领域月度观察
Read PG in data warehouse in one article_ stat
[Yugong series] go teaching course 005 variables in July 2022
Ctfshow, information collection: web14
Spatiotemporal deformable convolution for compressed video quality enhancement (STDF)
Ascend 910 realizes tensorflow1.15 to realize the Minist handwritten digit recognition of lenet network
激光雷達lidar知識點滴
大表delete删数据导致数据库异常解决
【目标检测】YOLOv5跑通VOC2007数据集