jacoco覆盖率报告的解读
覆盖率级别
-
覆盖率首先是整个工程的目录的覆盖率。
工程级
-
点进去以后是包级别的覆盖率
包级别的覆盖率
-
点进去是类级别的覆盖率
类级别覆盖率
-
点进去是该类中方法级别的覆盖率
方法级别的覆盖率
覆盖率数值

圈覆盖为圈复杂度。
- Missed Instructions(指令覆盖):
代码覆盖率,绿色表示运行了的,红色表示没有。 cov. 为覆盖率具体的值。

比如上图中:
第一行令覆盖率为0%,全部为红色,标识一行都没有被覆盖。
第三行覆盖率为27%,部分红色,部分绿色,且绿色的占比为27%。
-
Missed Branches(分支覆盖):
分支覆盖率,逻辑分支的覆盖率。 -
Missed Cxty:
cxty ----- > complexity 圈复杂度 -
行覆盖
所有类文件均携带debug信息编译,则每行的覆盖率可计算。当至少一个指令被指定到源码行且已执行时,该源码行被认为已执行。
**全部未覆盖:该行中指令均未执行,红色标志
**部分覆盖:该行中部分指令执行,黄色标志
**全覆盖:该行中所有指令已执行,绿色标志 -
方法覆盖
每个非抽象方法至少包含一个指令。当至少一个指令被执行,该方法被认为已执行。由于Jacoco基于字节码级别的,构造函数和静态初始化方法也被当作方法计算。其中有些方法,可能无法直接对应到源码中,比如默认构造器或常量的初始化命令。
- 类覆盖
当类中至少有一个方法已执行,则该类被认为已执行。Jacoco中认为构造函数和静态初始化方法也当作被执行过的方法。Java接口类型若包含静态初始化方法,这种接口也被认为是可执行的类。
是覆盖率的一个指标,用的不多,具体请参见
https://www.eclemma.org/jacoco/trunk/doc/counters.html
- Missed Lines && Missed Methods && Missed Classes:
覆盖的行数和方法数以及类
总结:
-
指令复杂度和分支复杂度,不一定哪个高,哪个低。要具体情况,具体分析。
指令复杂度和分支复杂度对比
指令覆盖比分支覆盖低的方法,该方法的可执行语句都在各种逻辑判断中,所以覆盖率较低。

指令覆盖比分支覆盖高的方法,该方法的前几行都是必然会执行的赋值语句,后面的几行都是条件语句,且判断逻辑很复杂,所以是黄色的,也就是部分覆盖了。

-
线上覆盖率的合理值应该是多少?
首先,线上覆盖率的值为多少合理,需要根据应用的特性来进行评估。比如有的应用就是一个转发的逻辑,类似网关这样的应用,它的覆盖率很高,因为没有复杂的业务逻辑,所有的代码能跑到的可能性很高有的能达到80%。
而有的工程,因为比较老旧,加上系统迁移,很多功能被迁移走,导致覆盖率比较低,有的低至30%。 -
覆盖率不仅可以在测试环境衡量测试的覆盖度(手工执行case,自动化执行case),还可以收集线上的覆盖率,对一些覆盖率低的工程,作为代码删减优化的参考和衡量标准。
网友评论