Download
最新版はcoverture-20100704.tar.bz2です。リリースノートと過去のリリースはRelease Notesから取得してください。
ライセンス
二条項BSDライセンスです。コピーライトはこちらになります。
必要な構成
ビルドできたプラットフォーム
以下のプラットフォームでビルドを確認しました(i386アーキテクチャのみ)。
- FreeBSD 8.0
- Ubuntu 10.04
- openSUSE 11.2
ビルドに必要なもの
ビルドは次のものに依存しています。
各プラットフォームではそれぞれ次のように準備するのが簡単です。
FreeBSD 8.0
以下のportsをインストールしておきます。
- java/jdk16
- devel/apache-ant
Ubuntu 10.04
次のパッケージをインストールしておきます。
- openjdk-6-jdk
- ant
- ant-optional
openSUSE 11.2
次のRPMをインストールしておきます。
- java-1_6_0-sun-devel-1.6.0.u18-0.1.1
- ant-1.7.1-7.1.noarch
- ant-nodeps-1.7.1-7.1.noarch
実行に必要なもの
実行するには次のものをインストールしておく必要があります。
- Java SE Runtime Environment (JRE) 6
各プラットフォームではそれぞれ次のように準備するのが簡単です。
FreeBSD 8.0
以下のportsをインストールしておきます。
- java/jdk16
Ubuntu 10.04
次のパッケージをインストールしておきます。
- openjdk-6-jre
openSUSE 11.2
次のRPMをインストールしておきます。
- java-1_6_0-sun-1.6.0.u18-0.1.1
ビルドとインストール
次の手順でビルド、インストールします。
% tar jxf coverture-YYYYMMDD.tar.bz2
% cd coverture-YYYYMMDD/
% ant
% su
# ant -Dprefix=path install†
† path
には絶対パス(/usr/local
や/home/foo
など)を指定します。インストールされるファイルは次の通りです。
path/bin/coverture
path/lib/coverture/coverture.jar
設定
環境変数COVERTURE_JVM_OPTIONS
JVMに渡したいオプションがある場合は、環境変数COVERTURE_JVM_OPTIONS
に設定しておきます。
使用方法
引数に指定したgcnoファイルの内容をパースします。gcnoファイルの拡張子をgcda
に変えたファイルが存在すれぱ、そのgcdaファイルもパースします。パースした結果は標準出力にXMLで出力します。
% coverture gcnoファイル... > result.xml
gcnoファイルのリストファイルを--input-file
オプションで指定することもできます。リストファイルは各行がgcnoファイルのパスになっていなければなりません。ファイル名に-
を指定するとリストファイルを標準入力から入力します。
% cat filelist
foo/Bar.gcno
foo/Baz.gcno
...
% coverture --input-file=filelist > result.xml
--gcov
オプションを指定すると、gcov互換のgcovファイルを生成します。gcovファイルはデフォルトでカレントディレクトリに生成しますが、--output-dir
オプションで出力先のディレクトリを変更することもできます。
% coverture --gcov --output-dir=gcov gcnoファイル... > result.xml
生成するgcovファイルのファイル名は、gcnoファイルのパスから拡張子を取り除いたものと、gcnoファイルが参照するソースファイルのパスを##
で連結したものに.gcov
を追加したファイル名になります。ただし、パスの区切りは#
に変換され、パスの成分が..
の場合は^
に変換されます。例えば、foo/bar.gcno
がfoo/bar.c
を参照する場合、生成するgcovファイルのファイル名はfoo#bar##foo#bar.c.gcov
になります。
ソースファイルの文字集合は--source-file-charset
オプションで指定できます。また、出力するgcovファイルの文字集合は--gcov-file-charset
オプションで指定できます。デフォルトでは両方とも現在のロケールの文字集合を使用します。例えば、ソースファイルがEUC-JPでエンコードされていて、gcovファイルをUTF-8で出力したい場合は次のようにオプションを指定してください。
% coverture --source-file-charset=EUC-JP --gcov-file-charset=UTF-8 --gcov ...
XML形式のパース結果は、与えたgcnoファイルと同数のnote要素を含みます。note要素はデフォルトで、そのgcnoファイルのパスでソートした順に並びます。しかし、--no-sort
オプションを指定した場合は、ソートすることなく、与えたgcnoファイルの順にnote要素を出力します。また、--thread
オプションの指定を無視してシングルスレッドで処理します。そのため、OutOfMemoryErrorが発生する場合は--no-sort
オプションを指定することで、XMLファイルを出力できる可能性があります。
使用例
特に意味はありませんが、libpngをFreeBSDで次のようにカバレッジしてみます。まずは、コンパイルして付属のテストを実行します。
% tar jxvf /usr/ports/distfiles/libpng-1.2.32.tar.bz2
% cd libpng-1.2.32/
% ./configure CFLAGS="-ftest-coverage -fprofile-arcs" --disable-shared
% gmake test
covertureでカバレッジ結果を表示してみます。
% ls libpng12*.gcno | coverture --input-file=- --gcov --output-dir=gcov > gcov.xml
libpng12_la-pngpread.gcda: not found.
% grep "source file" gcov.xml
<source file='png.c' executableLines='218' executedLines='116' rate='53.21'/>
<source file='pngerror.c' executableLines='104' executedLines='5' rate='4.81'/>
<source file='pngget.c' executableLines='316' executedLines='100' rate='31.65'/>
<source file='pngmem.c' executableLines='90' executedLines='61' rate='67.78'/>
<source file='pngpread.c' executableLines='654' executedLines='0' rate='0.00'/>
<source file='pngread.c' executableLines='518' executedLines='275' rate='53.09'/>
<source file='pngrio.c' executableLines='21' executedLines='15' rate='71.43'/>
<source file='pngrtran.c' executableLines='1838' executedLines='42' rate='2.29'/>
<source file='pngrutil.c' executableLines='1399' executedLines='473' rate='33.81'/>
<source file='pngset.c' executableLines='507' executedLines='150' rate='29.59'/>
<source file='pngtrans.c' executableLines='209' executedLines='4' rate='1.91'/>
<source file='pngwio.c' executableLines='32' executedLines='16' rate='50.00'/>
<source file='pngwrite.c' executableLines='510' executedLines='219' rate='42.94'/>
<source file='pngwtran.c' executableLines='275' executedLines='14' rate='5.09'/>
<source file='pngwutil.c' executableLines='1070' executedLines='481' rate='44.95'/>
% ls gcov
libpng12_la-png##png.c.gcov libpng12_la-pngrutil##pngrutil.c.gcov
libpng12_la-pngerror##pngerror.c.gcov libpng12_la-pngset##pngset.c.gcov
libpng12_la-pngget##pngget.c.gcov libpng12_la-pngtrans##pngtrans.c.gcov
libpng12_la-pngmem##pngmem.c.gcov libpng12_la-pngwio##pngwio.c.gcov
libpng12_la-pngread##pngread.c.gcov libpng12_la-pngwrite##pngwrite.c.gcov
libpng12_la-pngrio##pngrio.c.gcov libpng12_la-pngwtran##pngwtran.c.gcov
libpng12_la-pngrtran##pngrtran.c.gcov libpng12_la-pngwutil##pngwutil.c.gcov
参考としてgcovで同様にカバレッジしてみます。
% ls libpng12*.gcda | sort | xargs gcov
File `png.c'
Lines executed:53.21% of 218
png.c:creating `png.c.gcov'
File `pngerror.c'
Lines executed:4.81% of 104
pngerror.c:creating `pngerror.c.gcov'
File `pngget.c'
Lines executed:31.65% of 316
pngget.c:creating `pngget.c.gcov'
File `pngmem.c'
Lines executed:67.78% of 90
pngmem.c:creating `pngmem.c.gcov'
File `pngread.c'
Lines executed:53.09% of 518
pngread.c:creating `pngread.c.gcov'
File `pngrio.c'
Lines executed:71.43% of 21
pngrio.c:creating `pngrio.c.gcov'
File `pngrtran.c'
Lines executed:2.29% of 1838
pngrtran.c:creating `pngrtran.c.gcov'
File `pngrutil.c'
Lines executed:33.81% of 1399
pngrutil.c:creating `pngrutil.c.gcov'
File `pngset.c'
Lines executed:29.59% of 507
pngset.c:creating `pngset.c.gcov'
File `pngtrans.c'
Lines executed:1.91% of 209
pngtrans.c:creating `pngtrans.c.gcov'
File `pngwio.c'
Lines executed:50.00% of 32
pngwio.c:creating `pngwio.c.gcov'
File `pngwrite.c'
Lines executed:42.94% of 510
pngwrite.c:creating `pngwrite.c.gcov'
File `pngwtran.c'
Lines executed:5.09% of 275
pngwtran.c:creating `pngwtran.c.gcov'
File `pngwutil.c'
Lines executed:44.95% of 1070
pngwutil.c:creating `pngwutil.c.gcov'
% ls *.gcov
png.c.gcov pngmem.c.gcov pngrtran.c.gcov pngtrans.c.gcov pngwtran.c.gcov
pngerror.c.gcov pngread.c.gcov pngrutil.c.gcov pngwio.c.gcov pngwutil.c.gcov
pngget.c.gcov pngrio.c.gcov pngset.c.gcov pngwrite.c.gcov