CppDependとSonarQubeはどちらも、C/C++コードの問題を検出するルールベースのシステムを提供する静的解析ツールです。ただし、CppDependのデフォルトルールセットは、 重複がほとんどありません 。
基本的に、SonarQubeのルールはメソッド内部で何が起こるか、つまりコードフローの解析に優れています。一方、CppDependのルールの基盤となるCppDependコードモデルは、OOP、依存関係、メトリクス、破壊的変更、ミュータビリティ、命名などの高レベルな領域を360°見渡せるように最適化されています。
具体的には、SonarQubeのルールはnullになる可能性のある参照などの問題について警告できます。一方、CppDependは過度に複雑なクラスやコンポーネントについて警告し、コードをよりクリーンで保守しやすくするためのリファクタリング方法について助言できます。CppDependのルールシステムをユニークにしているもう一つの点は、 カスタムルールの書きやすさです。CppDependでは、ルールはコード品質専用のコードモデルをクエリするLINQクエリであり、Visual Studioでライブ編集され、編集中にライブでコンパイルおよび実行されます。具体的には、以下のコードは完全に機能するルールです。これ以上シンプルにできるでしょうか?
// <Name>クラスはIで始まらなければなりません</Name>
warnif 件 > 0
アプリケーション.Types.Where(t => t.IsClass && !t.SimpleName.StartsWith("C"))
CppDependでカスタムルールを定義する場合、ユーザーはプロジェクトを作成したり、ソースファイルを作成したり、編集/コンパイル/デバッグサイクルに入ったり、共有、バージョン管理、統合に労力を要するバイナリDLLを保守したりする必要はありません。CppDependでは、カスタムルールは生のテキストであり、XML CDATAとしてCppDependプロジェクトファイルまたはルールファイルに埋め込まれます。また、ドキュメントや修正方法のガイドラインも、コメントとしてルールのソースコードに埋め込むことができます。

また、各CppDependルールは、問題を理解して修正するのに役立つ追加データとともに問題を提示できます。さらに、各ルールには2つの数式を埋め込むことができ、 問題の修正コスト および 問題を修正しないままにした場合の年間コストを推定しようとします。これらはそれぞれ、問題の 技術的負債 および 年間利子 とも呼ばれます。 これらの数式は、問題を修正する際に本当に重要なことに基づいているため、負債の推定がより意味のあるものになります。。
最後に、CppDependでは各ルールが、大規模なコードベースでも数ミリ秒で実行されます。その結果、すべてのルールを数秒で実行でき(実際のコードベースでは通常2〜3秒)、Visual Studioと継続的インテグレーションシステムの両方で実行できます。この利点として、各コンパイル後およびチェックイン時に、開発者はベースライン以降の新規および修正された問題と、解決または導入された技術的負債の影響を即座に把握できます。では、CppDependのルール結果をSonarQubeシステムに統合して、両製品の強みを組み合わせる方法を説明しましょう。
I - C/C++プラグインの前提条件
- インストール: SonarQube。
- インストール: SonarQube Scanner または旧 Sonar Runner。
- SonarQube ScannerまたはSonarRunnerのbinディレクトリをPATH環境変数に追加します。
II - プラグインのインストールと構成
- $CppDependInstallDir$/SonarPluginにあるsonar-cxx-plugin-cppdepend-1.0を$SonarQubeInstallDir$\extensions\pluginsディレクトリにコピーし、SonarQubeを再起動します。
- デフォルトのCppDependルールはSonarQubeルールリポジトリに読み込まれます。ただし、これらのルールをカスタマイズする必要がある場合は、SonarQubeの管理タブにある.cdprojファイルパスを使用して、独自のカスタムルールを定義できます。

- 管理者としてログインし、使用するプロファイルでCppDependルールを有効にする必要があります。

- $CppDependInstallDir$/SonarRunnerForCppDepend.exe "解析する.cdprojファイル" を実行します。例: SonarRunnerForCppDepend.exe C:\MyWorkspace\test.cdproj。SonarRunnerForCppDependは、CppDependを使用してcdprojファイルを解析し、SonarQube Scanner実行可能ファイルを起動して結果をSonarQubeに読み込みます。cdprojファイル引数の後にSonarRunnerForCppDependに渡されたその他の引数は、SonarScannerコマンドに渡されます。例えば、次のコマンドでバージョンを渡すことができます。 SonarRunnerForCppDepend.exe C:\MyWorkspace\test.cdproj -Dsonar.projectVersion=3.0
III - プラグインの機能
- マルチモジュール解析: CppDependプロジェクトには多くのC/C++プロジェクトを含めることができます。解析後、CppDependはすべてのコードを同じSonarQubeモジュールに入れるのではなく、マルチモジュールのSonarQubeプロジェクトを作成して各プロジェクトを個別のモジュールに分離し、コードナビゲーションをはるかに容易にします。

- 問題: CppDependはデフォルトで250以上のルールを提供し、簡単に完全にカスタマイズできます。CppDependは、問題の 技術的負債を計算する 強力な方法を提供します。CppDependの技術的負債と問題の重大度はSonarQubeに渡されます。

- 標準メトリクス: プラグインはすべての標準SonarQubeメトリクスを計算します。

- コードの重複: 重複はSonarQubeに組み込まれたCPDツールによって検出されます。

- カバレッジ: プラグインはCoberturaおよびMicrosoft Visual StudioのXML結果ファイルからカバレッジ結果を読み込みます。ただし、XMLカバレッジファイルがあるパスを設定する必要があります。


結論
C/C++ SonarQubeプラグインはインストールと使用が簡単で、ルールのカスタマイズも非常にシンプルです。ぜひ お試しください 。フィードバックをお待ちしています。
