Java的测试覆盖率工具

对于Java语言的测试覆盖率工具众多,有开源免费的Jacoco/PIT,也有商业的Clover,也有开发了十多年目前还在发布的的覆盖率工具Cobertura,

  1. Emma (http://eclemma.org/jacoco/)
  2. JCov (https://wiki.openjdk.java.net/display/CodeTools/jcov)
  3. Code Cover (http://codecover.org/)
  4. Cobertura (http://cobertura.github.io/cobertura)
  5. PIT (http://pitest.org/)
  6. Clover (https://www.atlassian.com/software/clover)
  7. Jacoco (http://eclemma.org/jacoco/)

下图将上述覆盖率工具的功能、授权方式、代码的注入、报告和语言支持、对各个工具的集成支持、开发活跃度一一列出,方便大家进行一些比较,(其中Emma已停止开发,其被Jacoco取代,不再列入)

java_cov_tools_comparison

表格中代码注入方式的含义如下,

-- source code: 在源代码编译时刻进行注入

-- bytecode offline: 对编译后的类二进制文件进行注入,在JVM载入内存前

-- bytecode on the fly: 在JVM载入二进制文件时使用application classloader动态注入

比较推荐使用Jacoco,各种工具的支持比其它开源工具更好,社区也很活跃,个人也在使用其开发覆盖率平台的工具,使用下来感觉还不错。

Jacoco提供了丰富的API接口,其开发文档和相关小工具还是比较多,目前主要集成在各个开发工具和构建分析工具中,开发人员一般在IDE中使用各种Jacoco插件分析代码,测试人员基本上通过ant/maven工具生成覆盖率报告,然后将报告展现在CI/Sonar等各个工具上。但是Jacoco的功能是不仅仅于此,比较遗憾的是还没有一个通用的覆盖率收集平台工具,能够为测试活动提供一个整体解决方案,对于测试,一般希望能够按阶段按环境来收集覆盖率数据,能够实时监控不仅仅来自自动化测试的数据,还可以为手动测试提供实时监测数据和报告,能够分析增量代码的覆盖率数据。目前的覆盖率工具基本以插件的方式存在,功能和报告分散,也许在不久的将来会有个覆盖率平台能够开发出来解决这个问题,当然这个覆盖率平台也一定不仅仅支持Java语言。

 

参考资料,

-- Clover官方wiki对各个覆盖率工具的比较: Link

-- Wiki上对各个覆盖率工具的比较:Link

-- SonarQube对覆盖率工具的介绍: Link

-- IBM DeveloperWorks对Jacoco的介绍:Link