2014年2月17日月曜日

[C++] Coveralls でコードカバレッジ - その2

Travis CI + Coveralls でカバレッジ計測を使い始めたのですが、自分が思ってた以上にカバレッジ率が低くて 恥ずかしい/// って感じだったのですが、どうやら通っているはずのコードが通っていないと判断されているようでした。

原因は gcov のバージョンが古いことのようで、Travis でデフォルトで使える gcov は version 4.6.3 なのですが、
以下のログからも分かるように、同じファイルでも相対パスの経路が違うと別ファイルとして認識されるようです。

File '../include/internal/../internal/../iutest_env.hpp'
Lines executed:85.59% of 111
../include/internal/../internal/../iutest_env.hpp:creating 'iutest_env.hpp.gcov'

File '../include/gtest/../internal/../internal/../iutest_env.hpp'
Lines executed:63.54% of 96
../include/gtest/../internal/../internal/../iutest_env.hpp:creating 'iutest_env.hpp.gcov'

そして、出力する .gcov ファイル名は同じなため上書き保存されてしまっていました。
※ Coveralls で表示されるパーセンテージと異なる場合がありますが、それは cpp-coveralls が positive failure に対応しているためです。(これに気づかず Coveralls や cpp-coveralls 側を疑ってしまい時間がかかってしまった…)

-p オプションや -l オプション使えば上書きされることはないですが、後でマージする必要があります。
マージツールもあるようですが、今回はストレートに新しいバージョンの gcov を使うことで対応しました。

.travis.yml に以下を追加。
install:
  # gcc 4.8
  - sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
  - sudo apt-get -qq update
  - if [ "${CXX}" = 'g++' ]; then sudo apt-get -qq install g++-4.8; fi
  - if [ "${CXX}" = 'g++' ]; then sudo update-alternatives --install /usr/bin/gcc  gcc  /usr/bin/gcc-4.8 90; fi
  - if [ "${CXX}" = 'g++' ]; then sudo update-alternatives --install /usr/bin/g++  g++  /usr/bin/g++-4.8 90; fi
  - if [ "${CXX}" = 'g++' ]; then sudo update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-4.8 90;  fi

この修正とテスト追加により、iutestカバレッジが 91% にまでなりました。
バッチがみどりになった~

そして、カバレッジ上げようとテストを見なおしていたらバグを結構潰せました。
いや~やっといてよかった~

※ 執筆時点でのカバレッジ結果なので将来的にパーセンテージが変化することがあります。
最新の情報は github へ > https://github.com/srz-zumix/iutest

0 件のコメント:

コメントを投稿