Java代码覆盖率工具(Sonar+Jacoco)部署

本文介绍了Java代码覆盖率的概念及其局限性,重点讲解了使用Sonar和Jacoco进行覆盖率工具的部署过程,包括Sonar用于结果展示,Jacoco生成覆盖率数据。文章还提供了详细的步骤,从下载工具到配置JavaAgent,再到SonarQube的启动和Sonar Runner的使用,最后讨论了实践中的遗留问题和挑战。
摘要由CSDN通过智能技术生成

方法局限

代码覆盖率的定义:对某一段代码或者代码的某一种属性做测试,其测试达到的程度被称为是覆盖率,比如对语句的覆盖,对分支或者条件的覆盖,等等。
计算方法:把现有的测试与可能执行的测试做比较,现有测试能够占总的可能执行的测试的多少比例。
覆盖率的经典定义没有考虑到一些情况,比如:
1. 输入特定的某个值或者某组值:边界值或者特殊的值;
2. 在编码中遗漏的代码:在代码中没有实现需求却要求的功能;
3. 中断,以及其他并行操作的情况。

Cem Kaner在他的著作“Software Negligence & Testing Coverage”里列举了101种这样的例子。
尽管覆盖率有一定的缺陷,但是还是需要量化的衡量维度(可扩充)。

工具调研

信息收集工具

市场上主要代码覆盖率工具:Emma、cobertura、jacoco、Clover(商用)。
覆盖粒度的具体意义?分支覆盖是指 if else的覆盖。
HUDSON:Java开发的一种持续集成工具。

具体见下表:

- jacoco emma cobertura
原理 使用ASM修改字节码 修改jar文件,class文件字节码文件 基于jcoverage,基于asm框架对class文件插桩
覆盖粒度 行,类,方法,指令,分支 行,类,方法,基本块,指令,无分支覆盖 项目,包,类,方法的语句覆盖/分支覆盖
插桩 on the fly、offline on the fly、offline offline,把统计代码插入编译好的class文件中
生成结果 在tomcat的catalina.sh配置javaangent参数,指出需要收集覆盖率的文件,shutdown时才收集,只能使用kill命令关闭tomcat,不要使用kill -9 html,xml,txt,二进制格式报表 html,xml
缺点 需要源代码 1、需要debug版本,并打来build.xml中的debug编译项; 2、需要源代码,且必须与插桩的代码完全一致 1、不能捕获测试用例中未考虑的异常; 2、关闭服务器才能输出覆盖率信息(已有修改源代码的解决方案,定时输出结果;输出结果之前设置了hook,会与某些服务器的hook冲突,web测试中需要将cobertura.ser文件来回copy
性能 小巧 插入的字节码信息更多
执行方式 maven,ant,命令行 命令行 maven,ant
jenkins集成 生成html报告,直接与hudson集成,展示报告,无趋势图 无法与hudson集成 有集成的插件,美观的报告,有趋势图
报告实时性 默认关闭,可以动态从jvm dump出数据 可以不关闭服务器 默认是在关闭服务器时才写结果
维护状态 持续更新中 停止维护(2005 http://www.eclemma.org/jacoco /tru
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值