• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

循環的複雑度

date: 2022-07-08 excerpt: 循環的複雑度(CCN)の定義と測定

tag: 循環的複雑度CCN


循環的複雑度(CCN)の定義と測定

概要

  • プログラムをグラフとして考えた時に、エッジ数とノード数と依存しているモジュール数で複雑度を定義する方法
    • エッジ数
      • グラフの参照を示す矢印のこと
    • ノード数
      • グラフの参照先のブロックのこと
\[M = E - N + 2P\]
  • \(M\); 循環的複雑度
  • \(E\); エッジ数
  • \(N\); ノード数
  • \(P\); 連結されたコンポーネント数

具体例

  • このフローの循環的複雑度は 9 - 8 + 2*1 =3
if (c1()):
    f1()
else:
    f2()

if (c2()):
    f3()
else:
    f4()

このプログラムのネットワークに変換すると以下の図になる

lizardによる循環的複雑度の測定

$ python3 -m pip install lizard
$ lizard <filename>
================================================
  NLOC    CCN   token  PARAM  length  location
------------------------------------------------
       2      1     22      3       2 funcname0@4-5@filename
      39     12    266      2      42 funcname1@7-48@filename
  • CCNのカラムが循環的複雑度を示す

参考

  • 循環的複雑度/Wikipedia
  • 循環的複雑度の計測ツール lizardの導入方法


循環的複雑度CCN Share Tweet