Visual Studioを使って、コードの複雑度を測定する方法。
ブラックボックスが多い、未知のプロジェクトに着手する時の指標に。
1.
メニューから[分析]→[コードメトリックスを計算する]を選択する。
(ソリューション単位で計測するか、プロジェクト単位で計測するかはお好みで。)
2.
こんな感じで計測結果が出てくる。
パラメータ解説
保守容易性指数
0 ~ 100 で表現される。値が大きいほど保守容易性が高い。
値 | 内容 |
---|---|
0 ~ 9 | レッドゾーン |
10 ~ 19 | 中程度 |
20 ~ 100 | 安全な範囲 |
※あくまで「計測結果の判定はそうなっている」というだけで、実際に保守性が高いかどうかは、エンジニア自身で確認した方がいいです。
サイクロマティック複雑度
値が大きいほど複雑度が高い。
目標値 200以下、どれだけ複雑でも 1000以下を目標にするとよいらしい。(知人のフリーランス談)
継承の深さ
そのまんま。
値が低い方が保守性が高い事が多い。
クラス結合度
そのまんま。
値が低い方が保守性が高い事が多い。
コード行
正直、正確な数字ではないため、極端に大きくないかどうかを確認する程度でいいと思う。
また、上記の指標は▽のマークを展開していく事で、メソッド単位でチェックすることも可能です。
チェックするポイント
主観も入っていますので、参考にする場合はご留意を。
ヤバいコードの検出
サイクロマティック複雑度の高い順にソートする。(ヘッダを選択すると、ソートできる)
サイクロマティック複雑度が高くても、保守容易性指数が高かったら、マトモなコードの可能性はある。
サイクロマティック複雑度が高く、保守容易性指数が低い場合、ほぼ確実にヤバいコード。
保守容易性指数は判定が甘い(「?」というようなコードでも、高めの数字は出やすい)ので、 サイクロマティック複雑度が高いソースについては、メソッド単位での確認もしておいた方がいい。
状況によって見るポイントを変えるパラメータ
「クラス結合度」は、画面系の場合は値が大きくなりやすい。
具体的には、テキストボックスやラジオボタンが大量に配置されていると、数字が大きくなりやすい。
なので、数字が大きくても複雑度がそれほど高くない事がある。
が、それ以外の場合で「クラス結合度」が高い場合は危険率が高め。
参考程度にする情報
継承の深さ
もちろん値が小さい方がいいんだけど、1つのファイルに複数のクラスを記述し、ユーティリティクラスの塊のような書き方をしていると、 1つ1つのクラスの深さは大したことは無くても、数字が大きくなることがある。 (継承の数は、各クラスごとの数が累計された数字となる。)
が、そうでない場合は、複雑度は高い場合が多い。 10以上はデンジャーゾーン。
クラス結合
クラス単位でみると、内包するメソッドの累計が出てくるので、メソッド単位でチェックした方がいいと思う。
20以上からは注意、30以上からは警戒、40以上はレッドゾーン(の可能性が高い)。
(公式サイトでの説明はこちら)
https://msdn.microsoft.com/ja-jp/library/bb385914.aspx