McCabe サイクロマティック複雑度

循環的複雑度とは、モジュールの構造上の複雑さの測定値のことです。複数の研究によると、プログラムの循環的複雑度、およびその保守性とテスト容易性の間には相関関係があり、複雑度が高いファイルでは、ソースコードの修正、拡張、またはリファクタリング時にエラーが発生する可能性が高いことが示されています。

次に示すように、選択されたしきい値は、ソフトウェア工学研究所によって確立されたカテゴリに基づいています。

サイクロマティック複雑度 リスク評価...
1-10 ほとんどリスクのない簡単なモジュール
11-20 中等度のリスクを伴うより複雑なモジュール
21-50 高いリスクを伴う複雑なモジュール
51 以上 非常に高いリスクを伴うテスト不可のプログラム

集約は、選択されたモデルで定義されているように選択された構造による影響を受け、構造プリセットによって定義されているようにスコープによる影響を受けます。

循環的複雑度は、次のように計算されます。

サイクロマティック複雑度 = ( 1 + ifs + loops + cases )、ここで

  • ifs は、関数の IF 演算子の数です。
  • loops は、関数のループの数です。
  • cases は、関数のスイッチブランチの数 (デフォルトなし) です。

簡単なプログラムとその循環的複雑度メトリックの疑似コードを次に示します。

Function
  While
    If
    Else
    Endif
  Endwhile
End Function 

"if" 演算子が 1 つ、"loop" 演算子が 1 つあるため、循環的複雑度メトリックは 1+1+1=3 として計算できます。