Top / Java / jcoverage

概要

jcoverageとは、単体テスト実施時のコードの網羅率など、いわゆるカバレッジを計測するためのツールです。

コードカバレッジツールにもいろいろ方式があるのですが、このjcoverageは

といった方式になっています。よってJUnitで単体テストを実施するときに、元のクラスではなくデバッグを埋め込まれたコードを用いてテスト実施をすることによって、単体テスト実施時のテストの網羅率などを計測することができます。

basic.png

似たようなツールとして、CoberturaやCloverがあるのですが、CoberturaはJDK1.4以上しか動かないっぽい、Cloverはフリーでない、ということを鑑みてとりあえずjcoverageを使ってみました。

このようなツールって、クライアント環境だけならエイヤでやって動くもんなんですけど、サーバサイドだと結構手順がめんどくさいです。。つまりjcoverage,Junit,Cactus,WEBコンテナ,Eclipseなどの開発ツール、を連携させるのがやたらめんどくさい。 で、ようやく動かしかたぼんやりとではあるのですがわかってきたので、メモっておきます。

ダウンロード

http://www.jcoverage.com/gpl-license.html よりダウンロード可能です。GPLとそうでない用があるみたいで、GPL版がこのさきどんなメンテナンスをされていくのかはよくわかりませんが、とりあえずGPL版をダウンロードします。

基礎

準備

まずは基礎の基礎から。しつこいですが、ポイントはコンパイル後、Antタスクなどでデバッグコード埋め込みをしているというところです。つまりコンパイルまでは今までと同じ*1で、そのクラスファイルを動かすのではなくて、デバッグを埋め込んだあとのコードを動かす、ということですね。

やってみます。適当にEclipseでプロジェクトを作成します。そのプロジェクトにダウンロードしてきたファイルを配置して、クラスパスを通しておきます。また、テスト対象クラスとテストケースクラスを作成して下図のように配置しておきます。

01.png

とりあえずここまでで、Eclipse上からJunitを起動することができます。

antタスクの作成

jcoverageにはAntタスクが付属しています。使用するのは主に

instrument
デバッグコードをクラスに埋め込むときに使います。
report
出力された収集結果ファイル(jcoverage.ser)からレポート(html他)を出力します。
merge
複数の結果ファイルをマージしてひとつのファイルにします*2

です。

全てAntでやる場合は、ソースコードのコンパイル -> instrumentタスクの実行 -> Junitの実行 -> レポーティング となるわけですね。そのようなbuild.xmlを以下に添付します。

filebuild.xml
filebuild.properties

ここまででとりあえず実行してみます。Eclipse上からAntを実行しました。実行した内容は

ant clean javac instrument

です。実行結果は以下のようになりました。

Buildfile: d:\xxxxxx\JCoverageClient\build.xml
init:
     [echo] Apache Ant version 1.6.2 compiled on July 16 2004
     [echo] Java ver. 1.3
     [echo] JCoverageTest
     [echo] BaseDir: D:\xxxxxx\JCoverageClient
     [echo] 日付:2005/09/03
clean:
   [delete] Deleting directory D:\xxxxxx\JCoverageClient\classes
   [delete] Deleting directory D:\xxxxxx\JCoverageClient\instrumented-classes
   [delete] Deleting directory D:\xxxxxx\JCoverageClient\document\JCoverageClient
javac.src:
    [mkdir] Created dir: D:\xxxxxx\JCoverageClient\classes
     [copy] Copied 1 empty directory to 1 empty directory under D:\xxxxxx\JCoverageClient\classes
    [javac] Compiling 1 source file to D:\xxxxxx\JCoverageClient\classes
test.javac:
    [javac] Compiling 1 source file to D:\xxxxxx\JCoverageClient\classes
javac:
instrument:
[instrument] jcoverage 1.0.5 copyright (c)2003 jcoverage ltd. http://jcoverage.com/
[instrument] jcoverage is licensed under the GNU General Public License
[instrument] jcoverage comes with ABSOLUTELY NO WARRANTY
[instrument] instrumenting 2 classes to D:\xxxxxx\JCoverageClient\instrumented-classes
   [delete] Deleting directory D:\xxxxxx\JCoverageClient\classes
    [mkdir] Created dir: D:\xxxxxx\JCoverageClient\classes
     [copy] Copying 2 files to D:\xxxxxx\JCoverageClient\classes
BUILD SUCCESSFUL
Total time: 6 seconds

Antで実行するタスクもあるのですが、とりあえず、Eclipseから実行。。

以上で完成です。実行結果は以下のようになりました。

result01.png

カバレッジの一覧

result02.png

詳細

ちなみに、テスト対象のクラスとテストクラスは以下の通り。

Antの注意点

こんな障害に巻き込まれました。

Servletなどサーバサイド、J2EE環境で使う。

疲れました。。。また書きます。

関連リンク


この記事は

選択肢 投票
おもしろかった 7  
そうでもない 0  

Top / Java / jcoverage

現在のアクセス:43522


*1 Antで一緒にやっちゃってももちろんよい
*2 サーバサイドのときには必ず使う。後述
*3 実はRADでやってるからこんなになっちゃうのかな?。こんなので、ホントにつかえんのか???

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS