質問: C(C++、C#)ソースコード静的解析ツールの検証項目について、先輩諸氏の知見を拝借します。 静的解析は、次の2つの観点があると思います。 1. 実行文としての構文解析 2. コーディングフォーマットとしての構文解析(コメント、インデントなども含めた) これらの「構文解析」の具体的な検証項目について、参考書籍などありましたら教えてください。
回答: 言語によってコンパイラ構造が異なるため、一般論として答えを得ることは無理です。 例えばC#言語の場合、CIL; 共通中間言語にコンパイルされます。その際、メタデータやデバッグ情報(対応するソースコード行など)が保持されているため、ソースコードではなくCILに対して静的解析を行い、解析結果から対応するソースコード行を指摘することができます。その機能は既に提供されていてマネージ コードに対するコード分析となっています。これ自体がフレームワークとして提供されているため、独自の分析を追加することもできます。 これらはあくまでコンパイル結果を参照しているため、質問後半のコーディングフォーマットについてはあまり対応できません。しかし次バージョンからは.NET Compiler Platform ("Roslyn")が導入され、ソースコードに対しても分析を行うフレームワークが用意されます。 C++言語の場合、C#言語と異なりマクロ、templateやinline展開などを前提としているためコンパイル結果からの分析は非常に困難です。MicrosoftではSAL注釈という独自の機能を用意しています。これは関数宣言にその関数の振る舞いに関する注釈を加えることで呼び出し元との整合性をチェックする機構です。加えて、Microsoftの提供するヘッダーファイルにはこの注釈が記述されています。これらによりコンパイル時に静コード分析を行っています。 コーディングフォーマットについてはあまり対応できていないかも。 コーディングフォーマットについては静的解析を行うよりも何らかのツールで整形してしまえばいいように思います。