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

gcov

GCCコンパイラに付属しているgcovというツールを使用し、ステートメントカバレッジ(C0カバレッジ)を計測する方法を紹介します。

ステートメントカバレッジとは、すべての実行可能命令のうち、テストで実行された命令の割合です。

gcov

■環境

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);
    }
}

 

  1. プログラムをオプション付きでコンパイルする
    $ gcc -fprofile-arcs -ftest-coverage test.c -o test.out
  2. コンパイルしたファイルを実行する
    $ ./test.out
    1 is odd.
  3. 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を使うと、カバレッジの計測結果を視覚的にわかりやすく表示できます。

  1. 以下からlcovをダウンロードする
    http://ltp.sourceforge.net/coverage/lcov.php

  2. 環境にlcovをインストールする
    $ tar xzvf lcov-1.14.tar.gz
    $ cd lcov-1.14
    $ make install
    
  3. test.gcdaと同じディレクトリでlcovを実行する
    $ lcov -c -d . -o lcov.info
  4. genhtmlを実行する
    $ genhtml lcov.info -o ./info
  5.  infoディレクトリ内のindex.htmlをブラウザで開く
    以下のように実行された命令、されていない命令が色分けされて表示されます。

 


◆WEB会議/セミナーシステム『Szia』
https://www.ois-yokohama.co.jp/szia/

◆サーバサイドで動作するミドルウェア『ReDois』
https://www.ois-yokohama.co.jp/redois/wp_redois/

オリエンタルインフォーメイションサービス(OIS)

\ 最新情報をチェック /