先日 Coveralls というサービスを知りました。 public なリポジトリであれば、こいつが無料でカバレッジ可視化に使えて便利そうです。
本稿では C++ のコードに対するカバレッジの publish までの作業をつらつらと書いていきますが、 ドキュメント を見る限り他のいくつかの言語にも対応していそうです。
自分は大体下記の手順で Travis CI による CI 対応&カバレッジ生成と、 Coveralls へのカバレッジの publish を行いました。
背景
- 本稿は拙作の趣味プロダクトである、 Apache Traffic Server プラグインである ts_mruby を対象に作業した時の知見に基づいています
- googletest + googlemock を用いたテストコードを(まだ少量だけど... )書いてありました
- 本稿を見ずとも README を見れば大体の流れがわかる気がします
1. まずカバレッジを gcov で出力できるようにする
Coveralls は gcov 形式のカバレッジファイルを要求するので、これを出力できるようにします。
コンパイル時のオプションに -coverage
を付与するとカバレッジ収集のためのファイルが出力されるようになります。
その後テストを実行し、カバレッジを収集したい対象に絞って *.gcov
ファイルを収集する運びになります。
ちなみに自分は常にカバレッジファイルの出力がされるようになるのを回避するため、 configure.ac
に -coverage
を付与するかどうかのオプションを持たせるようにしました
AC_MSG_CHECKING([coverage option])
# --enable-coverage フラグを生やす
AC_ARG_ENABLE([coverage],
[AS_HELP_STRING([--enable-coverage],[generate coverage files])],
[],
[enable_coverage=no]
)
AC_MSG_RESULT([$enable_coverage])
# CXXFLAGS にオプション追加するか判別
if test "${enable_coverage}" = "yes"; then
CXXFLAGS="$CXXFLAGS -coverage"
fi
2. Coveralls にリポジトリ登録
https://coveralls.io/ にアクセスし、 GitHub アカウントで sign up します。ログイン後、 "ADD REPOS" メニューより、カバレッジ収集対象のリポジトリを登録しておきます。
3. cpp_coveralls を導入する
Coveralls にサクッと *.gcov
をアップロードするための便利コマンドを導入しておきます。 pip で導入可能です。
$ pip install cpp-coveralls
4. coveralls コマンドを試す
*.gcov
出力先やソースファイルの配置先ディレクトリの都合、 coveralls コマンドのオプションに配慮する必要が出てきます。
動作確認のための手間に配慮して、 Travis CI からではなく手元の環境で --verbose
や --dryrun
を付けて coveralls コマンドを実行してみると良いと思われます。
また実際に Coveralls に publish してみたい場合は、-t <token>
必要になります。
5. .travis.yml に coveralls コマンドに関する記述を付与する
README に従って after_success:
で実行するのが良いと思われます。 cpp_coveralls の導入もお忘れなく!
6. イイカンジに Coveralls 上でカバレッジを確認する!
ここまで来ると Coveralls 上でカバレッジの確認が行えるようになると思われます。自分がやった例だと下記のような仕上がりになりました。
(うそ・・・私のカバレッジ、低すぎ!??)
https://coveralls.io/builds/7007837
また PullRequest Build も走ってくれるので、そちらで確認するようにしても良いかもです。