Upload
elfinhe
View
414
Download
2
Embed Size (px)
Citation preview
Java覆盖信息收集工具比较
Java覆盖信息收集程序通常分为三种: 在源码上装置上程序覆盖信息收集的代码 在字节码上装置上程序覆盖信息收集的字节码 使用特殊的 JVM动态地收集程序覆盖信息
Σοφία(Sofya)
http://sofya.unl.edu/
Σοφία(Sofya)是基于 Java字节码的程序分析程序。
收集的程序信息
程序轨迹(Trace Sequences) 块命中次数(Block Hits) 覆盖信息(包括 instructions, basic blocks, 'real' blocks, exception handlers, finally blocks
and branches)
优缺点
缺点
Σοφία产生的报告几乎是非格式化的,需要我们编写正则表达式来抽取其中的信息。不过,Σοφία是开源项目,可以直接使用它的源码中的对象作为已格式化数据,省去抽取信息的步骤。(相对于其他产生XML报告的系统,仍然比较麻烦。)
生成的报告都是关于字节码的,并且不能在字节码的指令与源代码的代码行间进行映射。
使用的学习曲线陡峭,开发的学习曲线平坦。
优点
类似 Linux,使用输出输出以及文件作为 pipe and filter模式的接口。责任分离,源码可读性好。
可以产生程序轨迹(Trace Sequences),其他的系统还没发现这个信息。 可拓展性好,Semantic event dispatch,Structural event dispatch。很Hackerdom,非常值得一玩。
使用方式
生命周期 sofya.graphs.cfg.jCFG产生控制流和映射文件(control flow and map files)。 sofya.ed.cfInstrumentor 对字节码装置上程序覆盖信息收集的字节码。 sofya.ed.BBTracer 收集程序执行的信息。
对于生成的中间信息,可以使用对应的Viewer产生程序员可读的信息:
Cobertura
http://cobertura.sourceforge.net/
Cobertura也是一个基于字节码的.
收集的程序信息
程序的覆盖信息比例 代码行的命中次数
优缺点
优点
生成报告的格式美,有HTML,XML两种形式,使用简便,非常傻瓜化。 使用Ant构建项目,可配置性高。 兼容 Junit的测试用例。
缺点
Ant的配置颇为繁琐。 这个系统拓展性好像不是很强,在做二次开发时可能会遇到很多麻烦。 我还没有研究出怎样在 Eclipse下运行,只会在命令行下运行。 使用的学习曲线平坦,开发的学习曲线陡峭。
使用方式
按照模板和手册改写 build.xml,直接 ant即可。需要 build.xml中有一些几个部分。
备忘:我在 Eclipse中为 Java配置了外部库,在 build.xml中添加了一行配置 Junit.jar的位置才 ant成功。E:\Project\cobertura-1.9.4.1\examples\basic>E:\Project\apache-ant-1.8.1\bin\ant
EMMA
http://emma.sourceforge.net/
一个较老(也可以说是成熟)Java代码覆盖分析工具集。(我只是看了它的 Sample Reports)
收集的程序信息
一份XML报告,包含了所有信息 包数,类数,方法数,文件数,代码行数 类,方法,基本块,代码行的覆盖率(这份报告中没有具体代码行的覆盖信息,但是 HTML的报告中有标记,不知道是否能通过参数配置出来?)
优缺点
优点
支持两种方式获取信息,离线和在线(offline or on the fly)。 输出的格式也比较好用。
缺点
(这份报告中没有具体代码行的覆盖信息,但是 HTML的报告中有标记,不知道是否
能通过参数配置出来?) 使用的学习曲线平坦,开发的学习曲线陡峭。
使用方法
还没有使用过。
总结
只是弄了今天一天,先总结一些。
Σοφία
初浅感觉如果要做二次开发(例如:开发 Eclipse插件),使用 Σοφία来得快一些,我使用了一次,就大概知道它的工作原理和生命周期。不过它只能处理 Bytecode不处理 Source
Code就比较遗憾。另外,它可以收集 Trace信息,这在以后我们拓展Design Space比较有帮助。(我们仅仅在 Bytecode先做错误定位也何尝不可?)
Cobertura
收集到的信息非常全,包括了代码行的运行次数,XML格式也方便。我以后要是抓覆盖信息就先想到它。不过,它几乎没有文档,主页有使用指南,开发页面也没有看见文档(大家找到记得告诉我),要做二次开发估计很难。
EMMA
比较成熟的项目。但是二次开发可能很难,相比 Σοφία几乎白盒的使用模式,Cobertura和EMMA更像是一种黑盒的工具,配置文件弄好,运行就是了,也不知道它里面做了什么。