如果在生成测试报告的时候,如果出现 “com.vladium.emma.EMMARuntimeException: [CLASS_STAMP_MISMATCH] runtime version of class in the coverage data is not consistent with the version of this class in the metadata, possibly because stale metadata is being used for report generation” 错误,说明在生成新的 “*.em” 前后代码曾经被修改过,并且被修改的代码所在的类文件在新的测试中没有被覆盖到,这就需要重新执行这部分测试,保证修改过的部分被重新执行。
使用覆盖率报告总结和评估测试过程
到目前为止,针对每个测试用例的测试覆盖率报告和测试整体的覆盖率报告都已经得到了。这些报告可以帮助测试人员总结和分析测试结果,改进测试设计。
目前的功能测试中,测试人员主要借助执行的测试用例数目和测试过程中的问题报告来评价测试过程,因此,测试用例的设计直接关系到测试的充分性。测试人员往往无法从目前的测试结果报告中得到哪些部分被覆盖了,哪些部分未被覆盖的信息,也就造成了在测试结束时测试人员对测试结果没有信心。另外,很多情况下,测试人员完成了某些特定情况的测试,异常情况往往被忽视。
覆盖率报告为测试人员查看测试覆盖情况提供了清晰的视图。尽管100%的覆盖率不能证明没有问题,但是它为测试人员提供了参考。当覆盖率很低的时候,测试人员可以通过覆盖率报告的提示找到原因。
与开发人员讨论测试结果
在覆盖率结果、测试用例设计和执行文档的指导下,测试人员可以更清楚地与开发人员讨论测试结果,可以更加清楚的发现:
测试人员忽略的部分。
测试用例设计中被覆盖而测试执行中未覆盖的部分。
程序中的无用代码。
例如:在实际的测试过程中,发现一个叫 syslog.messages 包的覆盖率一直很低,一些类和方法始终没有被覆盖到。在测试执行过程中,与这些类相关的结果也没有出现。因此,在与开发人员确认后,发现对这些内容的调用在写代码的时候被遗忘了(图3中红色框中的内容)。
图 3. 覆盖率报告分析
改进测试设计
利用覆盖率报告,测试人员可以改进测试用例的设计:
移除覆盖范围重复的测试用例。
对于覆盖点过多的测试用例,可以进行拆分,保证测试用例具有针对性。
对于测试中未覆盖的部分,增加测试用例保证测试完整性。
结论
在功能测试中,测试人员一般不能直接获得被测对象的源代码,类、方法覆盖率可以作为衡量和评估测试的重要标准。 EMMA 在字节码插装的基础上捕获并报告测试中的覆盖率信息,使覆盖率成功地用于功能测试。通过在功能测试中使用 EMMA 可以改进测试设计,帮助问题分析,并能更好地评估测试,保证测试质量。
原文转自:http://www.testwo.com/article/591