ラベル coverage の投稿を表示しています。 すべての投稿を表示
ラベル coverage の投稿を表示しています。 すべての投稿を表示

2016年6月6日月曜日

Codecov の見た目が変わって使いやすくなっていた



Codecov は以前にも紹介したカバレッジレポートサービスです。
ブログズミ: [C++] Codecov でコードカバレッジ
(いつ変わったのかわからないのですが、)ちょっと見た目が変わって使いやすくなっていたので、また紹介したいと思います。

まずは、ダッシュボード。
グラフが表示されるようになりました。


次に、差分表示。
これが一番いいなと思った機能で、前回との Diff 表示とその変更点部分のカバレッジを見ることができます。

これイイです!


さらに、3つの種類のグラフ表示ができます。


Sunbrust

Sunbrust は各ブロックをクリックすると動きます。

Icicle


Grid



最近、カバレッジを見てなかったので、また少し気にするようにしたいと思います。
それでは。

2015年5月25日月曜日

[C++] Codecov でコードカバレッジ

Codecov.io というカバレッジ系のサービスがあったので使ってみました。


Sign Up

Github , GitLab もしくは Bitbucket アカウントでサインアップします。
私の場合は、Github の公開リポジトリを使うので、Github で登録しました。
料金的には、公開リポジトリならば無料で使えます。

詳しくは、Pricing を参照してください。


リポジトリ追加
サインアップすると以下のような画面になるので、「Add your first repo」から追加したいリポジトリを選択します。

リポジトリを追加すると下のような表示が出ます。

トークンが表示されますが、今回は Travis-CI と連携させるので使いません。
次に設定の方を説明します。

Travis-CI の設定
設定の仕方は、上記画面の「Read our guides」をクリックすると開くガイドページに説明があります。
C/C++ のガイドもあるので、そのとおりに設定するだけです。
https://codecov.io/guide#c

C++ の場合、-coverage オプション付きでビルドして、gcov を実行した後に以下のコマンドを実行するだけです。
bash <(curl -s https://codecov.io/bash)
コマンドを curl で取得して実行するだけなのは、楽でイイですね!

iutest の場合
早速、iutest で試してみました。( iutest は自作の C++ テスティングフレームワーク です。 )
どういう設定をしたかは、.travis.yml と test/GNUMakefile を見てください。

計測結果はこちらから見れます。
https://codecov.io/github/srz-zumix/iutest?ref=master



現時点では、テストコードのカバレッジまで含まれてしまってますが、include ディレクトリに限れば Coveralls とほぼ同等の数値が取れてます。
フィルタリングとかはそのうち対応したいと思います。

Chrome Extension
Codedov には Chrome 拡張が用意されています。

これをインストールすると、Github に Codecov で集計したカバレッジが表示されるようになります。



バッジ/グラフを付ける
さて、ここまでできたら他のサービスと同様にバッジを付けたいですよね。
もちろん、Codecov でもバッジを付けることができます。

Features をクリックすると以下のようなメニューが出ます。

Badge という項目があるのでそこを開くと、バッジのフォーマットがそれぞれのスタイルごとに出ま。あとはこれを Readme なりに貼り付けるだけで OK です。


また、バッジの他に推移グラフも同様に付けることができます。
Features の Graph の項目を開くと、以下のようなページが開くのでバッジと同じようにテキストをコピーして貼り付けるだけで、グラフが表示できるようになります。



最後に
Codecov にはまだ他にも機能があります。詳しくは https://codecov.io/#features を見てください。

他のカバレッジ系 CI サービスだと Coveralls があります。
Coveralls は以前から iutest のカバレッジを取るために使ってました。その辺はブログにも書いてます。
ブログズミ: [C++] Coveralls でコードカバレッジ - その1
ブログズミ: [C++] Coveralls でコードカバレッジ - その2
個人的には、Coveralls の方が見やすいな~と思うのですが、 Codecov は導入が簡単だったのと Github へのプルリクエストコメント機能など多機能であることがメリットかな~と思いました。
Coveralls との比較は https://codecov.io/#features の下の方にも載ってます。

以上。

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

2014年2月10日月曜日

[C++] Coveralls でコードカバレッジ

iutestCoveralls の利用を始めました。

導入は簡単にできたのですが、テストコードのカバレッジだけ集計されて、本来の目的であるフレームワーク側のカバレッジが集計されず、あーだこーだやったので備忘録として書き残しておきます。


導入までに関しては以下を参考にしました。
Objective-C の記事はすぐ見つかったけど c++ の記事は少ないねぇ
はじめに
はじめに iutest の構成を説明しておきます。

  • iutest
    • doc
    • include
    • projects
    • samples
    • src
    • test
    • tools

test フォルダにテストがあり、そちらでテストを実行し gcov を出力します。
カバレッジ対象は include ディレクトリ以下のソースファイルです。

root
まず、iutest/test ディレクトリで cpp-coveralls を呼び出していたため、ルートディレクトリが iutest/test になっていました。このため、iutest/include のソースファイルへのパスが "../include/iutest_***.hpp" のようになります。 cpp-coveralls では、../ で始まるパスのソースファイルは無視するようになっているため、集計されていませんでした。

修正
iutest ディレクトリ(プロジェクトのトップ)で cpp-coveralls を呼ぶように修正

UnicodeDecodeError: 'utf8' codec can't decode byte ...
ソースファイルを utf8 に変換しようとして失敗しています。
cpp-coveralls には --encoding オプションがあり、それで別の文字コードを指定することが可能です。
ただ、iutest は UTF8-BOM有り で統一するようにしたので、どこかにそうじゃないファイルがあるようです。。。

修正
Crashes in utf8 decoder · Issue #24 · eddyxu/cpp-coveralls
こちらにも書かれているように、該当のファイルパスを print するようにして(※)問題のファイルを洗い出し、文字コードの変更を行いました。


pip install cpp-coveralls
で cpp-coveralls をインストールすると lib\python2.7\site-packages\coveralls に展開されるので、そこの coverage.py を編集して print を仕込む。

テストコードの除外
cpp-coveralls で任意のファイル/ディレクトリを除外するには、--exclude (-e) オプションを使います。
当初、
coveralls -r ./ -e test
のように除外指定をしていましたが、これだと test/*.gcov ファイルの集計が行われずなにもレポートされませんでした。
やりたいことは test/*.gcov は集計するが、テストコードの *.gcov は集計しないことです。

修正
-e オプションを使用すると *.gcov ファイルの集計まで除外してしまうので、--exclude-pattern (-E) オプションを使います。-E オプションは -e オプションと違い、正規表現が使えます。また、-E オプションでの除外指定は *.gcov ファイルの集計には影響しないようです。
coveralls -r ./ -E ".*/test/.*"

これで
これで目的のカバレッジができました。

これを書いている時点で 80% と低いので、もう少し網羅率を上げて v1.8.1 リリースといきたいところですね。