使用 EclEmma 进行覆盖测试

eclipse覆盖率插件——EclEmma的安装和使用 在上一节中我们介绍了如何使用junit进行单元测试,单元测试通常以覆盖率作为完成标准,因此,测试时,我们有必要了解当前测试用例对被测代码的覆盖情况,人工分析覆盖情况费时耗力,并不可取,本节介绍eclipse插件——EclEmma 覆盖率插件,通过它可以实时了解测试用例对被测程序的覆盖情况。 一.EclEmma 插件的安装 1.点击菜单 help -> eclipse marketplace; 2.在弹出窗口上输入搜索条件“ecl”后,点击回车键 3.在结果中找到 EclEm... 阅读详情
 

使用 EclEmma 进行覆盖测试

source: http://www.ibm.com/developerworks/cn/java/j-lo-eclemma/index.html

甘 志 ( ganzhi@cn.ibm.com), 软件工程师, IBM 中国软件开发中心实验室
甘志,IBM 中国软件实验室(CSDL BJ)China Emerging Technology Institute 成员,主要研究方向为 UML、Model driven development 和 SOA。他在上海交通大学计算机系获得网络安全方向博士学位,期间发表了多篇论文和技术书籍。你可以通过 ganzhi@cn.ibm.com 联系他。

简介: 覆盖测试是衡量测试质量的一个重要指标。在对一个软件产品进行了单元测试、组装测试、集成测试以及接受测试等繁多的测试之后,我们能不能就此对软件的质量产生一定的信心呢?这就需要我们对测试的质量进行考察。如果测试仅覆盖了代码的一小部分,那么不管我们写了多少测试用例,我们也不能相信软件质量是有保证的。相反,如果测试覆盖到了软件的绝大部分代码,我们就能对软件的质量有一个合理的信心。本文将介绍一个优秀的开源软件测试工具 EclEmma,它能够对由 Java 语言编写的程序进行覆盖测试,从而对程序运行的结果生成详尽的覆盖测试报告。

<!--

-->

发布日期: 2007 年 5 月 10 日
级别: 初级
访问情况 : 5782 次浏览
评论: 


介绍

现在 IT 开发人员比以往任何时候都更加关注测试的重要性,没有经过良好测试的代码更容易出问题。在极限编程中,测试驱动开发已经被证明是一种有效提高软件质量的方法。在测试驱动的开发方式中,软件工程师在编写功能代码之前首先编写测试代码,这样能从最开始保证程序代码的正确性,并且能够在程序的每次演进时进行自动的回归测试。测试对于软件产品的成败起着至关重要的作用,在极限编程领域,甚至有人提议任何未经测试的代码都应该自动从发布的产品中删除。作者并不确信这个观点是正确的,但是测试本身的质量确实是一个需要高度关注的问题。测试的覆盖率是测试质量的一个重要指标,我们需要工具来帮助我们进行对软件测试覆盖的考察。

EclEmma 就是这样一个能帮助开发人员考察测试覆盖率的优秀的 Eclipse 开源插件。EclEmma 在覆盖测试领域是如此的优秀,以致于它在过去不久的 2006 年成为了 Eclipse Community Awards Winners 决赛选手。虽然最后 Eclipse Checkstyle Plugin 取得了 Best Open Source Eclipse-based Developer tool 的称号,但我们也可以由此看到 EclEmma 对开发人员的帮助是巨大的(Eclipse Community Award 的具体信息可以参阅 参考资源)。

提到 EclEmma 首先就要说到著名的 Java 覆盖测试工具 Emma。Emma 是一个在 SourceForge 上进行的开源项目(参阅 参考资源)。从某种程度上说,EclEmma 可以看作是 Emma 的一个图形界面。在本文的参考文献中,可以看到专门讲述使用 Emma 的技术文章。

Emma 的作者开发 Emma 之初,程序员已经有了各种各样优秀的开源 Java 开发工具。举例来说,我们有优秀的集成开发环境 Eclipse,有开源的 JDK,有单元测试工具 JUnit,有 Ant 这样的项目管理工具,我们还可以用 CVS 或 SubVersion 来进行源代码版本的维护。当时看来,也许唯一缺少的就是一个开源的覆盖测试工具了。Emma 就是为了填补这项空白而生的。现在的情况已经和 Emma 诞生的时候不一样的。时至今日,我们已经有了不少的覆盖测试工具。例如 Coverlipse 是一个基于 Eclipse 的覆盖测试插件。其他还有 Cobertura,Quilt 和 JCoverage 等。但是 Emma 具有一些非常优秀的特性使得它更适合被广泛的使用。和 Coverlipse 等工具比起来,Emma 是开源的,同时它对应用程序执行速度的影响非常小。

EclEmma 的出现弥补了 Emma 用户一个大的遗憾 ---- 缺乏图形界面以及对集成开发环境的支持。将 Eclipse 和 Emma 这两个在各自领域最为优秀的工具结合起来,这就是 EclEmma 为我们提供的。接下来,我们就要在后续章节中和读者朋友一起看看 EclEmma 为开发人员提供了什么。


安装 EclEmma 插件

安装 EclEmma 插件的过程和大部分 Eclipse 插件相同,我们既可以通过 Eclipse 标准的 Update 机制来远程安装 EclEmma 插件(图 1),也可以从站点(参阅 参考资源)下载 zip 文件并解压到 eclipse 所在的目录中。


图 1 添加 EclEmma 更新站点
图 1  添加 EclEmma 更新站点

不管采用何种方式来安装 EclEmma,安装完成并重新启动 Eclipse 之后,工具栏上应该出现一个新的按钮:


图 2 新增的覆盖测试按钮
图 2  新增的覆盖测试按钮

使用 EclEmma 测试 Java 程序

为了实验 EclEmma 的特性,我们首先在 Eclipse 的 Workspace 中建立一个名称为 test.emma 的新 Java 项目。接下来,我们在其中建立一个 HelloWorld 类,其代码如下所示:


清单 1 用于测试 EclEmma 的代码
                
package test.emma;

public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int rand = (int) (Math.random()*100);
		if(rand%2==0){
			System.out.println( "Hello, world! 0");
		}
		else
			System.out.println("Hello, world! 1");
		
		int result = rand%2==0? rand+rand:rand*rand; 
		System.out.println(result);
	}
}

接下来,我们通过 EclEmma 运行 HelloWorld.main() 函数。


图 3 对 Java 应用程序进行覆盖测试
图 3  对 Java 应用程序进行覆盖测试

执行完毕之后,我们正在编辑 HelloWorld.java 的窗口将会变成如下所示:


图 4 进行覆盖测试的结果
图 4  进行覆盖测试的结果

在 Java 编辑器中,EclEmma 用不同的色彩标示了源代码的测试情况。其中,绿色的行表示该行代码被完整的执行,红色部分表示该行代码根本没有被执行,而黄色的行表明该行代码部分被执行。黄色的行通常出现在单行代码包含分支的情况,例如 图 4 中的 16 行就显示为黄色。由于程序中有一个随机确定的分支,因此读者的窗口可能与这里稍有不同(11 行或者 14 行中有且只有一个红色的行)。

除了在源代码编辑窗口直接进行着色之外,EclEmma 还提供了一个单独的视图来统计程序的覆盖测试率。


图 5 察看程序的覆盖测试率
图 5  察看程序的覆盖测试率

EclEmma 提供的 Coverage 视图能够分层的显示代码的覆盖测试率,图 5 中的信息表明我们对 HelloWorld 的一次运行覆盖了大约 68.6% 的代码。

想在一次运行中覆盖所有的代码通常比较困难,如果能把多次测试的覆盖数据综合起来进行察看,那么我们就能更方便的掌握多次测试的测试效果。EclEmma 提供了这样的功能。现在,让我们重复数次对 HelloWorld 的覆盖测试。我们注意到 Coverage 视图总是显示最新完成的一次覆盖测试。事实上,EclEmma 为我们保存了所有的测试结果。接下来,我们将通过 Coverage 视图的工具按钮来结合多次覆盖测试的结果。


图 6 用于结合多次覆盖测试结果的工具栏按钮
图 6  用于结合多次覆盖测试结果的工具栏按钮

当我们多次运行 Coverage 之后,我们可以单击 图 6 所示工具栏按钮。之后,一个对话框将被弹出以供用户选择需要合并的覆盖测试。


图 7 选择需要合并的覆盖测试结果
图 7  选择需要合并的覆盖测试结果

在合并完成之后,我们可以观察到 Java 编辑器和 Coverage 视图中都显示了合并之后的结果:


图 8 察看合并后的覆盖测试结果
图 8  察看合并后的覆盖测试结果

图 8 中,我们可以看到,通过多次运行覆盖测试,最终我们的代码达到了 91.4% 的测试覆盖率。有趣的是,图中第三行代码被标记为红色,而此行代码实际上是不可执行的。奥妙在于,我们没有生成任何 HelloWorld 类的实例,因此缺省构造函数没有被调用,而 EclEmma 将这个特殊代码的覆盖状态标记在类声明的第一行。


EclEmma 的高级特性

如果 EclEmma 只能测试 Java Application 的测试覆盖率,那么它相对命令行版本的 Emma 来说,提供的增强就不多了。相反,EclEmma 提供了很多与 Eclipse 紧密结合的功能。它不仅能测试 Java Application,还能计算 JUnit 单元测试,对 Eclipse 插件测试的覆盖率。从 图 9 中我们可以看到 EclEmma 目前支持四种类型的程序。


图 9 EclEmma 的配置页面
图 9  EclEmma 的配置页面

为了了解 EclEmma 是如何获得覆盖测试数据的,我们需要先对 Emma 有初步的了解。通常代码覆盖测试工具都需要对被执行的代码进行修改。而 Emma 提供了两种方式来完成这件事。

  1. 预插入模式:对程序进行测量之前,需要采用 Emma 提供的工具对 class 文件或者 jar 文件进行修改。修改完成之后的代码可以立刻被执行。覆盖测试的结果将会被存放到指定的文件中。
  2. 即时插入模式:即时插入模式不需要事先对代码进行修改。相反,对代码的修改是通过一个 Emma 定制的 Class loader(类载入器)进行的。这种方式的优点很明显,我们不需要对 class 或者 jar 文件进行任何修改。缺点是我们为了获得测试的结果,需要用 Emma 提供的命令 emmarun 来执行 Java 应用程序。

使用即时插入模式的优点很明显:class 文件和 jar 文件不会被修改。而预插入模式的应用范围更为广泛,对于某些需要嵌入到框架中运行的代码来说(例如 EJB),我们只能使用预插入模式。EclEmma 仅仅使用了 Emma 的预插入模式来工作,不过 EclEmma 缺省会在临时目录中创建 class 文件和 jar 文件的副本来进行修改,因此在 workspace 中 class 和 jar 文件仍然保持原样。虽然听上去很好,但是由于需要修改 classpath 来使用修改过的 class 和 jar 文件,对于不能修改 classpath 的应用(例如 Eclipse RCP 和 JUnit Plugin Test)来说,我们还是只能选择修改 workspace 中的 class 文件和 jar 文件。对于 Java Application 和 JUnit 类型的覆盖测试,我们可以在配置对话框中选中“In-place instrumentation”项来指定直接修改 Workspace 中的 .class 文件和 .jar 文件。


结论

本文通过一个简单的例子介绍了使用 EclEmma 进行覆盖测试的基本过程。EclEmma 允许软件工程师方便的考察测试的覆盖率,并能将测试结果以直观、简洁的方式展现给开发人员。


参考资料

学习

获得产品和技术

  • 下载 EclEmma 安装文件。

  • 访问 Emma 的官方站点。

讨论

关于作者

甘志,IBM 中国软件实验室(CSDL BJ)China Emerging Technology Institute 成员,主要研究方向为 UML、Model driven development 和 SOA。他在上海交通大学计算机系获得网络安全方向博士学位,期间发表了多篇论文和技术书籍。你可以通过 ganzhi@cn.ibm.com 联系他。

Eclipse使用EclEmma插件生成junit覆盖率测试报告 Eclipse安装EclEmma插件 1 下载EclEmma插件 2 解压到本地文件夹 重点内容 3打开Eclipse,按如下流程操作:Help -&gt; intsall New Software -&gt; Add -&gt; Local -&gt; 选择EclEmma解压的目标目录 -&gt; 确定 -&gt; OK -&gt; 选中EclEmma -&gt; Finish... 阅读详情

相关推荐

Eclipse使用EclEmma看单元测试的代码覆盖率

  在开发过程中,我们应该养成编写本地单元测试用例的好习惯,甚至做到测试驱动开发。EclEmma是Eclipse的一个插件,是一款测试用例的代码覆盖率统计工具,能明确到哪一行在测试过程中被调用到了。这里不仅仅是单元测试,部署到测试环境的集成测试也可以统计。下面来看下怎么使用EclEmma。   首先说下安装。作为最方便莫过于直接在Eclipse中点击菜单栏的Help -> Eclipse ...

wuxun1997的专栏 1251

eclemma覆盖率_如何集成和使用EclEmma插件来获得良好的Junit覆盖率

eclemma覆盖率 你好朋友, 如果编写好的代码很重要,那么编写覆盖所有业务逻辑的优良Junit测试用例也同样重要。通过编写覆盖业务逻辑的Junit测试用例,我们实际上确保代码的每种方法都能正常工作符合预期,因此减少了在软件开发的后期阶段中获取错误的机会。在本教程中,我们将看到如何使用EclEmma插件来检查Java代码的代码覆盖率,从而可以确保通过Junit测试用例具有良好的覆盖率。 ...

cunhui1209的博客 384

从CAD到Web:高效转换STEP/IGES模型为GLB格式的实践指南

本文详细介绍了如何将工业设计中的STEP/IGES模型高效转换为Web友好的GLB格式。通过PythonOCC和gltf-pipeline等工具链,实现从CAD到Web的无缝转换,大幅提升模型加载速度和展示效果。文章包含实战案例、优化技巧和常见问题解决方案,帮助开发者快速掌握3D模型转换技术。

weixin_29072299的博客 509

适用于Eclipse的代码覆盖率工具:EclEmma

1.EclEmma介绍 EclEmma工具最初来源于Emma工具,顾名思义,是适用于Eclipse平台的代码覆盖率工具,2.0之后的版本是基于JaCoCo的库。使用方便,输出结果直观明了,具有以下几个特点: 1)快速的研发/测试周期 直接执行测试代码后,就可以看到源代码的覆盖率。开发人员可以在设计过程中对代码进行单元测试 2)提供多种覆盖率结果分析 覆盖率结果会给出直观的覆盖分支数及总分...

popcorn1568的博客 1913

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

python爬取淘宝数据

python爬取淘宝数据淘宝评论 淘宝评论 打开淘宝,选择打开需要爬取的商品的评论。在谷歌浏览器选择开发者工具,选择network,找到list_detail_rate.htm?itemId=624466733121,点击headers、previews,可以看见相应的评论数据。 爬取一页屏评论代码如下 import re import requests headers = { 'Referer': '在headers中', 'User-Agent': '在

qq_36333776的博客 5798

单元测试覆盖率统计工具Eclemma

一、Eclemma是什么EclEmma是一个开源的软件测试工具,测试单元测试覆盖率二、Eclemma的安装1、工具栏菜单Help--&gt;Eclipse Marketplace--&gt;Search--&gt;Find搜索Eclemma--&gt;选择合适的版本--&gt;Installed2、Eclipse Marketplace--&gt;Installed--&gt;可以看到已经装的插件...

鹏鹏的博客 7383

《民机适航入门指南:从法规学习到项目实践的全面解析》

适航(Airworthiness)是指航空器、其发动机、螺旋桨和其他部件在规定条件下,能够安全飞行并满足有关航空法规规定的条件。简而言之,适航代表了航空器在任何时候都能安全运营的状态。适航在民用航空领域尤为关键,因为飞机必须经过严格的适航认证才能投入商用。这些认证的目标是确保飞机能够在广泛的运行条件下保持飞行安全,从而保护乘客、机组和地面人员的生命财产安全。适航法规覆盖了飞机的整个生命周期,包括设计、制造、测试、运营、维护和报废。

qq_41854911的博客 993

[转载]使用 EclEmma 进行覆盖测试

使用 EclEmma 进行覆盖测试2007 年 5 月 10 日覆盖测试是衡量测试质量的一个重要指标。在对一个软件产品进行了单元测试、组 装测试、集成测试以及接受测试等繁多的测试之后,我们能不能就此对软件的质量产生一定的信...

congji3817的博客 297

(王道计算机组成原理笔记)第一章计算机系统概述-第二节:计算机系统层次结构 1(计算机系统组成、计算机硬件)

文章目录一:冯诺依曼体系结构(1)存储程序计算机(2)层次结构二:计算机硬件概述(1)存储器A:存储元、存储单元、存储体、存储字和存储字长B:MAR 一:冯诺依曼体系结构 在冯诺依曼体系结构中,计算机的硬件主要有**存储器,运算器,控制器,输入和输出设备(也叫做I/O设备)**组成。 (1)存储程序计算机 冯诺依曼体系结构也叫做存储程序计算机,计算器和计算机的唯一区别就是计算器是不能编程的,只能做电路板中设定好的固定的运算。 这也就意味着计算器本质就是一个不能编程的计算机,其在硬件层面已经将逻辑写死,如果

快乐江湖的博客 1万+

ximalaya 新xm-sign逆向思路

本文主要介绍目标网站新xm-sign值的逆向思路。仅代表个人理解,如有其他建议可在评论区沟通。声明仅仅记录一下自己的学习方法,不作为其他参考、更不作为商业用途。如有侵犯请联系本人删除。

weixin_66580433的博客 2017

使用 EclEmma 进行覆盖测试——java

 介绍   现在 IT 开发人员比以往任何时候都更加关注测试的重要性,没有经过良好测试的代码更容易出问题。在极限编程中,测试驱动开发已经被证明是一种有效提高软件质量的方 法。在测试驱动的开发方式中,软件工程师在编写功能代码之前首先编写测试代码,这样能从最开始保证程序代码的正确性,并且能够在程序的每次演进时进行自动 的回归测试。测试对于软件产品的成败起着至关重要的作用,在极限编程领域,甚至...

cjxixi 243

5G/NR 随机接入过程学习总结

对于随机接入过程,NR与LTE之间有相同点,也有不同点,其最大的区别在于触发场景已经Msg1的处理,详情见下文。 第21章 随机接入过程 21.1 随机接入过程事件触发场景 1) 初始接入:UE从RRC_IDLE态到RRC_CONNETTED态; 2) RRC连接重建:以便UE在无线链路失败后重新建立无线连接(期间重建小区可能是UE无线链路失败的小区,也...

欢迎来到小七的博客,这里将带你深入探索5G通信的神秘世界。无论你是通信领域的专业人士还是对这一领域充满好奇心的技术爱好者,这里都有专业协议解读、通信知识普及以及有趣的Python编程内容等你发现。 7万+

测试覆盖率工具:EclEmma

测试覆盖率工具:EclEmma目录1 测试覆盖率实现技术2 EclEmma介绍3 EclEmma测试覆盖率指标4 EclEmma安装5 示例项目介绍  5.1 创建项目  5.2 用Coverage as TestNG Suite跑用例  5.3 跑后结果  5.4 导出HTML报告   5.5 导入导出合并覆盖率Session  5.6 测试引用的jar包的覆盖率1 测试覆盖率实现技术 返回In...

hualusiyu的专栏 1100

YOLOv11的QAT(训练感知量化)实战

本文总结了YOLO模型量化感知训练(QAT)的实践要点:QAT通过模拟量化噪声训练模型,比训练后量化(PTQ)更适合密集预测任务。关键实现包括:1)配置对称/非对称量化器;2)排除检测头量化;3)调整学习率策略并添加量化正则;4)选择困难样本校准;5)转换前稳定BN统计量。调试时需检查量化范围、数值分布和逐层突变,并注意SPP等敏感层。建议小模型使用QAT,大模型可能适得其反,且TensorRT的FP16模式可能优于INT8-QAT。量化应以功能正确为前提,避免过度优化。

as1225120794的博客 510

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

EclEmma 进行覆盖测试

现在 IT 开发人员比以往任何时候都更加关注测试的重要性,没有经过良好测试的代码更容易出问题。在极限编程中,测试驱动开发已经被证明是一种有效提高软件质量的方法。在测试驱动的开发方式中,软件工程师在编写功能代码之前首先编写测试代码,这样能从最开始保证程序代码的正确性,并且能够在程序的每次演进时进行自动的回归测试。测试对于软件产品的成败起着至关重要的作用,在极限编程领域,甚至有人提议任何未经测试的代码

椰汁菠萝 2323

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用EclEmma进行覆盖测试

EclEmma是一个开源 Java 覆盖测试工具。进入下面的链接按提示安装集成到Eclipse中。 http://www.eclemma.org/installation.html 安装完成后,就可以在Eclipse的tool menu中看到EclEmma的icon了。 单击此按钮,选择事先写好的JUnit test程序,就可以对代码进行覆盖测试了。测试完成后

u010993983的专栏 765

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用Evosuite+EclEmma测试_ESTest的覆盖率

使用Evosuite+EclEmma测试_ESTest的覆盖率Evosuite生成测试数据Eclipse安装Evosuite插件并生成测试用例利用命令行生成测试用例EclEmma插件及应用Eclipse安装EclEmma插件EclEmma插件的简单应用Evosuite+EclEmma测试_ESTest的覆盖率功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮...

sinat_36505108的博客 1644
上一篇: 软件介绍 CamStudio (屏幕录制工具)
下一篇: 图形化MySQL数据库管理工具-SQLyog
贼船叔叔
博客等级 码龄16年 241粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值