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: 优化了运行时性能,对应用程序的影响相对较小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

h2-use the recovery tool [90030-200]

use the recovery tool [90030-200] 背景 使用flowable-ui版本为6.7.1使用默认的H2数据库&#xff0c;在使用此版本之前使用的是7.0.0版本&#xff0c;也就是使用两个版本&#xff0c;启动后一个版本时启动不了&#xff0c;控制台报错&#xff1a;如下 org.h2.jdbc.JdbcSQLN…

超好玩的烧脑当当狸智能五子棋,锻炼孩子的超级大脑

数码时代&#xff0c;儿童沉迷于电子设备和网络游戏已经成为了常态 作为家长&#xff0c;我们都希望能够找到一种&#xff0c;既有趣又益于孩子成长发展的娱乐方式 ✨「当当狸智能五子棋」&#xff0c;儿童智力成长的好帮手学玩一体锻炼儿童思维 不仅是一种新型休闲娱乐的方…

支付系统的层级结构与设计原则

支付系统是现代商业活动中的关键组件&#xff0c;它不仅需要处理各种复杂的金融交易&#xff0c;还要确保交易的安全性和便捷性。为了满足这些需求&#xff0c;支付系统通常采用分层的架构设计&#xff0c;每一层都有其特定的功能和责任。本文将探讨构建一个有效的支付系统时需…

Linux第4步_安装VMwareTools

安装Ubuntu操作系统后&#xff0c;就可以安装VMwareTools了&#xff0c;目的是实现“电脑和虚拟机之间互相复制粘贴文件”。 1、双击桌面图标“VMware Workstation Pro”&#xff0c;然后点击下图中的“开机”&#xff0c;打开虚拟机电源。 2、双击下图中的用户名“zgq” 3、…

【算法】数据结构题单练习(寒假正在更新中)

1. 最小距离和&#xff08;树的重心&#xff09; 题目&#xff1a; http://oj.daimayuan.top/course/7/problem/529 #include<bits/stdc.h> using namespace std;typedef long long ll;const int N 2e55; const int inf 0x3f3f3f3f;int n; int pre[N]; int dist[N]; …

ARCGIS PRO SDK Geoprocessing

调用原型&#xff1a;Dim gpResult AS IGPResult await Geoprocessing.ExecuteToolAsync(调用工具名称, GPValue数组, environment, null, null, executeFlags) 一、调用工具名称&#xff1a;地理处理工具名称。如面转线&#xff1a;management.PolygonToLine&#xff0c;而非…

吉林大学19、21级计算机学院《计算机网络》期末真题试题

一、21级&#xff08;考后回忆&#xff09; 一、不定项选择&#xff08;一共10个选择题&#xff0c;一个两分&#xff0c;选全得满分&#xff09; 不定项&#xff1a;可以选择1~4个 考点有&#xff1a; ①协议、服务 ②码分多路复用通过接受码片序列&#xff0c;求哪个站点发送…

H5 - - - - - 获取图片exif相关信息

1. EXIF是什么 【可交换图像文件格式】&#xff1a;&#xff08;英语&#xff1a;Exchangeable image file format&#xff0c;官方简称Exif&#xff09;,是专门为数码相机的照片设定的&#xff0c;可以记录数码照片的属性信息和拍摄数据。 2. EXIF 相关标识 { ApertureValu…

代码随想录算法训练营第二十四天 | 回溯算法

理论基础 代码随想录原文 什么是回溯法 回溯也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯法的效率 虽然回溯法很难&#xff0c;不好理解&#xff0c;但是回溯法并不是什么高效的算法。因为回溯的本…

python CSV库的基本使用

一、简介 CSV文件和TXT文件一样&#xff0c;一种纯文本文件。CSV翻译过来就是 “逗号分割的值” 的首字母缩写。 逗号分割的值意思就是用逗号把不同的值进行分割。 1.CSV文件文件的第一行相当于Excel表格的列名。 2.CSV文件可以通过记事本打开&#xff0c;也可以通过Excel软件…

了解 nextTick

一. 什么是 nextTick 简单的说&#xff0c;nextTick 方法是在 Vue.js 中常见的一种异步更新 DOM 的机制。它的原理是利用 JavaScript 的事件循环机制以及浏览器的渲染流程来实现延迟执行 DOM 更新操作。 它的出现主要是为了解决 Vue 的异步更新导致的 DOM 更新后的操作问题。…

SCA面面观 | 企业该如何选择组件检测工具?

一般来说&#xff0c;一个软件应用程序可以被分解成若干部分&#xff0c;为软件程序解耦&#xff0c;以减少整个应用程序的复杂性&#xff0c;这些部分就是软件组件。以一种标准化的方式相互作用&#xff0c;使得组件可以像机器的“零部件”一样被换入或换出&#xff0c;因组件…

dplayer播放hls格式视频并自动开始播放

监控视频流为hls格式&#xff0c;需要打开或刷新页面自动开始播放&#xff0c;需要安装dplayer和hls.js插件&#xff0c;插件直接npm装就行&#xff0c;上代码 import DPlayer from dplayer import Hls from hls.js //jquery是用来注册点击事件&#xff0c;实现自动开始播放 i…

一个不容忽视的警告WARNING:pip install --upgrade pip

2024年第一篇文章记录下一个很重要的知识点&#xff1a;pip提示升级时&#xff0c;尽量升级。 pip升级的好处&#xff1a; 1、安装速度加快&#xff0c;寻找依赖包的速度更快。 2、解决部分包安装失败&#xff0c;安装不上&#xff0c;不兼容的问题。 所以&#xff0c;如果…

【OpenCV】在MacOS上使用OpenCvSharp

前言 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;它具有C&#xff0c;Python&#xff0c;Java和MATLAB接口&#xff0c;并支持Windows&#xff0c;Linux&#xff0c;Android和Mac OS。OpenCvSharp是一个Op…

Windows异常-解决118及WiFi图标消失问题

注册表修复&#xff1a; 注册表修复 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog] "ServiceDll"hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\ 00,74,00,25,00,5c,00,53,00,79,00,…

ubuntu 22 virt-manger(kvm)安装winxp

安装 、启动 virt-manager sudo apt install virt-manager sudo systemctl start libvirtdsudo virt-manager安装windowsXP 安装过程截图如下 要点1 启用 “包括寿终正寝的操作系统” win_xp.iso 安装过程 &#xff1a; 从winXp.iso启动, 执行完自己重启从硬盘重启&#xff0c…

C 练习实例13 - 水仙花数

题目&#xff1a;打印出所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数 本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#xff0b;5的三次方&#xff0b;3的三次方…

太牛了!微信批量自动加好友你还不知道吗?

你还在一个一个地输入号码或微信号&#xff0c;再手动进行搜索添加好友吗&#xff1f;这样不仅费时费力&#xff0c;还可能会出现错误或是漏加的情况。 今天给大家分享一个支持多个微信号自动批量添加好友的宝藏工具&#xff0c;解放你的双手&#xff0c;帮你节省大量的时间和…

【React系列】非父子组件通信—Context.Provider共享数据、events库事件总线通信

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. Context使用 1.1. Context应用场景 非父子组件数据的共享&#xff1a; 在开发中&#xff0c;比较常见的数据传…