コードメトリックス
コードメトリックスを使うと作成中のプログラムが
保守容易性指数を点数で表示できます。
保守容易性指数は保守性を点数で評価したもので、100点が最高、0点が最低です。 保守性とは、簡単に言うとプログラムの修正・機能追加のしやすさです。

Visual Studio 2017では 分析メニューから コード メトリックスを計算する - ソリューション用 をクリックするだけですぐ計算してくれます。 他のバージョンのVisual Studioでも少し表示は違いますが大体同じです。Visual Studio 2013にこの機能があるのは確認していますが、それより前のバージョンでは未確認です。
表示される指標は次のような意味です。
コードメトリックス
メトリックス | 意味 | 目安 | 保守容易性指数 | 修正・機能追加のしやすさ | 高いほうが良い。20以上ならOK。 |
サイクロマティック複雑度 | 分岐の多さ | 低いほうが良い。1メソッド辺り25以下ならOK。 |
継承の深さ | クラスの継承の深さ | 低いほうが良い。4程度には抑えたい。(私見) |
クラス結合 | 他のクラスへの依存の多さ | 低いほうが良い。 |
コード行 | コードの行数 | 低いほうが良い。95%のメソッドが20程度になるようにしたい。(私見) |
メトリックスはプロジェクト単位・クラス単位・メソッド単位で表示できます。
指標の活用方法
保守容易性指数
保守容易性指数はサイクロマティック複雑度・継承の深さ・クラス結合をもとに計算されており、全体の結論として使用できます。 緑・黄色・赤で色分けして表示されるため、緑=OK、赤=NGという具合に覚えやすいです。 20以上は緑で表示されるので20以上ならOKということになります。[1]
ただ、Microsoftの評価は私には少し甘く考えられ、サイクロマティック複雑度が20を超えるようなメソッドは緑で表示して欲しくない思いです。
ともあれ、まずは、保守容易性指数が黄色・赤のメソッドがないか探してみてください。
サイクロマティック複雑度
実際にプログラムしていて一番気になるのはこれです。ifや、switch(VBではSelect Case)を記述するとどんどんサイクロマティック複雑度が増えていきます。
サイクロマティック複雑度が多いということはその分単体テストケースが多いということを意味しています。 単体テストはいろいろな値や状況の組み合わせだけでテストケースがそれなりに多くなるものですが、そのうえ分岐が大量にあるとテストケースが掛け算で増えてしまうことがあります。
そのため、あまりにもサイクロマティック複雑度が高いと、品質の高い単体テストが著しく困難になり、75以上の場合、「いかなる変更も誤修正を生む」と記載しているサイトもあります。[2]これはもう修正不可能と同義です。
Microsoftは25以下であれば許容できると評価しているようです。[3]
私はレビューワーとして20を超えるようなメソッドがあればだいたいダメ出しします。
サイクロマティック複雑度が高いメソッドを改善するにはメソッドを分割するか、ポリモーフィズムを活用します。トリッキーな手段で分岐を減らすことは期待されていません。どうしても分岐が残ってしまうのならば、誰が見ても分岐とわかるifやswitchを使いましょう。
参考
- ^ コードメトリックス値
- ^ 現場のためのソフトウェア開発プロセス - たかのり日記 循環的複雑度を活かしたバグ潜在リスクの軽減
- ^ CA1502: メソッドの実装を複雑にしすぎないでください