gcovによるステートメントカバレッジ計測

GCCコンパイラに付属しているgcovというツールを使用し、ステートメントカバレッジ(C0カバレッジ)を計測する方法を紹介します。
ステートメントカバレッジとは、すべての実行可能命令のうち、テストで実行された命令の割合です。
■環境
OS:Linux
言語:C/C++
コンパイラ:GCC 3.4.6
■手順(カバレッジ測定)
以下の簡単なプログラムのカバレッジを測定してみます。
#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); } }
- プログラムをオプション付きでコンパイルする
$ gcc -fprofile-arcs -ftest-coverage test.c -o test.out
- コンパイルしたファイルを実行する
$ ./test.out 1 is odd.
- gcovでカバレッジデータを読み込む
$ gcov test.gcda File `test.c' Lines executed:80.00% of 5 test.c:creating `test.c.gcov
この例では全体の80%の命令が実行されていることがわかります。
また、同じディレクトリに出力されている「test.c.gcov」にどの命令が実行されたのかが記録されています。
$ 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をインストールする
$ tar xzvf lcov-1.14.tar.gz $ cd lcov-1.14 $ make install
- test.gcdaと同じディレクトリでlcovを実行する
$ lcov -c -d . -o lcov.info
- genhtmlを実行する
$ 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/