
正文
java代码覆盖率分析 java的覆盖
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java代码覆盖率测试现在用什么工具?
java代码覆盖率分析你好java代码覆盖率分析,代码覆盖率测试java代码覆盖率分析,你可以试试Emma和Jacoco,eclipse中也有eclemma插件,这两种都是比较流行java代码覆盖率分析的工具
希望我java代码覆盖率分析的解答可以帮助你
相关问答
Q1: 编程实现代码覆盖率及路径分析检测,C++, C#, Java, JavaScript(任选一种程序语言)
如果你采用源码插装的方式来做的话,需要对输入程序进行词法,语法分析建立语法分析树(有一些现成的工具如bison, antlr可以借助),通过语分析法分析树获取程序控制流关系,然后就可以对程序的基本块进行分析了。要考虑获取覆盖率和程序执行路径,需要对基本块做插装,利用插入的探针来对它们的执行情况做记录。
Q2: 为什么要对程序做代码覆盖率测试?
关于代码覆盖率,之前6年的工作经历中,只是依稀听闻过。之前的组织里,从未关注过这个指标,只是有一段时间用NUnit做了单元测试,主要是测试一些关键类关键方法是否正常,对代码覆盖率的印象就真的一直是停留在听闻的程度。汗一个!\x0d\x0a前些时日,关于自动测试的讨论中有人提及到代码覆盖率,激发了我的好奇,到底什么是代码覆盖率?最重要的是于测试工作而言有怎样的价值呢?今天花了一点时间查了一下,有了初步的认识。大致归纳如下:\x0d\x0a一、基本概念\x0d\x0a代码覆盖率是单元测试活动任务之一;\x0d\x0a覆盖率分语句覆盖率(即通常所说的行覆盖率)和分支覆盖率。\x0d\x0a二、价值\x0d\x0a代码覆盖率的分析能在一定程度上评判代码质量,一般覆盖率高的代码出错的几率会相对低一些。但是高覆盖率只是表示执行了很多的代码,并不意味着这些代码被很好地执行了。所以,似乎覆盖率测试结果出来并不能帮我准确的评价代码质量。那么我们为什么要做覆盖率测试呢?如何让它给我们带来价值呢?\x0d\x0a1. 尽早评估代码质量\x0d\x0a比如在开发的过程中,定时的去看整个项目的代码覆盖率,监控覆盖报告可以帮助开发团队迅速找出不断增长的但是没有相应测试的代码。例如,在一周开始时运行覆盖报告,显示项目中一个关键的软件包的覆盖率是 70%。如果几天后,覆盖率下降到了 60%,那么您可以推断:软件包的代码行增加了,但是没有为新代码编写相应的测试(或者是新增加的测试不能有效地覆盖新代码)。能够监控事情的发展,无疑是件好事。定期地查阅报告使得设定目标(例如获得覆盖率、维护代码行的测试案例的比例等)并监控事情的发展变得更为容易。如果您发现测试没有如期编写,您可以提前采取一些行动,例如对开发人员进行培训、指导或帮助。\x0d\x0a2. 为功能测试关注点提供情报\x0d\x0a假设覆盖报告在指出没有经过足够测试的代码部分方面非常有效,那么质量保证人员可以使用这些数据来评定与功能测试有关的关注区域,可以更有针对性地加强这些区域的测试,因为没有被测试代码覆盖到的区域,出错的几率应该相对更高。\x0d\x0a3. 估计修改已有代码所需的时间\x0d\x0a对一个开发团队而言,针对代码编写测试案例自然可以增加集体的信心。与没有相应测试案例的代码相比,经过测试的代码更容易重构、维护和增强。测试案例因为暗示了代码在测试工作中是如何工作的,所以还可以充当内行的文档。在另一方面,没有经过相应测试的代码更难于理解和安全地修改。因此,知道代码有没有被测试,并看看实际的测试覆盖数值,可以让开发人员和管理人员更准确地预知修改已有代码所需的时间。\x0d\x0a当然,这样的理解还是比较浅层的,我想实际应用中除了以上三点之外,还有一个很重要的工作就是提高测试代码的质量来更好的体现代码覆盖率的价值。
Q3: 北大青鸟java培训:如何才能写出一手高质量优美的代码?
怎么判断代码是否是优质量的代码呢?下面河南电脑培训来简单对代码质量的问题进行一个介绍。
代码质量所涉及的5个方面,编码标准、代码重复、代码覆盖率、依赖项分析、复杂度分析。
我们分别来看一下这5方面:编码标准:一般来说,公司都会有一份编码规范,类命名、包命名、代码风格之类的都会有所要求。
代码重复:顾名思义就是重复的代码,如果代码中有大量的重复代码,就要考虑是否将重复的代码提取出来,封装成一个公共的方法或者组件。
代码覆盖率:测试代码能运行到的代码比率,代码经过了单元测试了吗?是不是每个方法都进行了测试,代码覆盖率是多少?这关系到代码的功能性和稳定性。
依赖项分析:代码依赖关系怎么样?耦合关系怎么样?是否有循环依赖?是否符合高内聚低耦合的原则?复杂度分析:如果代码中嵌套了很多层的ifelse,就会让人很难阅读。
要相信越优秀的代码,越容易读懂。
Q4: java web怎么用emma进行代码覆盖率测试
使用 emma 2.1 (emma-stable-2.1.5320-lib) 1. 新建 /home/q/java/emmalib 目录, 将emma.jar 与 emma_ant.jar 放入 2. 复制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh 修改启动语句。
使用 emma 2.1 (emma-stable-2.1.5320-lib)
1. 新建 /home/q/java/emmalib 目录, 将emma.jar 与 emma_ant.jar 放入
2. 复制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh
修改启动语句
nohup java -Xmx1800M -Xms800m -Xbootclasspath/p:/home/q/java/emmalib/emma.jar -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+AggressiveOpts -XX:+UseParallelGC -server -classpath "$jarFile" com.qunar.common.mobileArc.MobileServer conf/TaLog.property conf/TripServer.property $LOG_HOME/error.log 21
复制 /server/bin/mobileserver/stopServer.sh 到 stopServer_emma.sh
添加覆盖率导出命令
插入 emma 统计代码
使用root账号
1. 备份mobileserver.jar
cp /server/TripAssistant/mobile-server.jar $MOB_JAR_BAK/mobile-server.jar.{$timestamp}
2. 执行插入命令
java -cp /home/q/java/emmalib/emma.jar emma instr -m overwrite -cp mobile-server.jar -out coverage.em
输出如下:
EMMA: processing instrumentation path ...
EMMA: instrumentation path processed in 3117 ms
EMMA: [1000 class(es) instrumented, 126 resource(s) copied]
EMMA: metadata merged into [/server/TripAssistant/coverage.em]
3. 运行mobileserver runServer_emma.sh
sudo sh /server/bin/mobileserver/stopServer.sh sudo sh /server/bin/mobileserver/runServer_emma.sh
在 /server/mobileserverlog/error.log中可见:
EMMA: collecting runtime coverage data ...
EMMA: runtime controller started on port [47653]
emma control 进程已启动
[root@l-wap4.beta.cn1.qunar.com /server/mobileserverlog]# netstat -na | grep 47653
tcp 0 0 0.0.0.0:47653 0.0.0.0:* LISTEN 20926/java
4. 执行 覆盖率文件导出命令
java -cp /home/q/java/emmalib/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
可见输出:
EMMA: processing control command sequence ...
EMMA: executing [coverage.get (coverage.ec,true,true)] ...
EMMA: coverage.get: local copy of coverage data merged into [/server/TripAssistant/coverage.ec]
EMMA: coverage.get: command completed in 79 ms
EMMA: control command sequence complete
并且当前目录生成文件 coverage.ec
5. 生成报告
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in coverage.em,coverage.ec
指定源代码生产覆盖率报告(需先上传源码)
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in /server/TripAssistant/coverage.em,/server/TripAssistant/coverage.ec -Dreport.html.out.file=mycoverage/coverage.html -sp /home/liang.zhou/mob_code_dir/mobs_trunk/src/main/java
emma 方式启动 mobserver
==================================
1. 判断mobserver.jar size, 大于5M 为已插入过, 小于5M为未插入(需要执行插入)
2. 执行插入
3. 启动
4. 检查启动状态
47653 端口打开
mobileserver 进程打开
emma 方式停止 mobserver
==================================
1. 检查47653端口打开状态, 检查coverage.em是否存在
2. 导出覆盖率文件 coverage.ec, 备份coverage.em (加上时间戳)
3. 导出覆盖率HTML report (加上对应时间戳)
4. kill mobserver 进程
ls -lt mobile-server.jar
判断 $? == 0
判断mobile-server.jar size是否大于 5M
#!/bin/bash
function stop_mob_server(){
#!/bin/bash
function stop_mob_server(){
pid=`ps aux | grep MobileServer | grep -v grep | awk '
Unknown macro: {print $2}
'`
` kill -9 $
Unknown macro: {pid}
`
sleep 1
echo "Stop mobileserver success."
}
#判断 emma ctl 是否启动
port_check_result=`netstat -na | grep 47653 | awk '
Unknown macro: {print $1}
'`
if [ -z $
Unknown macro: {port_check_result}
]; then
echo "Emma ctl port 47653 is not LISTEN. Coverage.ec export operation aborted."
else
#emma ctl 为启动状态,导出 coverage.ec, 并备份至 /home/q/mobsrv_cov
if []
fi
java代码覆盖率分析的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java的覆盖、java代码覆盖率分析的信息别忘了在本站进行查找喔。






