当前位置:网站首页>jacoco代码覆盖率

jacoco代码覆盖率

2022-07-07 13:17:00 傲娇的喵酱

原文地址:

jacoco 增量方案使用说明书_dray_的博客-CSDN博客_jacoco 增量

jacoco: 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客户端,收集信息


 

原网站

版权声明
本文为[傲娇的喵酱]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_39208536/article/details/125653263