コード メトリック値

最新のソフトウェア アプリケーションのように複雑さが増すと、コードの信頼性と保守容易性を維持することもますます難しくなります。 コード メトリックスとは、開発者が開発中のコードをより理解できるようにする、ソフトウェアの一連の基準です。 コード メトリックを利用することにより、開発者は、作成し直したり、さらに詳細にテストしたりする必要がある型やメソッドを把握できます。 開発チームは、潜在的なリスクを特定し、プロジェクトの現在の状態を把握し、ソフトウェア開発中の進行状況を追跡できます。

開発者は、Visual Studio を使用して、マネージド コードの複雑さと保守容易性を測定するコード メトリック データを生成できます。 コード メトリック データは、ソリューション全体または単一のプロジェクトに対して生成できます。

Visual Studio でコード メトリック データを生成する方法については、「方法: コード メトリック データを生成する」を参照してください。

ソフトウェアの測定

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

  • 保守容易性指数 - コードの保守の相対的な容易さを表す 0 から 100 の範囲の指数値を計算します。 値が大きいほど、保守容易性が向上します。 色分けされた評価を使用して、コード内の問題点をすばやく特定できます。 緑色の評価は 20 から 100 の範囲であり、コードの保守容易性が優れていることを示します。 黄色の評価は 10 から 19 の範囲であり、コードの保守容易性が中程度であることを示します。 赤色の評価は 0 から 9 の範囲であり、保守容易性が低いことを示します。 詳細については、保守容易性指数の範囲と意味に関する記事を参照してください。

  • サイクロマティック複雑度 - コードの構造的な複雑さを測定します。 これは、プログラムのフロー内の異なるコード パスの数を計算することによって作成されます。 複雑な制御フローを持つプログラムは、適切なコード カバレッジを実現するためにより多くのテストを必要とし、保守容易性が低下します。 詳細については、「サイクロマティック複雑度」を参照してください。

  • 継承の深さ - 基底クラスまでたどって、相互に継承される異なるクラスの数を示します。 継承の深さは、基底クラスの変更が継承されたクラスに影響を与える可能性があるという点で、クラス結合と似ています。 この値が大きいほど、継承が深く、基底クラスの変更によって破壊的変更が発生する可能性が高くなります。 継承の深さの場合、小さい値は良い状態、大きい値は悪い状態を示します。 詳細については、「継承の深さ」を参照してください。

  • クラス結合 - パラメーター、ローカル変数、戻り値の型、メソッド呼び出し、ジェネリックまたはテンプレートのインスタンス化、基底クラス、インターフェイス実装、外部型で定義されたフィールド、属性装飾によって、一意のクラスへの結合を測定します。 優れたソフトウェア設計では、型とメソッドの凝集度が高く、結合度が低いことが求められます。 高い結合度は、他の型との相互依存関係が多いために、再利用や保守が難しい設計であることを示しています。 詳細については、クラス結合に関する記事を参照してください。

  • ソース コードの行数 - ソース ファイルに存在するソース コード行の正確な数を示します (空白行を含みます)。 このメトリックは、Visual Studio 2019 バージョン 16.4 以降と Microsoft.CodeAnalysis.Metrics (2.9.5) で使用できます。

  • 実行可能コードの行数 - 実行可能コードの行数または操作数の概数を示します。 これは、実行可能コードでの操作の数です。 このメトリックは、Visual Studio 2019 バージョン 16.4 以降と Microsoft.CodeAnalysis.Metrics (2.9.5) で使用できます。 この値は、通常、レガシ モードで使用される MSIL 命令ベースの以前のメトリックであるコード行数とよく一致します。

匿名メソッド

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

生成されたコード

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

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