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 を用意。
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

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

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

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

とりあえずClose

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

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

ソースコードに色づけされた形で、カバレッジが表示される。
緑色は、実行されたブロック、
赤色は、実行されなかったブロック。
のちほど詳しく説明するが、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の動作原理を説明する。
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

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

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

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

とりあえずClose

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

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

ソースコードに色づけされた形で、カバレッジが表示される。
緑色は、実行されたブロック、
赤色は、実行されなかったブロック。
のちほど詳しく説明するが、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の動作原理を説明する。