サイクロマティック複雑度【cyclomatic complexity】循環的複雑度
サイクロマティック複雑度とは?

基本的な考え方は、プログラムの中に「分岐」が多いほど複雑であると捉える。プログラムは通常、上から下へと順番に処理を進めるが、「もしAならばBをする、そうでなければCをする」といった条件分岐が登場すると、処理の流れが枝分かれする。サイクロマティック複雑度は、こうした分岐の数に1を加えた値として算出される。条件分岐のほか、繰り返し処理(ループ)も分岐としてカウントされる。
例えば、分岐をまったく含まない単純な一本道のプログラムであれば、値は1になる。条件分岐が3つあれば4、10あれば11となる。値が大きいほどプログラムの流れは複雑になる。同じ処理内容であっても書き方によって値が変わることがあるため、測定の範囲や計算方法を統一して運用することが求められる。
ソフトウェア開発の実務上は、テスト規模の推定に有用な指標として参照されることが多い。プログラムを十分にテストするには、すべての処理経路を少なくとも一度は通過させる必要があり、サイクロマティック複雑度の値は、そのために最低限必要なテストケースの数に対応する。値が大きければ、それだけ多くのテストが必要になり、開発コストや期間にも影響が出る。
一般的な目安として、値が10以下であれば比較的シンプルで管理しやすいコードとされる。20を超えてくると複雑さが増し、バグが混入しやすく修正の影響範囲も広がりやすくなる。開発現場では関数やメソッド単位で定期的に測定し、値が高い箇所は処理を分割したり分岐を整理したりして改善を図ることが多い。
ただし、この指標はあくまでも分岐の数に着目したものであり、コードの可読性やデータ構造の難しさは直接反映されない。コード行数とも異なる視点を持つ指標であるため、他の品質指標と組み合わせながら、多角的にコードの健全性を把握するための参考値として用いるのが一般的である。