ブログ 約3分

Cppcheckを最大限に活用する

Share this article
Cppcheckを最大限に活用する

静的コード解析は、ソフトウェアのソースコード内の欠陥を検出するプロセスです。静的解析ツールは、一般的なコーディングミスを検出するのに役立ちます。それらを使用する利点は次のとおりです:

  • ソースコードの可読性と保守性を高める。
  • 実行時の予期しない動作を防ぐ。
  • 実行を最適化する。
  • コードのセキュリティを高める。

C++の世界では、CppcheckはC++コードベースの問題を検出する最も一般的なツールです。Cppcheckの結果を確認する方法はいくつかあります。

  • XML形式:CppcheckはXMLファイルを生成でき、それを使ってカスタマイズしたHTMLレポートを作成したり、別のツールで解析結果を確認したりできます。
  • HTML形式:HTMLレポートは、Cppcheckの問題を分かりやすく提示する方法です。サーバーに保存して、チームで共有できます。
  • IDEプラグイン:IDEから直接問題を確認できるCppcheckプラグインが多数用意されています。

数年前、私たちは CppDepend に、他のツールの結果をインポートしてCppDependからクエリできる機能を追加しました。Cppcheckのリード開発者であるDaniel氏に、彼のツールをCppDependへ統合してよいか尋ねたところ、「1つのツールを使うより、複数のツールを組み合わせた方がよい」と回答があり、彼のツールを組み込むことに問題はありませんでした。

CppDependがCppcheckユーザーに提供する可能性を見ていきましょう:

1. CQLinqで問題をクエリする

CQLinqを使用すると、問題をデータベースのようにクエリできます。たとえば、すべてのCppcheckの問題を取得できます:

cppcheck2

または、最も頻繁に発生している問題を取得できます:

cppcheck3

問題が最も多いクラスを特定するのも有用です:

cppcheck4

前のクエリは有用ですが、どのクラスの品質が最も低いのかを正確には示しません。考慮すべきもう1つの有用なメトリクスはNBLinesOfCodeです。前のクエリを変更して、問題数とNBLinesOfCodeの比率を計算できます。

cppcheck6

問題を含む、最も頻繁に使用されるメソッドを検索することもできます。このようなメソッドのバグは、高い優先度で解決すべきです。

cppcheck12

2. 問題のトレンドを生成する

プロジェクトに問題があること自体は珍しくありません。どのプロジェクトにも、解決すべき多くの問題があり得ます。しかし、プロジェクトの品質傾向は確認する必要があります。プロジェクトの変更と進化に伴って問題数が増加するのは、悪い兆候だからです。CppDependには、トレンドチャートを作成するためのトレンド監視機能があります。

トレンドチャートは、解析中に時系列で記録されたメトリクス値から構築されます。デフォルトで50を超えるトレンドメトリクスが利用可能で、独自のトレンドメトリクスも簡単に作成できます。

このトレンドチャートを使うと、Cppcheckの問題の推移を監視できます:

cppcheck7

3. カスタムHTMLレポートを生成する

CppDependでは、いくつかのCQLinqクエリを一覧表示する追加のレポートセクションをHTMLレポートへ追加できます。CQLinq Query Explorerパネルでは、レポート対象のCQLinqグループがオレンジ色の長方形で囲まれます。

cppcheck10

HTMLレポートでは、これらの追加セクションにメニューからアクセスできます:

cppcheck11

4. Cppcheckをビルドプロセスへ統合する

CppDependには、Critical CQLinq Ruleという概念があります。Critical Ruleは、決して違反してはならない優先度の高いルールを定義する手段です。Critical Ruleを使用すると、重大なルール違反が発生したときにビルドプロセスを失敗させられます。

Critical Ruleとは、 Critical Rule フラグがオンになったCQLinqルールです:

ビルドプロセス中にCritical Ruleに違反すると、プロセス CppDepend.Console.exe はゼロ以外の終了コードを返します。この動作を利用して、Critical Ruleに違反した場合にビルドプロセスを失敗させられます。

特定の種類のCppcheck問題が見つかった場合にビルドを失敗させるCppcheckのCritical Ruleを、簡単に定義できます。

概要

CppDependは他の静的解析ツールにも開かれており、 こちらで説明しているように、カスタマイズしたツールも簡単に組み込めます。これにより、CppDependのすべての機能を使って、有名なC/C++静的解析ツールの結果をより詳しく調べられます。

優れたツールをCppDependへ組み込むことを許可してくれたDaniel氏に、心から感謝します。

Share this article