5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++ のコードを Travis CI + Coveralls でカバレッジ生成する

Last updated at Posted at 2016-07-14

先日 Coveralls というサービスを知りました。 public なリポジトリであれば、こいつが無料でカバレッジ可視化に使えて便利そうです。
本稿では C++ のコードに対するカバレッジの publish までの作業をつらつらと書いていきますが、 ドキュメント を見る限り他のいくつかの言語にも対応していそうです。

自分は大体下記の手順で Travis CI による CI 対応&カバレッジ生成と、 Coveralls へのカバレッジの publish を行いました。

背景

  • 本稿は拙作の趣味プロダクトである、 Apache Traffic Server プラグインである ts_mruby を対象に作業した時の知見に基づいています
  • googletest + googlemock を用いたテストコードを(まだ少量だけど... :smiley: )書いてありました
  • 本稿を見ずとも 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 上でカバレッジの確認が行えるようになると思われます。自分がやった例だと下記のような仕上がりになりました。
(うそ・・・私のカバレッジ、低すぎ!??)

image
https://coveralls.io/builds/7007837

また PullRequest Build も走ってくれるので、そちらで確認するようにしても良いかもです。

image

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?