コード メトリックスの概要

更新 : 2007 年 11 月

コード メトリックスとは、開発者が開発中のコードをより理解できるようにする、ソフトウェアの一連の基準です。開発者は、コード メトリックスを利用することで、作成し直したり、より徹底的なテストを実行したりする必要のある型やメソッドを把握できます。開発チームは、ソフトウェアの開発時に、リスクの可能性を特定し、プロジェクトの現在の状態を把握して、進行状況を追跡できます。

ソフトウェアの測定

Visual Studio によって計算されるコード メトリックスの結果を次に示します。

  • 保守容易性指数 - コードの相対的な保守容易性を表す、0 ~ 100 のインデックス値を算出します。値が大きいほど、保守容易性が優れていることを示します。計算は、ハルステッド ボリューム、サイクロマティック複雑度、およびコード行に基づいて行われます。色分けしたコード評価により、コード内の問題部分をすばやく識別することができます。緑色の評価は 20 ~ 100 の範囲にあることを示し、コードの保守容易性が良好であることを示します。黄色の評価は 10 ~ 19 の範囲にあることを示し、コードの保守容易性が中程度であることを示します。赤の評価は 0 ~ 9 の範囲にあることを示し、保守容易性が低いことを示します。

  • サイクロマティック複雑度 - コードの構造上の複雑さを測定します。これは、if ブロック、switch-case、do ループ、while ループ、foreach ループ、for ループなど、プログラムのフロー内のさまざまなコード パスの数を計算し、合計に 1 を加えることによって作成されます。複雑な制御フローが含まれるプログラムでは、十分なコード カバレッジを実現するためにより多くの単体テストが必要となり、保守性が低下します。

  • 継承の深さ - クラス階層構造のルートまでのクラス定義の数を示します。階層構造が深くなるにつれて、特定のメソッドおよびフィールドが定義または再定義されている場所を把握することがより困難になる場合があります。継承ツリーでその型より上の型の数を計算することによって、クラス レベルの数値が作成されます。数値は 0 から始まり、インターフェイスは除外します。名前空間およびプロジェクト レベルでの計算は、名前空間またはプロジェクト内のすべての型の中で最も高い値の継承の深さの計算から成ります。

  • クラス結合度 - パラメータ、ローカル変数、戻り値、メソッド呼び出し、ジェネリックまたはテンプレートのインスタンス化、基本クラス、インターフェイス実装、外部の型で定義されたフィールド、および属性による装飾を使用して、一意のクラスへの結合度を測定します。計算では、int32、string、object など、プリミティブ型や組み込み型は除外します。適切なソフトウェア デザインでは、型およびメソッドの連携は高まり、結合性は低くなります。結合性が高いということは、他の型への依存関係が多いために再利用や保守が困難なデザインであることを示します。

  • コード行 - コード内の行の概数を示します。この数は IL コードに基づいているため、ソース コード ファイル内の正確な行数ではありません。計算では、空白、コメント、かっこ、およびメンバ、型、名前空間の各宣言は除外します。数が非常に大きい場合、型またはメソッドでの処理が多すぎるため、分割が必要であることを示すことがあります。また、型またはメソッドの保守が困難なことを示す場合もあります。

匿名メソッド

匿名メソッドは、名前を持たないメソッドです。匿名メソッドは、コード ブロックをデリゲート パラメータとして渡すために最も頻繁に使用されます。メソッドやアクセサなど、メンバで宣言されている匿名メソッドのメトリックスの結果は、メソッドを宣言するメンバに関連付けられます。メソッドを呼び出すメンバには関連付けられません。

コード メトリックスでの匿名メソッドの扱われ方の詳細については、「匿名メソッドとコード分析」を参照してください。

生成されたコード

一部のソフトウェア ツールおよびコンパイラでは、プロジェクト開発者が確認または変更できないコードが生成され、プロジェクトに追加されます。ほとんどの場合、コード メトリックスでは、メトリックスの値を計算する際に、生成されたコードを無視します。これにより、メトリックスの値には、開発者が確認および変更できる内容を反映できます。

Windows フォーム用に生成されたコードは、開発者が確認および変更できるコードであるため、無視されません。

[コード メトリックスの結果] ウィンドウ

Visual Studio でコードを分析すると、[コード メトリックスの結果] ウィンドウに結果が表示されます。ウィンドウでは、ツール バーが上部にあり、計算された結果を表示する列もあります。

[階層] 列には、コードの階層構造を示すツリー ビューがあります。このツリー ビューを展開したり折りたたんだりして、必要な詳細レベルを確認できます。残りの列では、計算された結果が示されます。結果の列は、必要に応じて、非表示にしたり並べ替えたりできます。詳細については、「方法 : 列を追加、削除、再整列する」を参照してください。

[保守容易性インデックス] 列には、数値結果に加えてアイコンも表示されます。緑色のアイコンは、保守容易性が比較的高いことを示します。黄色のアイコンは、保守容易性が中程度であることを示します。赤いアイコンは、保守容易性が低く、問題が発生する可能性があることを示します。これらのカラー インジケータは、FxCop 規則の AvoidUnmaintainableCode で使用される重大度のカテゴリに対応しています。この規則では、保守容易性指数が 10 未満の場合はエラーが出力され、10 ~ 20 の範囲内の場合は警告が出力され、20 より大きい場合はエラーも警告も出力されません。保守容易性指数は、サイクロマティック複雑度、コード行、および計算の複雑度の 3 つのメトリックスを統合したものです。指数の値は単位では表されません。

ウィンドウ内の結果は、基準列を指定して並べ替えることができます。この操作を行うには、列見出しをクリックします。列見出しをもう一度クリックすると、ウィンドウは逆の順序で並べ替えられます。

参照

その他の技術情報

マネージ コードの複雑さと保守性の測定