本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

令和6年度 技術士第一次試験問題【専門科目】

V−15

循環的複雑度 (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