gcovによるステートメントカバレッジ計測
GCCコンパイラに付属しているgcovというツールを使用し、ステートメントカバレッジ(C0カバレッジ)を計測する方法を紹介します。
ステートメントカバレッジとは、すべての実行可能命令のうち、テストで実行された命令の割合です。
■環境
OS:Linux
言語:C/C++
コンパイラ:GCC 3.4.6
■手順(カバレッジ測定)
以下の簡単なプログラムのカバレッジを測定してみます。
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdio.h> int main() { int num = 1; if ((num % 2) == 0) { printf("%d is even.\n", num); } else { printf("%d is odd.\n", num); } } |
- プログラムをオプション付きでコンパイルする
1$ gcc -fprofile-arcs -ftest-coverage test.c -o test.out - コンパイルしたファイルを実行する
12$ ./test.out1 is odd. - gcovでカバレッジデータを読み込む
1234$ gcov test.gcdaFile `test.c'Lines executed:80.00% of 5test.c:creating `test.c.gcov
この例では全体の80%の命令が実行されていることがわかります。
また、同じディレクトリに出力されている「test.c.gcov」にどの命令が実行されたのかが記録されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ cat test.c.gcov -: 0:Source:test.c -: 0:Graph:test.gcno -: 0:Data:test.gcda -: 0:Runs:1 -: 0:Programs:1 -: 1:#include <stdio.h> -: 2: function main called 1 returned 100% blocks executed 67% 1: 3:int main() { 1: 4: int num = 1; -: 5: 1: 6: if ((num % 2) == 0) { #####: 7: printf("%d is even.\n", num); -: 8: } else { 1: 9: printf("%d is odd.\n", num); -: 10: } -: 11:} |
■手順(HTMLで表示)
lcovを使うと、カバレッジの計測結果を視覚的にわかりやすく表示できます。
- 以下からlcovをダウンロードする
http://ltp.sourceforge.net/coverage/lcov.php - 環境にlcovをインストールする
123$ tar xzvf lcov-1.14.tar.gz$ cd lcov-1.14$ make install - test.gcdaと同じディレクトリでlcovを実行する
1$ lcov -c -d . -o lcov.info - genhtmlを実行する
1$ genhtml lcov.info -o ./info -
infoディレクトリ内のindex.htmlをブラウザで開く
以下のように実行された命令、されていない命令が色分けされて表示されます。
◆WEB会議/セミナーシステム『Szia』
https://www.ois-yokohama.co.jp/szia/
◆サーバサイドで動作するミドルウェア『ReDois』
https://www.ois-yokohama.co.jp/redois/wp_redois/