很久以前聽到過code coverage這個詞。但總是在我腦海中一閃而過,Ignore掉的。
最近看到有一個opensource 的 EMMA,所以就Down下來玩玩。
看了它的Quick Start發現可以配合JUnit之類的測試工具執行GUI程序。
把它自帶的程序試了一下,它會產生記錄顯示剛才的操作執行了多少多少部分的代碼。
覺得蠻好玩的,就自己試了一下:

環境: EMMA v2.0,build4127
              OS Windows 2003 server
              JDK v1.4.2


EMMA提供兩種使用模式,一個是指令模式(command mode)另外一個是使用Ant。

將下載下來的JAR(emma.jar&emma_ant.jar)復制到你classpath所在的JRE目錄
 ex.E:\Program\J2SDK\jre\lib\ext
然后在命令行下輸入Java emmarun,會看到它的使用方法和如何配參數。如果沒看到,那
說明沒有把剛才兩個Jar包放在classpath中。

隨后寫一個Hello world程序

1public class HelloWorld {
2    public HelloWorld() {
3        System.out.println("Constructor");
4    }

5    public static void main(String[] args) {
6        new HelloWorld();
7        System.out.println("Hello World!");
8    }

9}

編譯HelloWorld.java
 javac -d classes -g HelloWorld.java
運行HelloWorld
 java -cp classes HelloWorld
現在加入EMMA
 java emmarun -cp classes HelloWorld
可看到類似如下輸出:
Constructor
Hello World!
EMMA: writing [txt] report to [F:\我的文檔\EMMA\coverage.txt] ...
你可以看一下執行后在你目錄中的coverage。txt文件
內容類似如下:
[EMMA v2.0.4217 report, generated Thu Oct 28 09:09:45 CST 2004]
-------------------------------------------------------------------------------
OVERALL COVERAGE SUMMARY:

[class, %] [method, %] [block, %] [line, %] [name]
100% (1/1) 100% (2/2) 100% (14/14) 100% (6/6) all classes

OVERALL STATS SUMMARY:

total packages: 1
total classes: 1
total methods: 2
total executable files: 1
total executable lines: 6

COVERAGE BREAKDOWN BY PACKAGE:

[class, %] [method, %] [block, %] [line, %] [name]
100% (1/1) 100% (2/2) 100% (14/14) 100% (6/6) default package
-------------------------------------------------------------------------------

這些數據蠻難看懂的,不過EMMA提供三種輸出格式 txt,html,xml

接下來看看可以加入原代碼的一份html報表。

這樣來執行:
 java emmarun -r html -sp . -cp classes HelloWorld
 //-sp 代表源文件的所在地,我的源文件在當前目錄,故用 "."
執行后你就可以看到EMMA生成了一個叫coverage的目錄。在里面的許多html就是帶源文件的一份報表。如下所示:

t_o_1.jpg

t_o_2.jpg


這份東西還是蠻詳細的,可以看到那些東西或者說那些狀況沒有考慮到的。
至于ant的實現以后要用時在說吧!畢竟這東西好玩歸好玩,暫時還用不上。^_^