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.gcnofoo/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