首页 > 其他分享 >Jacoco 覆盖率维度说明

Jacoco 覆盖率维度说明

时间:2024-01-25 14:26:40浏览次数:23  
标签:执行 覆盖率 复杂度 JaCoCo 指令 维度 源代码 Jacoco 分支

以下是JaCoCo统计的指标维度

1)指令 - Instructions(C0覆盖率)

JaCoCo计数的最小单位是单个Java字节代码指令。指令覆盖率提供有关已执行或遗漏(executed or missed)的代码量的信息。该度量完全独立于源格式,并且即使在类文件中没有调试信息的情况下也始终可用。

2)分支 - Branches(C1覆盖率)

JaCoCo还为所有if和switch语句计算分支覆盖率。此度量标准统计方法中此类分支的总数,并确定已执行或遗漏的分支的数量。分支覆盖始终可用,即使类文件中没有调试信息也是如此。请注意,在此计数器定义的上下文中,异常处理不视为分支。

如果尚未使用调试信息编译类文件,则可以将决策点映射到源代码行并高亮:

无覆盖范围:该行没有分支执行(红色菱形)
部分覆盖:仅执行了该行中的一部分分支(黄色菱形)
全面覆盖:该行中的所有分支均已执行(绿色菱形)
3)循环复杂度 - Cyclomatic Complexity

JaCoCo 还为每种非抽象方法计算循环复杂度,并汇总了类,包和组的复杂度。根据 McCabe1996 的定义,循环复杂度是可以(线性)组合生成一种方法的所有可能路径的最小路径数。因此,复杂度值可以作为完全覆盖某个软件的单元测试用例数量的指示。即使类文件中没有调试信息,也总是可以计算复杂度数字。

循环复杂度v(G)的形式定义基于方法的控制流图作为有向图的表示:

v(G)= E- N 2

其中,E是边数,N是节点数。 JaCoCo根据分支数(B)和决策点数(D)使用以下等效方程式计算方法的循环复杂度:

v(G)= B - D + 1

根据每个分支的覆盖状态,JaCoCo还可以计算每种方法的覆盖和遗漏复杂度。缺少的复杂性再次表明完全覆盖模块的测试用例的数量。请注意,由于JaCoCo不考虑异常处理,因为分支try / catch块也不会增加复杂性。

4)行

对于已使用调试信息编译的所有类文件,可以计算各个行的覆盖率信息。当已执行至少一个分配给该源代码行的指令时,该源代码行被视为已执行。

由于单行通常会编译为多字节代码指令,因此,源代码高亮显示每行包含源代码的三种不同状态:

无覆盖:该行中没有指令被执行(红色背景)

部分覆盖:仅执行了该行中的一部分指令(黄色背景)

全面覆盖:该行中的所有指令均已执行(绿色背景)

根据源格式,源代码的一行可能会引用多个方法或多个类。因此,不能简单地添加方法的行数以获得包含类的总数。单个源文件中的多个类的行也是如此。 JaCoCo根据覆盖的实际源代码行计算类和源文件的代码行覆盖率。

5)方法

每个非抽象方法都包含至少一条指令。当至少一个指令已被执行时,一种方法被视为已执行。由于JaCoCo在字节码级别上工作,因此构造函数和静态初始化程序也被视为方法。这些方法中的某些方法在Java源代码中可能没有直接的对应关系,例如隐式生成的常量的默认构造函数或初始化器。

6)类

当至少一个类里面的方法已执行时,该类被视为已执行。 请注意,JaCoCo将构造函数以及静态初始化程序视为方法。 由于Java接口类型可能包含静态初始化器,因此此类接口也被视为可执行类。

标签:执行,覆盖率,复杂度,JaCoCo,指令,维度,源代码,Jacoco,分支
From: https://www.cnblogs.com/wag1027/p/17987021

相关文章

  • R语言多维度视角下白领人群健康体质检测数据关系可视化分析
    随着社会经济的发展和人们生活水平的提高,健康问题越来越受到关注。白领阶层作为社会的重要组成部分,其健康状况对于个人和社会都具有重要意义。然而,由于工作和生活方式的改变,白领阶层的健康问题逐渐凸显,如身体成分异常、动脉硬化等。因此,本文旨在帮助客户通过R语言数据分析和可视化......
  • 【测试自动化覆盖率】记录统计自动化的工具testrail 如何实现自动统计覆盖率
        点击编辑来到这个页面 点击自己想要统计的testplan里面的用例选择selectcases   先选择右边的过滤所有Automated 为yes的tag,然后在底下点击确定 在左边呈现的就是出现的  取消不要的用例  ......
  • HFM account维度
    account维度,顾名思义,是记录科目使用的,核算系统使用不同的科目记录不同的业务数据,科目在hfm系统中分资产、负债、收入、费用、权益,flow,balance,lable等,不同的科目具有不同的属性,其一是向上汇总的时候,计算规则,其二是日记账调整时候借方贷方+-不同,TypeParentAccountAccountType......
  • HFM的value维度
    HFM的value维度,是很重要的一个维度,它提供了一个线索,可以清晰的记录数据的录入,调整,折算,合并、比例合并、抵消过程在HFM系统中,value维度总共有14个成员1.<EntityCurrency>:此维度为数据录入维度,接受来自总账科目的数据,币种为本位币,通过数据接口导入或者以线下形式导入2.<Entity......
  • 如何统计接口自动化覆盖率?
    Python可以适用coveragepy来统计代码行覆盖率,使用方式coveragerun-mpytest 运行之后生成新的.coverage文件,这个文件以二进制形式保存着我们覆盖率的数据,如何读取覆盖率数据呢?通过cmdline命令执行coveragereport可以查看覆盖率数据。可通过coveragereport-m查看哪......
  • jacoco代码覆盖率
    JaCoCo是一个开源的代码覆盖率工具,针对的语言为java。它可以嵌入到Ant、Maven中,也可以作为Eclipse插件使用。Jacoco主要通过代码注入(即JavaAgent)方式来实现覆盖率的功能。代码覆盖率一般分为单元测试覆盖率和功能测试覆盖率,对于开发人员,一般比较关注单元测试覆盖率,而对于测试人员......
  • 用jacoco统计JAVA项目测试代码覆盖率
    一、概述Jacoco统计的是全量代码覆盖率。它不仅支持生成单元测试的覆盖率,也支持监控生成接口测试,功能测试的覆盖率。在新一代精准测试技术流的影响中,各大型单位对覆盖率的追求越来越迫切。作为一款开源产品,它主机面向Java语言,能够在字节码层面给出覆盖率,同时也能将字节码关联到......
  • TDengine 2023 年成绩单“曝光”,六大维度彰显卓越成就
    今天,我们进行了2023年重大成就和发展成绩盘点,主要归纳为产品创新、市场发展、开源社区、生态建设、活动布道与奖项荣誉六大维度。在元旦前夕,我们也想把这份“2023年成绩单”分享给所有关注TDengine的朋友们。在今年,最值得一提的大事件就是伴随着六月的网站改版,TDengine正式......
  • 软件测试面试——如何提高测试用例覆盖率?
    如何提高测试用例覆盖率?在项目的初期,我们参与到需求评审中1.覆盖显性需求需求文档或原型图上已经标注清楚的功能一定要全部覆盖,通过思维导图工具进行梳理一般都能保证。2.获取隐含需求隐含需求的获取是一大难点,但需求就像冰山,露在水面的始终只是极少的一部分。3.合理使用合适的......
  • k8s多维度自动弹性伸缩
    转自:http://www.manongjc.com/detail/63-uwchnflbwfuvynp.html时间:2022-10-22本文章向大家介绍k8s多维度自动弹性伸缩,主要内容包括一、背景、1.2k8s自动弹性伸缩功能包括、1.3HPA、1.4VPA、1.5CA、1.6三者使用场景、二、HPA、2.2原生指标、2.4自定义指标、2.5原......