07

10

コードカバレッジ測定ツール TestCocoon の使い方 その1

2011.07.10(21:41)

コードカバレッジ測定ツール TestCocoonの使い方

TestCocoon - Code Coverage Tool for C/C++ and C#

コードカバレッジ測定ツールとは、プログラムがソースコードの中のどこを通っているかを明らかにするツールである。普通はユニットテストといっしょに使い、対象とするコードのできるだけ多くのところを実行するように、テストを工夫する目的で用いられる。

コードカバレッジ測定ツールは、オープンソースのもの、商用ツールのもの、非常に多く存在していて、できることは似ている。違いはいかに簡単に使えるか、その使い勝手にある。

インストール方法 (Windowsの場合)
(1) C/C++コンパイラは、別途いれておく。TestCocoonは、cygwinのgccやVisual StudioのVisual C++などいろいろサポートしている。ソースコードを用意し、コンパイル、実行できることを確認しておく。以下cygwinを使う場合で説明する。

(2) ダウンロード
http://www.testcocoon.org/
の左側 Downloadより。

(3) 普通にインストールすると
C:\Program Files\TestCocoon
にインストールされる。

これで終わり。インスーラが自動的にパスに
/cygdrive/c/Program Files/TestCocoon
を追加してくれる。

さっそく使ってみる。
Cソースの sample1.c を用意。

#include <stdio.h>
#include <stdlib.h>
#include "sample1.h"

#define true 1
#define false 0
#define bool int

bool isOdd(int num)
{
if (num % 2 == 0) {
return true;
} else {
return false;
}
printf("isOdd is called \n");
return false;
}

int main(int argc,char** argv)
{
int num = 2;
bool ret = isOdd(num);
printf("num,result = %d,%d \n",num,ret);
return 0;
}


Cygwinのシェルを起動して、
gccでコンパイルできることをまず確認
$ gcc -c sample1.c

gccをcsgccに置き換え、--cs-onというオプションを加えて起動
$ csgcc --cs-on -c sample1.c

この中で、ソースコード情報ファイルができ、gccが起動されて sample1.o ができる。
ソースコード情報ファイルは、csmesという拡張子。
$ ls *.csmes
sample1.csmes ★1
sample1.o.csmes

リンクしてexeを作る。この中でgccが呼ばれてリンクが実行される。
$ csgcc -o sample1 sample1.o

できたexeを実行すると、カバレッジファイルができる。
$ sample1.exe
num,result = 2,1

カバレッジファイルは、csexeという拡張子でできている。
$ ls *.csexe
coverage.csexe  ★2

カバレッジファイルは、存在しなければ新規生成され、存在すれば前回のものにappendされる。その理由は後述する。

ここまででカバレッジを収集する作業は終わり、次にこれをブラウザで読み込む。

カバレッジブラウザを起動する。
プログラム - TestCocoon - CoverageBrowser または
C:\Program Files\TestCocoon\coveragebrowser.exe

tc1.png
上部一番左のボタンで ソース情報ファイル★1を読み込む

tc2.png
上部左から2番目のボタンで カバレッジファイル★2を読み込む

tc3.png
赤いところを指定して、Importボタンを押す

tc4.png
とりあえずClose

tc5.png
左側のソースウィンドウで、見たいソースをダブルクリック

tc6.png
真ん中にソースが表示されるので、見やすいようにウィンドウを調整

tc7.png
ソースコードに色づけされた形で、カバレッジが表示される。

緑色は、実行されたブロック、
赤色は、実行されなかったブロック。

のちほど詳しく説明するが、TestCocoonは、条件判断があるところ、分岐があるところ、returnがあるところで、かつ実行する可能性があるところしか、通ったかどうかを表示しない。isOdd関数の最後のreturnは絶対に実行されないため色はついていない。

また、TestCocoonは、ラインカバレッジと呼ばれる、行単位で通ったかどうかは表示しない。なぜならば、C/C++言語では、1行に多くの文を書くことが出来、その場合、その行を通ったといっても、その行の中のどこの文を実行したかがわからないからで、そんなプログラムのラインカバレッジをとっても意味がない、と考えたからである。

なお、Visual Studioでも簡単に使える。Visual Studion 2008の場合は以下のように一度設定しておけば使える。詳しくはマニュアルでC/C++ Compiler Supportの章を参照。
(1) ツール - オプション
プロジェクト および ソリューション
VC++ディレクトリ
の先頭に、$(TESTCOCOON)\visualstdio
のエントリーを加える。
(2) ブラウザで太字になっている自プロジェクトを選択して
右クリック - プロパティ
C/C++コマンドラインに --cs-on というオプションを追加する。

その2では、TestCocoonの動作原理を説明する。

コメントの投稿

非公開コメント

プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示