循環的複雑度 (M) は、プログラムの制御フローをグラフと見なし、以下の式により算出される。Eはグラフのエッジ数、Nはグラフのノード数、Pは連結されたコンポーネント数である。
M = E - N + 2P
下図はC言語 (左側) で書かれたプログラムの制御フロー (右側) を表したものである。単独モジュールの循環的複雑度を計算する場合、Pの値は1となる。下図のプログラムの循環的複雑度として、最も適切なものはどれか。
@ 1 A 2 B 3 C 4 D 5
B
C言語で書かれたプログラムは、i が0から100まで101回ループし、i が5で割り切れない時に sumでカウントアップし、5で割り切れた時はカウントアップしないというものである。つまり0〜100で5で割り切れない数字の個数を求めるプログラムである。
制御フローではエッジ (矢印) は9本、ノード (丸印) は8つあり、C言語で書かれたプログラムは全てのエッジとノードを網羅する。
したがって、単独モジュールの循環的複雑度を計算する場合、Pの値は1であるから、循環的複雑度 (M) は
9 - 8 + 2×1 = 3である。
V−14 | 目次 | V−16 |