23 Sep 2012, 05:37

Cppcheckで静的解析して、Jenkinsで表示してみる。

C/C++用の静的解析ツール、cppcheckを使って、静的コード解析をして、

解析結果をJenkinsで表示する方法を調べてみた。

CppCheckのダウンロード・インストール

以下の公式サイトから入手する。

http://cppcheck.sourceforge.net/

Cygwiinからでも入手ができた。

Cygwin使いの自分は、cygwin の setup経由で入手。

image

CppCheckを実行してみる

公式マニュアルはココ( var 1.56)

コマンドラインから、以下のコマンドを実行する。

[text](フアイル単位)

cppcheck –enable=all hogehoge.c

[/text]

[text](フォルダ単位)

cppcheck –enable=all hogehoge

[/text]

[text]

ex.)

C:\mock_study>cppcheck –enable=all src

Checking src/numlib.c…

12 files checked 22% done

Checking src/sample.c…

22 files checked 100% done

Checking usage of global functions..[/text]

XML形式で結果を出力するには、窶肺ml オプションをつける。

( –xmlツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀツꀀ Write results in xml format to error stream (stderr).)

これで、標準エラーでXML形式の結果が出力されるので、

リダイレクトでファイルに記録すればよい。

[text]C:\mock_study>cppcheck –enable=all 窶度ml srcツꀀ 2>cppcheck_result.xml[/text]

( 2> で標準エラーをリダイレクトできるんですねー、知らなんだ ; ~_ ~ ; )

CppCheck Plugin を Jenkinsに入れて、静的コード解析結果をみる

Cppcheck PluginをJenkinsにインストールする。
[Jenkinsの管理] > [プラグインの管理] から Cppcheck Pluginを選択して、インストール。

プロジェクトの[設定] > [ビルド] で、cppcheckのコマンドを追加する。

[ビルド後の処理] に [Publish Cppcheck results]

という項目が追加されているので、選択。

Cppcheck report XMLsという項目に、xmlファイル名を追加する。image

実行結果

Web画面でエラーが確認できる。

クリックすれば、ソースの該当箇所まで飛んでくれる。便利。

image

動作環境

  • Windows 7
  • Cppcheck 1.56
  • Cppcheck Plugin 1.11

参考ページ

22 Sep 2012, 22:20

C言語でのgcovカバレッジ計測結果をJenkinsで表示させる

C言語でのカバレッジ計測結果をJenkinsで表示させる方法について調べてみた。

2つの方法があるみたい。

  1. lcov + HTML Publisher plugin で出力

    Hudsonの使い方21 Hudsonでユニットテスト網羅率測定(C言語)

  2. gcovr + Coberturaプラグイン で

    Jenkinsでテストとカバレッジの結果をグラフ表示できるようにする

    Jenkins を iOS アプリ開発に導入してみた (gcov編)

今回は2番目の方法で試してみた。 流れとしては以下のとおり。

C言語のプロダクトコード

↓(gcov)

カバレッジデータ

↓(gcovrでCobertura形式のXML出力)

XMLカバレッジ結果

↓(Jenkins Cobertura Plugin)

Jenkinsて結果出力

C言語の定番カバレッジツール gcov でカバレッジを計測する

まずはC言語の定番カバレッジツール gcov でカバレッジを計測してみる。

Cygwinではデフォルトでgcovコマンドがある。

gcovを使うためには、コンパイルをするときに、以下のコンパイルオプションをつける必要がある。

-fprofile-arcs -ftest-coverage

Makefileをいじるときは、以下を追加すればよい。

CFLAGS += -fprofile-arcs -ftest-coverage
LDFLAGS += -fprofile-arcs

すると、.gcno というファイルができる。 実行ファイルを実行すると、.gcdaというファイルができる。

これが、カバレッジ計測結果データ。次に、これをXML形式に変換する。

gcovrでXML形式のカバレッジ結果を出力する

gcovrとは、gcovでの出力結果を編集して出力してくれるツール。

Jenkinsで結果を見るにはCoberturaと呼ばれるXMLフォーマットに変換する必要がある。

まずは、以下からダウンロードする。 公式のページはココPythonで記述されたコードなので、適切なことろに保存する。(/usr/local/bin/とか)

gcovr

コマンドラインからだと、以下のコマンドで取得

wget https://software.sandia.gov/trac/fast/export/2799/gcovr/trunk/scripts/gcovr

保存したら、実行権限を与える。

chmod u+x gcovr

gcovrは以下の形式で実行する。

gcovr --xml --output=(出力ファイル名).xml (ディレクトリ名)

サンプル

gcovr --xml --output=gcovr_result.xml src/  

これで、XMLファイルができた。次はこれをJenkinsで出力する。

Cobertura PluginでJenkins上でカバレッジ結果を見る

まずは、Cobertura PluginをJenkinsにインストールする。

[Jenkinsの管理] > [プラグインの管理] から Cobertura Pluginを選択して、インストール。

カバレッジ出力するための設定は、[設定] > [ビルド] で、gcovrのコマンドを追加する。

ちなみに、Windowsバッチコマンドだと以下のようなコマンドを追加したら動いた。 gcovrの前にpython2.6.exeを入れると動くが、 gcovrだけだったり、python gcovrだと動作しなかったりするのがナゾ。

python2.6.exe gcovr --xml --output=gcovr_result.xml src/

[ビルド後の処理] に [Cobertura カバレッジレポートの集計] という項目が追加されているので、選択。

Cobertura XMLレポート パターンという項目に、xmlファイル名を追加する。

(カスタムワークスペースを設定していない場合はパスも込で)

image

これで、ビルドを実行すればカバレッジが表示される。

カバレッジ表示結果

プロジェクト画面に[カバレッジレポート]という画面が現れる。

カバレッジはここで見ることができる。

image