6
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 覆覆覆覆覆 ,一。

Java覆盖信息收集工具比较

  • Upload
    elfinhe

  • View
    414

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Java覆盖信息收集工具比较

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模式的接口。责任分离,源码可读性好。

Page 2: Java覆盖信息收集工具比较

可以产生程序轨迹(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也是一个基于字节码的.

收集的程序信息

程序的覆盖信息比例 代码行的命中次数

Page 3: Java覆盖信息收集工具比较

优缺点

优点

生成报告的格式美,有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

Page 4: Java覆盖信息收集工具比较

EMMA

http://emma.sourceforge.net/

一个较老(也可以说是成熟)Java代码覆盖分析工具集。(我只是看了它的 Sample Reports)

收集的程序信息

一份XML报告,包含了所有信息 包数,类数,方法数,文件数,代码行数 类,方法,基本块,代码行的覆盖率(这份报告中没有具体代码行的覆盖信息,但是 HTML的报告中有标记,不知道是否能通过参数配置出来?)

Page 5: Java覆盖信息收集工具比较

优缺点

优点

支持两种方式获取信息,离线和在线(offline or on the fly)。 输出的格式也比较好用。

缺点

(这份报告中没有具体代码行的覆盖信息,但是 HTML的报告中有标记,不知道是否

Page 6: Java覆盖信息收集工具比较

能通过参数配置出来?) 使用的学习曲线平坦,开发的学习曲线陡峭。

使用方法

还没有使用过。

总结

只是弄了今天一天,先总结一些。

Σοφία

初浅感觉如果要做二次开发(例如:开发 Eclipse插件),使用 Σοφία来得快一些,我使用了一次,就大概知道它的工作原理和生命周期。不过它只能处理 Bytecode不处理 Source

Code就比较遗憾。另外,它可以收集 Trace信息,这在以后我们拓展Design Space比较有帮助。(我们仅仅在 Bytecode先做错误定位也何尝不可?)

Cobertura

收集到的信息非常全,包括了代码行的运行次数,XML格式也方便。我以后要是抓覆盖信息就先想到它。不过,它几乎没有文档,主页有使用指南,开发页面也没有看见文档(大家找到记得告诉我),要做二次开发估计很难。

EMMA

比较成熟的项目。但是二次开发可能很难,相比 Σοφία几乎白盒的使用模式,Cobertura和EMMA更像是一种黑盒的工具,配置文件弄好,运行就是了,也不知道它里面做了什么。