Table of Contents
- 1 Cobertura Pluginとは
- 2 lcov-to-cobertura-xmlとは
- 3 他のC/C++のコードカバレッジ閲覧方法について
- 4 Cobertura Pluginのインストール
- 5 lcov-to-cobertura-xmlのインストール
- 6 ジョブの設定
- 7 ジョブ実行後の画面
1 Cobertura Pluginとは
CoberturaによるコードカバレッジをJenkins上で閲覧するプラグインです。
CebratureはJavaのコードカバレッジレポートツールです。HTML出力をサポートしております。Cobrtura Pluginを用いることでビルド毎のコードカバレッジを記録することができ、ビルド毎のコードカバレッジの偏移を把握することができます。
2 lcov-to-cobertura-xmlとは
lcovの出力結果をCoberturaの形式に変換するpythonスクリプトです。
lcovはgcovのグラフィカルなフロントエンドツールです。
C/C++コードカバレッジレポートツールのgcovの結果をグラフィカルに閲覧することができます。
lcov単体でもHTML出力をサポートしておりますが、Jenkinsと連携できるCoberturaの形式に変換する為にlcov-to-cobertura-xmlを用います。
2.1 lcov-to-cobertura-xmlの使い方
以下の手順でCobertura用データを作成します。
1. CFLAGSやCXXFLAGSに-coverageオプションを付けてプログラムをビルド2. プログラムを実行してgcov用データ出力3. lcov用データ出力4. lcov-to-cobertura-xmlでCobertura用データに変換
3 他のC/C++のコードカバレッジ閲覧方法について
Cobertura Pluginとlcov-to-cobertura-xmlを用いる方法以外にもCobertura Pluginとgcovrを用いる方法と、HTML Publisher Pluginとlcovを用いる方法があるらしいのですが、上手く動作しませんでした。
3.1 Cobertura Pluginとgcovrの問題点
gcovrのxml出力結果をJenkinsのCobertura Pluginに読み込ませることで、Jenkins上でコードカバレッジを閲覧できます。
gcovrはソースツリーのパスの追跡が上手くできておらず、ソースコードの参照ができません(ひとつのディレクトリ直下に全てのソースコードがあるような場合は問題ないようなのですが)。
コードカバレッジが減少した場合にソースコードの実行パスが見れないので困ります。
3.2 HTML Publisher Pluginとlcovの問題点
lcov(genhtml)のhtml出力結果をJenkinsのHTML Publisher Pluginに読み込ませることで、ソースコードのカバレッジを閲覧できます。
あくまでhtml出力結果のリンクが生成されるだけで、コードカバレッジの履歴を残すことができません(ビルド毎のコードカバレッジのグラフが表示できない)。
ビルド毎のコードカバレージの差分が分かりにくい為、繰り返しテストを実行できるJenkinsのメリットに合いません。
4 Cobertura Pluginのインストール
Jenkinsのプラグイン制御画面からインストールします。
Jenkinsの管理 -> プラグインの管理 -> 利用可能
5 lcov-to-cobertura-xmlのインストール
lcov_coberturaというpythonスクリプトをダウンロードします。
$ wget chmod a+x lcov_cobertura.py$ sudo cp lcov_cobertura.py /usr/local/bin/$ rm -f lcov_cobertura.py
setup.pyを用いてシステムにインストールした場合、lcov-to-cobertura-xmlが提供するpythonインターフェースを自身で作成したpythonスクリプトにて利用できるようになります。
6 ジョブの設定
6.1 ビルド手順の追加
ビルド手順の追加にて、「シェルの実行」を選択します。
ソースコードを-coverageオプションを付けてビルドします。
# Clean filesmake clean# Run gcc with -coverage optionmake gcov
プログラムを動作させます。
# Run program for code coverage./myprog
lcovでgcov用データを収集して、lcov用データを作成します。
lcov –removeで一度作成したlcov用データから自分が追跡しないデータを排除します。私の環境では、/usr/include以下のファイルを排除してます(C/C++標準ライブラリのコードカバレッジ測定は目的ではないので)。
# Run lcov and output to ‘lcov’ directorymkdir lcovlcov -c -d . -o lcov/coverage.infolcov –remove lcov/coverage.info “*/usr/include/*” -o lcov/coverage.info
lcov_cobertura.pyでlcov用データをCobertura用データに変換します。
# Run lcov_cobertura.py and output to ‘lcov’ directorylcov_cobertura.py lcov/coverage.info -b `pwd` -o lcov/coverage.xml
6.2 ビルド後の処理
ビルド後の処理の追加にて、「Cobertura カバレッジ・レポートの集計」を選択します。
Cobertura XMLレポートパターンにCobertura用データのパスを指定します。
7 ジョブ実行後の画面
ジョブを実行するとコードカバレッジのサマリーが表示されました。
ソースコードレベルで実行されたパスを確認できます。