使用EMMA测量测试覆盖率

介绍测试代码覆盖率的重要性

测试驱动开发(TDD)是极限编程的一个重要特点,它具有很多优点,并被越来越多的开发人员所接受。在测试驱动开发过程中,程序员经历了编写测试用例,实现功能,重构代码这个不断迭代的过程。实践证明,这个过程能显著提高我们的生产效率,并产生高质量的代码。它还能给我们以自信,让我们放心的重构自己的代码。

测试代码确实能够保证代码的质量,但如果你以为自己已经写了一堆测试用例,并都能运行通过时,就能高枕无忧了,那么你错了。隐藏的 Bug 也许只是在等待时机让你的系统崩溃。这是什么原因呢?聪明的你肯定已经想到,测试代码是用来保证功能代码的质量的,但测试代码的质量如何,我们不得而知。我们需要知道,我们辛苦编写的测试代码到底覆盖了多少功能代码,这就是我写这篇文章的出发点,我将介绍一种测试代码覆盖率的工具 - EMMA。

介绍 EMMA

EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具。它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。

EMMA 有许多优点,首先你能免费得到它,并把它用于自己项目的开发。它支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。它能生成 text,xml,html 等形式的报告,以满足不同的需求,其 html 报告提供下钻功能,我们能够从 package 开始一步步链接到我们所关注的某个方法。EMMA 能和 Makefile 和 Ant 集成,便于应用于大型项目。特别还须指出的一点是,EMMA 的效率很高,这对于大型项目来说很重要。

EMMA 是通过向 .class 文件中插入字节码的方式来跟踪记录被运行代码信息的。EMMA 支持两种模式:On the fly 和 Offline 模式。

On the fly 模式往加载的类中加入字节码,相当于用 EMMA 实现的 application class loader 替代原来的 application class loader。

Offline 模式在类被加载前,加入字节码。

On the fly 模式比较方便,缺点也比较明显,如它不能为被 boot class loader 加载的类生成覆盖率报告,也不能为像 J2EE 容器那种自己有独特 class loader 的类生成覆盖率报告。这时,我们能求助于 Offline 模式。

EMMA 也支持两种运行方式:Command line 和 Ant。

命令行一般和 On the fly 模式一起适用,对于简单的项目能够快速产生覆盖率报告。通过 Ant task 来运行 EMMA 的话,特别适用于大型的项目。

本文后面提供的实例主要是演示如何集成 EMMA 和 Ant,通过 Offline 模式产生覆盖率报告。

示例项目

示例工程 SampleProject 是个小型的项目,有一个类 NumberParser,主要功能是把一个字符串解析成 float 型。下面是整个工程的目录结构。

图1. 示例项目的目录结构

时间: 2024-11-05 04:49:51

使用EMMA测量测试覆盖率的相关文章

用Cobertura测量测试覆盖率

Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了 哪些代码和没有执行哪些代码,来测量测试覆盖率.除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的.执行不到的代码来优化代码,还可以提供 API 实际操作的内部信息.Elliotte Rusty Harold 将与您分享如何利用代码覆盖率的最佳实 践来使用 Cobertura. 尽管测试先行编程(test-first programming)和单元测试已不能算是新概念,但测 试驱动

Java测试覆盖率工具----Cobertura,EclEmma

Cobertura 是一个与Junit集成的代码覆盖率测量工具 它是免费.开源的 它可以与Ant和Maven集成,也可以通过命令行调用 可以生成HTML或XML格式的报告 可以按照不同的标准对HTML结果进行排序 为每个类.包以及整个项目计算所覆盖的代码行与代码分支的百分比例 原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong Eclipse插件地址: http://ecobertura.johoop.de/update/ (requires

测试覆盖率工具--clover.net

以前上软件测试课时,看到老师演示的一个统计C语言的测试覆盖率的工具,当时就想不知道.NET下是否有同样的工具.碰巧昨天就发现了clover.net,它能帮你分析那些代码已经经过了测试. 下面是我们上的软件测试课中关于覆盖分析的一些资料: 覆盖分析是对需求的实现程度或对程序的执行程度的分析. 覆盖分析包括两部分,即基于需求的覆盖分析和基于结构的覆盖分析.基于需求的覆盖分析是分析测试用例对软件需求的覆盖程度,以证实所选的测试用例满足指定的需求覆盖准则 .基于结构的覆盖分析是分析测试用例 对被测程序的

如何利用测试类型提高测试覆盖率?

在前面的文章中,我们提到了测试类型定义需要综合考虑各个方面的输入,包括开发文档定义的需求(包括涉及的一些标准与规范等).ISO/IEC 9126质量模型.测试经验,以及通过分析在研发阶段发现的缺陷.产品发布之后用户反馈的缺陷分析等.图1是结合数据通信产品的特点,而定义的测试类型: 图1 某个数据通信产品中的测试类型 1)测试类型定义 (1)功能性(Functionality) 功能性指的是软件或者产品在指定条件下使用时,提供满足明确和隐含要求的功能的能力.通过评价特征集和程序的能力.交付的函数的

测试用例设计——如何提高测试覆盖率

说到测试用例的设计,我想每个有过测试经历的测试工程师都会认为很简单,不就是:按需求或概要设计,得到软件功能划分图,然后据此按每个功能,采用等价类划分.临界值.因果图等方法来设计用例就行了. 但事实上撇开测试数据的设计不谈,仅就测试项来说,我们发现,对同一个项目,有经验的测试人员,在写用例或测试时总会有更多的测试考虑点,从而发现更多的问题:而有些测试人员测试用例的撰写却只有那么三板斧,表面看好象已经把页面所有信息的测试都考虑到了,实际上却还是遗漏了大量测试覆盖点,导致其测试出来的程序总是比较脆弱.

如何提高测试用例设计的测试覆盖率

说到测试用例的设计,我想每个有过测试经历的测试工程师都会认为很简单,不就是:按需求或概要设计,得到软件功能划分图,然后据此按每个功能,采用等价类划分.临界值.因果图等方法来设计用例就行了. 但事实上撇开测试数据的设计不谈,仅就测试项来说,我们发现,对同一个项目,有经验的测试人员,在写用例或测试时总会有更多的测试考虑点,从而发现更多的问题:而有些测试人员测试用例的撰写却只有那么三板斧,表面看好象已经把页面所有信息的测试都考虑到了,实际上却还是遗漏了大量测试覆盖点,导致其测试出来的程序总是比较脆弱.

Eclipse 安装Clover插件进行统计代码测试覆盖率

Clover主要有以下几个优点: 快速.准确地检测测试是否覆盖代码中的所有路径 可以集成在多个IDE中,如Eclipse.NetBeans.jBuilder等 统计和分析结果可以导出为多种格式,如PDF.HTML 下面介绍的是在Eclipse中安装Clover插件进行统计代码测试覆盖率的方法. 一.安装Clover插件 打开Eclipse顶部菜单中的Help->Install New Software...,在弹出的窗口中点击右边的Add按钮,添加Clover插件的网络下载地址. 点击OK后,系

2012安捷伦测量测试大会展示热门行业应用和尖端科技成果

安捷伦科技(中国)有限公司于日前在上海成功举办"2012安捷伦测量测试大会".本次大会着眼于热门行业应用和尖端科技成果展示."发现真知始于测量(Discovery Begins with Measurement)"的主题贯穿整个活动现场.全天的会议报告包括上午的主题发言和下午的"无线通信"."射频微波"."通用测试"三个分论坛,共计15场报告.不同于往年的安捷伦测试大会,除了主会场之外,安捷伦在本次大会设立

XL C/C++在不降低测试覆盖率的情况下减少回归测试使用

回归测试通常是确保http://www.aliyun.com/zixun/aggregation/8904.html">软件质量所必需的.但是,它被广泛认为是一种昂贵的过程.要降低这一成本,为整个测试套件应用了测试选择技术. 采用测试选择技术的结果是减少了测试套件.现有的几种测试选择技术试图减小测试套件大小,同时保持高缺陷检测率. 本文介绍了一种安全高效的测试选择技术,它依靠剖析信息选择测试用例.我们将此技术称为剖析定向选择 (profile-directed selection, PDS