测试覆盖率是评价测试完整性的重要的度量标准之一。 EMMA 是一个面向 Java 代码的测试覆盖率收集工具。在测试过程中,使用 EMMA 能使收集和报告测试覆盖率的过程更加灵活、简单。在本文中,作者将 EMMA 引入到功能测试的过程,详细介绍 EMMA 在功能测试中的使用方法、步骤,并对覆盖率结果进行分析。
引言
EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。 EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。
注意:
在测试中使用 EMMA 收集覆盖率信息之前,需要从 EMMA 的网站上下载 emma.jar 包。在这个网站上还可以得到更多关于 EMMA 的资源。
EMMA 只能收集 Java 代码的覆盖率。
文章附录提供一个样例代码,包含一个 WAR 包和一个 JAR 包,其中需要将 WAR 包安装在WebSphere Portal Server 上运行。在实际测试过程中,可以将它们替换成对应的被测对象。
功能测试中使用 EMMA 的优点
EMMA 收集的数据包括类覆盖率、方法覆盖率、块覆盖率和行覆盖率,这些数据以包为单位进行组织。
大多数功能测试中,测试人员一般不能直接得到被测源代码,源代码也不是测试人员关心的重点。在具体的测试过程中,功能测试人员一般以一个有意义的功能模块作为测试关心的重点,而能够反映一定功能含义的类和方法的覆盖率在功能测试中更有价值。因此,在功能测试中,类覆盖率和方法覆盖率是测试人员关心的重点,行和块覆盖率则作为测试的参考。
测试覆盖率报告中包含了两个方面的内容,测试覆盖的部分和未被测试覆盖的部分。尽管百分之百的测试覆盖率不能代表被测对象完全没有问题,但是测试覆盖的部分以及覆盖比率可以增加测试者对测试工作的信心,指导测试执行以及测试的方向。另一方面,当测试用例执行出现异常时,针对每个测试用例的测试报告还可以提供可疑代码的范围,为代码纠错提供帮助。
测试覆盖率报告中未覆盖的部分也同样有价值:
表明测试可能不完整,有些功能、代码没有被测试覆盖到。
为测试用例的设计提供指导建议。在覆盖率报告的指导下,测试人员有目的地与开发人员进行讨论,确定未覆盖部分是测试的空白还是不需要测试的部分。
帮助开发人员发现无用代码,为修改,完善代码提供依据。
在使用 EMMA 获得测试覆盖率过程中,类、方法等覆盖的百分比报告,可以方便测试人员更好的评估测试。测试人员通过对照覆盖率报告与测试用例设计文档,需求文档可以迅速找到测试的不足。通过与开发人员进行讨论,可以更好的评估测试力度,并指导进一步的测试。因此在功能测试中引入覆盖率信息,能够完善测试结果报告,确保测试质量和力度,保证测试按质、按量地完成。
特别是在目前倡导的 Agile 开发和测试流程中,开发和测试的周期都很短,有效的覆盖率信息能够帮助测试人员更加准确地控制测试结果和周期、跟踪问题,保证软件正常发布。
EMMA 在测试执行中的应用
在这一部分将逐步介绍 EMMA 在功能测试过程中的使用过程和步骤。为了使整个介绍过程容易理解,在文章附录中提供了示例程序,文章中通过对示例程序进行操作介绍使用 EMMA 的命令。
插装被测组件
EMMA 通过对被测组件进行插装来跟踪被测组件的执行过程,因此对被测组件进行插装是使用 EMMA 获得覆盖率信息的第一步。测试人员应首先和开发人员讨论,确定哪一部分包含了符合插装要求的文件( Java 文件),哪一部分需要考虑覆盖率信息,然后选择合适的方式进行插装。
插装准备
在执行插装操作之前,首先应该扩展 Java 虚拟机,即将 emma.jar 放到被测组件运行使用的JRE 目录下面作为 JRE 的扩展,以便 EMMA 能够被调用。 emma.jar 包含了 EMMA 核心功能模块的实现和 EMMA 运行时所需的类文件,这些文件是使用 EMMA 所必需的。
原文转自:http://www.testwo.com/article/591