SlideShare ist ein Scribd-Unternehmen logo
1 von 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,非常值
    得一玩。

使用方式


生命周期
 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:Projectcobertura-1.9.4.1examplesbasic>E:Projectapache-ant-1.8.1binant
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 更像是一种黑盒的工具,配置文件弄好,运行就是了,也不知道它里面做了什么。

Weitere ähnliche Inhalte

Mehr von Tao He

Java 并发编程笔记:01. 并行与并发 —— 概念
Java 并发编程笔记:01. 并行与并发 —— 概念Java 并发编程笔记:01. 并行与并发 —— 概念
Java 并发编程笔记:01. 并行与并发 —— 概念Tao He
 
A software fault localization technique based on program mutations
A software fault localization technique based on program mutationsA software fault localization technique based on program mutations
A software fault localization technique based on program mutationsTao He
 
Introduction to llvm
Introduction to llvmIntroduction to llvm
Introduction to llvmTao He
 
Mutation testing
Mutation testingMutation testing
Mutation testingTao He
 
Django
DjangoDjango
DjangoTao He
 
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述Tao He
 
Testing group’s work on fault localization
Testing group’s work on fault localizationTesting group’s work on fault localization
Testing group’s work on fault localizationTao He
 
Muffler a tool using mutation to facilitate fault localization 2.0
Muffler a tool using mutation to facilitate fault localization 2.0Muffler a tool using mutation to facilitate fault localization 2.0
Muffler a tool using mutation to facilitate fault localization 2.0Tao He
 
Muffler a tool using mutation to facilitate fault localization 2.3
Muffler a tool using mutation to facilitate fault localization 2.3Muffler a tool using mutation to facilitate fault localization 2.3
Muffler a tool using mutation to facilitate fault localization 2.3Tao He
 
Semantic Parsing in Bayesian Anti Spam
Semantic Parsing in Bayesian Anti SpamSemantic Parsing in Bayesian Anti Spam
Semantic Parsing in Bayesian Anti SpamTao He
 
Problems
ProblemsProblems
ProblemsTao He
 
A survey of software testing
A survey of software testingA survey of software testing
A survey of software testingTao He
 
Cleansing test suites from coincidental correctness to enhance falut localiza...
Cleansing test suites from coincidental correctness to enhance falut localiza...Cleansing test suites from coincidental correctness to enhance falut localiza...
Cleansing test suites from coincidental correctness to enhance falut localiza...Tao He
 
Concrete meta research - how to collect, manage, and read papers?
Concrete meta research - how to collect, manage, and read papers?Concrete meta research - how to collect, manage, and read papers?
Concrete meta research - how to collect, manage, and read papers?Tao He
 

Mehr von Tao He (14)

Java 并发编程笔记:01. 并行与并发 —— 概念
Java 并发编程笔记:01. 并行与并发 —— 概念Java 并发编程笔记:01. 并行与并发 —— 概念
Java 并发编程笔记:01. 并行与并发 —— 概念
 
A software fault localization technique based on program mutations
A software fault localization technique based on program mutationsA software fault localization technique based on program mutations
A software fault localization technique based on program mutations
 
Introduction to llvm
Introduction to llvmIntroduction to llvm
Introduction to llvm
 
Mutation testing
Mutation testingMutation testing
Mutation testing
 
Django
DjangoDjango
Django
 
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
 
Testing group’s work on fault localization
Testing group’s work on fault localizationTesting group’s work on fault localization
Testing group’s work on fault localization
 
Muffler a tool using mutation to facilitate fault localization 2.0
Muffler a tool using mutation to facilitate fault localization 2.0Muffler a tool using mutation to facilitate fault localization 2.0
Muffler a tool using mutation to facilitate fault localization 2.0
 
Muffler a tool using mutation to facilitate fault localization 2.3
Muffler a tool using mutation to facilitate fault localization 2.3Muffler a tool using mutation to facilitate fault localization 2.3
Muffler a tool using mutation to facilitate fault localization 2.3
 
Semantic Parsing in Bayesian Anti Spam
Semantic Parsing in Bayesian Anti SpamSemantic Parsing in Bayesian Anti Spam
Semantic Parsing in Bayesian Anti Spam
 
Problems
ProblemsProblems
Problems
 
A survey of software testing
A survey of software testingA survey of software testing
A survey of software testing
 
Cleansing test suites from coincidental correctness to enhance falut localiza...
Cleansing test suites from coincidental correctness to enhance falut localiza...Cleansing test suites from coincidental correctness to enhance falut localiza...
Cleansing test suites from coincidental correctness to enhance falut localiza...
 
Concrete meta research - how to collect, manage, and read papers?
Concrete meta research - how to collect, manage, and read papers?Concrete meta research - how to collect, manage, and read papers?
Concrete meta research - how to collect, manage, and read papers?
 

Java覆盖信息收集工具比较

  • 1. 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 模式的接口。责任分离,源码可
  • 2. 读性好。  可以产生程序轨迹(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 也是一个基于字节码的. 收集的程序信息  程序的覆盖信息比例  代码行的命中次数
  • 3. 优缺点 优点  生成报告的格式美,有 HTML,XML 两种形式,使用简便,非常傻瓜化。  使用 Ant 构建项目,可配置性高。  兼容 Junit 的测试用例。 缺点  Ant 的配置颇为繁琐。  这个系统拓展性好像不是很强,在做二次开发时可能会遇到很多麻烦。  我还没有研究出怎样在 Eclipse 下运行,只会在命令行下运行。  使用的学习曲线平坦,开发的学习曲线陡峭。 使用方式 按照模板和手册改写 build.xml,直接 ant 即可。 需要 build.xml 中有一些几个部分。 备忘:我在 Eclipse 中为 Java 配置了外部库,在 build.xml 中添加了一行配置 Junit.jar 的位置 才 ant 成功。 E:Projectcobertura-1.9.4.1examplesbasic>E:Projectapache-ant-1.8.1binant
  • 4. EMMA http://emma.sourceforge.net/ 一个较老(也可以说是成熟)Java 代码覆盖分析工具集。 (我只是看了它的 Sample Reports) 收集的程序信息 一份 XML 报告,包含了所有信息  包数,类数,方法数,文件数,代码行数  类,方法,基本块,代码行的覆盖率 (这份报告中没有具体代码行的覆盖信息,但是 HTML 的报告中有标记,不知道是否能通 过参数配置出来?)
  • 5. 优缺点 优点  支持两种方式获取信息,离线和在线(offline or on the fly)。  输出的格式也比较好用。 缺点  (这份报告中没有具体代码行的覆盖信息,但是 HTML 的报告中有标记,不知道是否
  • 6. 能通过参数配置出来?)  使用的学习曲线平坦,开发的学习曲线陡峭。 使用方法 还没有使用过。 总结 只是弄了今天一天,先总结一些。 Σοφία 初浅感觉如果要做二次开发(例如:开发 Eclipse 插件),使用 Σοφία 来得快一些,我使用 了一次,就大概知道它的工作原理和生命周期。不过它只能处理 Bytecode 不处理 Source Code 就比较遗憾。另外,它可以收集 Trace 信息,这在以后我们拓展 Design Space 比较有帮 助。(我们仅仅在 Bytecode 先做错误定位也何尝不可?) Cobertura 收集到的信息非常全,包括了代码行的运行次数, XML 格式也方便。我以后要是抓覆盖信 息就先想到它。不过,它几乎没有文档,主页有使用指南,开发页面也没有看见文档(大家 找到记得告诉我),要做二次开发估计很难。 EMMA 比较成熟的项目。但是二次开发可能很难,相比 Σοφία 几乎白盒的使用模式, Cobertura 和 EMMA 更像是一种黑盒的工具,配置文件弄好,运行就是了,也不知道它里面做了什么。