なとりうむのメモ帳

アナログな趣味が多め。好きなことをメインにごく稀にTipsとかも書きます。

Visual Studioのコード メトリックス値の説明

Visual Studioのコード メトリックス値、みなさん使ってますか?*1
これらの値をどのタイミングで目にするかと言えば、Visual Studioで出来上がったコードの規模測定するときですかね。
で、この数値一体なになのか?っていう話ですが、ちゃーんと公式が出してます。

コード メトリックス値

説明部分だけ引用しておきますね。

  • 保守容易性指数 - コードの相対的な保守容易性を表す、0 ~ 100 のインデックス値を算出します。 値が大きいほど、保守容易性が優れていることを示します。 色分けしたコード評価を使用して、コード内の問題部分をすばやく識別することができます。 緑色の評価は 20 ~ 100 の範囲にあることを示し、コードの保守容易性が良好であることを示します。 黄色の評価は 10 ~ 19 の範囲にあることを示し、コードの保守容易性が中程度であることを示します。 赤の評価は 0 ~ 9 の範囲にあることを示し、保守容易性が低いことを示します。

  • サイクロマティック複雑度 - コードの構造上の複雑さを測定します。 これは、プログラムのフローにある、異なるコード パスの数を計算することで作成されます。 複雑な制御フローが含まれるプログラムでは、十分なコード カバレッジを実現するためにより多くのテストが必要となり、保守性が低下します。

    System_CAPS_ICON_note.jpg メモ

    場合によっては、Visual Studio 2010 のメソッドのサイクロマティック複雑度の計算が旧バージョンと異なります。 詳細については、「コード メトリックに関する問題のトラブルシューティング」で Visual Studio 2010 のコードの複雑度の計算における変更点についての説明を参照してください。

  • 継承の深さ - クラス階層構造のルートまでのクラス定義の数を示します。 階層構造が深くなるにつれて、特定のメソッドおよびフィールドが定義または再定義されている場所を把握することがより困難になる場合があります。

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

  • コード行 - コード内の行の概数を示します。 この数は IL コードに基づいているため、ソース コード ファイル内の正確な行数ではありません。 数が非常に大きい場合、型またはメソッドでの処理が多すぎるため、分割が必要であることを示すことがあります。 また、型やメソッドの保守が困難なことを示す場合もあります。

 「この数値だとよい」的なものはないですが、
ソース全体を測定した際に突飛に悪い数字がないかを見るのはいいかもしれませんね。
全体で最も数値が悪い部分をリファクタリング対象とするのもいいでしょう。
まあ、基本的にUnit Testが書きやすいようにコード分割していけばそんなにひどく読みづらいとか、理解できないほど長いコードにはならないとは思いますが…。
レガシーコードで酷い部分のテコ入れの基準にする使い方がよさそうです。

*1:2017にもあるんですかね?