test coverate-03-测试覆盖率 EMMA 一款免费的Java代码覆盖工具 emma 和 jacoco 对比

本文主要是介绍test coverate-03-测试覆盖率 EMMA 一款免费的Java代码覆盖工具 emma 和 jacoco 对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

拓展阅读

test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍

test 系统学习-05-test jacoco 测试覆盖率与 idea 插件

test 系统学习-06-test jacoco

EMMA:一款免费的Java代码覆盖工具

免费的代码覆盖:一项基本自由?

直到最近,Java开发领域一直受到一个荒谬的不一致困扰:Java开发者拥有优秀的免费集成开发环境、免费编译器、免费测试框架,但却不得不依赖那些收费昂贵的代码覆盖工具。

作为一名Java专业人士,我希望能够在工作中进行大型商业项目或在家中进行小型娱乐项目时,都能使用相同的免费覆盖工具。我创建了EMMA就是为了成为那个工具。

EMMA是一个用于测量和报告Java代码覆盖的开源工具包。

EMMA通过追求一种独特的特性组合来区别于其他工具:支持大规模企业软件开发,同时保持个别开发者的工作快速而迭代。

现在,你团队中的每个开发者都可以免费获取代码覆盖,而且获取速度很快!

很有可能,你来到这里时已经知道覆盖是怎么回事,实际上,你可能正在想EMMA提供了什么,以及为什么值得一试。

请浏览本站的其余部分,了解更多信息。

EMMA功能一览:

  • EMMA可以为覆盖而仪器化类,可以是离线(在加载之前)或即时(使用仪器化的应用程序类加载器)。
  • 支持的覆盖类型:类、方法、行、基本块。EMMA可以检测单个源代码行是否仅部分覆盖。
  • 覆盖统计数据在方法、类、包和“所有类”级别进行聚合。
  • 输出报告类型:纯文本、HTML、XML。所有报告类型都支持下钻,可以由用户控制详细深度。HTML报告支持源代码链接。
  • 输出报告可以突出显示覆盖水平低于用户提供的阈值的项目。
  • 可以合并在不同仪器化或测试运行中获取的覆盖数据。

v2.1中的新功能:

从版本2.1.5320开始,可以远程转储或重置覆盖数据而无需JVM退出。

  • EMMA不需要访问源代码,并且随着输入类中可用的调试信息减少,它会优雅地降级。
  • EMMA可以仪器化单个 .class 文件或整个 .jars(如果需要,可以原地)。还支持高效的覆盖子集过滤。
  • Makefile和ANT构建集成在平等的基础上得到支持。
  • EMMA速度相当快:添加仪器化的运行时开销很小(5-20%),字节码仪器本身非常快(主要受文件I/O速度限制)。内存开销每个Java类几百字节。
  • EMMA是100%纯Java,没有外部库依赖,并在任何Java 2 JVM(甚至是1.2.x)中运行。

更多关于EMMA功能的信息可以在FAQ中找到。

EMMA:快速入门

本页面展示了使用EMMA进行一些命令行运行的简易方法(如果你更愿意使用特别准备的示例或开始将现有的ANT构建转换为EMMA,那么你应该阅读用户指南)。

我将使用命令行的原因有几个:一是为了避免现在花时间设置ANT,二是因为EMMA命令行工具可以在现有的ANT构建的基础上使用,而无需更改它(例如,你可以使用单个命令为构建的输出进行仪器化)。

这里唯一的要求是要有emma.jar,你可以从完整版本或较小的 emma-<release>-lib.zip 下载中获取。

(所有EMMA工具都实现为类似bean的对象。命令行工具和ANT任务只是这些对象的前端驱动程序,因此你在命令行上可以做的一切都可以在ANT中完成,反之亦然。)

即时仪器化
这意味着使用EMMA仪器化应用程序运行器来运行现有应用程序。你可以尝试使用JDK附带的SwingSet2演示:

>java -cp emma.jar emmarun -jar .../jdk1.4.2/demo/jfc/SwingSet2/SwingSet2.jar

(正如你所看到的,通过EMMA运行演示基本上是在JVM和应用程序之间插入emmarun:这再也没有更简单的了!)稍微试玩一下Swing演示,然后关闭它。你将看到EMMA将一个纯文本覆盖报告(coverage.txt)写入当前目录。纯文本报告主要用于快速非正式测试。默认情况下,它仅显示总体和包级别的统计信息,大部分都是不言自明的:

总体覆盖概要:

[class, %]       [method, %]      [block, %]          [line, %]            [name]
98% (121/123)!   64% (312/489)!   81% (15500/19172)   77% (2633.6/3441)!   所有类

总体统计摘要:

总包数:1
总类数:123
总方法数:489
总可执行文件数:31
总可执行行数:3441

按包进行的覆盖率细分:

[class, %]       [method, %]      [block, %]          [line, %]           [name]
98% (121/123)!   64% (312/489)!   81% (15500/19172)   77% (2633.6/3441)!  默认包

对于每种覆盖类型,都显示了总体覆盖百分比,以及实际的百分比比例:后者对于知道哪些区域需要更多测试工作很重要(一个半覆盖的包含500个类的包需要比一个半覆盖的包含10个类的包更多的关注)。

某些列中的奇怪感叹号表示不符合默认覆盖标准的项目(例如,行覆盖率为80%,方法覆盖率为70%)。

HTML报告

嗯,在纯文本文件中尝试显示分层和列式数据只能有限地进行。

接下来,尝试HTML报告(从coverage/index.html开始转储):

>java -cp emma.jar emmarun -r html -jar .../jdk1.4.2/demo/jfc/SwingSet2/SwingSet2.jar

现在,这种类型的报告要容易得多(在这里查看一些样本)。如果通过添加 -sp …/jdk1.4.2/demo/jfc/SwingSet2/src 选项链接到演示源代码,你将在HTML中实际上看到嵌入在HTML中的源代码中的个别行覆盖。

此外,不必在应用程序退出时生成报告:可以将覆盖数据转储到二进制文件中,以供以后生成报告使用。我们可以给emmarun提供很多其他选项,但现在让我们尝试一些完全不同的东西。

离线仪器化
像我们上面所做的那样即时仪器化应用程序并非总是可能的。例如,J2EE容器可能会执行自己的独特类加载,这不容易插入。好吧,在这种情况下,EMMA的离线仪器就是解决方案。

为了尝试它,制作SwingSet2.jar的本地副本,并指示EMMA在原地对其进行仪器化:

>cp .../jdk1.4.2/demo/jfc/SwingSet2/SwingSet2.jar .
>java -cp emma.jar emma instr -m overwrite -cp SwingSet2.jar

EMMA将某些元数据信息写入coverage.em,而此时的jar将包含为覆盖而仪器化的类。(请注意,你可以使用现有构建中的自己的类和jar执行相同的操作,而不是Swing演示。)因为它们现在依赖于某些EMMA运行时类,所以我们需要将emma.jar添加到应用程序执行类路径:

>java -cp SwingSet2.jar:emma.jar SwingSet2

同样,稍微试玩一下Swing演示,然后关闭它。你将看到EMMA将一些运行时覆盖数据写入coverage.ec(两种类型的数据也可以放在同一个文件中,但这不是默认行为)。现在,要生成覆盖报告,只需在报告生成工具中将元数据与运行时覆盖数据结合起来:

>java -cp emma.jar emma report -r html -in coverage.em,coverage.ec

传递

emma 和 jacoco 对比,二者在设计等方面有哪些差异?

Emma和JaCoCo都是用于Java代码覆盖率分析的工具,它们在设计和功能上有一些差异。

以下是Emma和JaCoCo之间的一些主要差异:

设计和实现差异:

  1. 插桩方式:

    • Emma: 使用基于源代码的插桩方式。它在编译阶段生成插桩后的源代码,然后进行编译。这样的插桩方式可能会导致一些源代码变化,因为它会在源代码中添加一些注释和其他标记。
    • JaCoCo: 使用基于字节码的插桩方式。它在字节码层面插入探针代码,避免了对源代码的修改。这种方式通常更为灵活,不会引入源代码变更。
  2. 支持的覆盖率度量:

    • Emma: 提供基本的行覆盖率和决策覆盖率。决策覆盖率关注的是代码中的条件分支覆盖。
    • JaCoCo: 提供行覆盖率、分支覆盖率、方法覆盖率、类覆盖率等多种度量。它支持更全面的代码覆盖率度量指标。

功能差异:

  1. 报告生成:

    • Emma: 生成报告的功能相对较简单,主要包括文本报告和HTML报告。报告的可视化程度相对较低。
    • JaCoCo: 提供丰富的报告生成功能,支持HTML、XML、CSV等多种格式的报告。HTML报告通常具有更高的可视化效果,能够直观地展示代码覆盖情况。
  2. 工具集成:

    • Emma: 集成较为简单,支持与Ant、Maven等构建工具和JUnit测试框架的集成。
    • JaCoCo: 在构建工具中的集成更为广泛,支持Maven、Gradle、Ant等,并且可以与不同的测试框架集成。
  3. 支持状态:

    • Emma: 在过去曾经是比较流行的工具,但自2016年以来就没有维护更新,因此一些团队可能更倾向于使用更新的工具。
    • JaCoCo: 是一个较为活跃维护的工具,持续地更新和添加新功能,因此更适合在当前项目中使用。

性能差异:

  1. 性能开销:

    • Emma: 由于使用源代码插桩,可能引入更大的性能开销,尤其是对于大型项目。它的性能相对较低。
    • JaCoCo: 使用字节码插桩,通常具有较低的性能开销,对于大型项目也有更好的性能表现。
  2. 运行时性能:

    • Emma: 在应用程序运行时可能会有一定的性能影响,特别是对于大规模的应用。
    • JaCoCo: 优化了运行时性能,对应用程序的影响相对较小。

这篇关于test coverate-03-测试覆盖率 EMMA 一款免费的Java代码覆盖工具 emma 和 jacoco 对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573376

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推