戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

システムアーキテクト 2025年 午前2 問08


問題文

プログラムの構造的な複雑度を測る尺度としてMcCabeが提唱したサイクロマティック複雑度がある。制御の流れが次のグラフで表されるプログラムのサイクロマティック複雑度は幾らか。ここで、エッジの個数をe、ノードの個数をnとし、サイクロマティック複雑度はe-n+2で求めるものとする。
システムアーキテクト 2025年 午前2 問08の問題画像

選択肢

ア:3
イ:4(正解)
ウ:5
エ:7

🔒 解説は解答すると表示されます

サイクロマティック複雑度【午前2解説】

正解の理由

与えられたグラフのノードはA,B,C,D,Eの5箇所で、エッジは問題文の列挙で7本(A→B, A→C, B→C, B→E, C→D, C→E, D→E)です。公式に従いサイクロマティック複雑度を計算すると
よって正解は イ(4)です。

解法ステップ

  1. 問題図からノードを数える(A,B,C,D,E → )。
  2. 矢印(有向エッジ)を1本ずつ数える(列挙された7本 → )。
  3. 与えられた公式 に代入して計算する:。
  4. 必要なら別の見方(判定点数+1、あるいは )で結果が一致するか確認する。

選択肢別の誤答解説

  • ア: 3 — これはエッジ数を6と数えて とした場合の誤答です。どの辺を見落としたかを確認してください。
  • イ: イ(4) — 正解。ノード5、エッジ7より になります。
  • ウ: 5 — これはエッジを8本と誤って数えた場合(またはノードを4と誤認した場合)に生じる典型的なミスです。図の各矢印を一つずつ数え直してください。
  • エ: 7 — 公式を誤って のように扱ったり、各分岐を過剰にカウントした場合に出る大きな誤答です。原理を確認しましょう。

よくある誤解(2〜3行)

  • ノードとエッジのどちらかを数え間違えて異なる値を出してしまうことが多いです。
  • 複数の辺や分離したサブグラフ(結合成分P)を意識せずに計算する誤りもあります。

補足コラム

  • 一般式は連結成分(独立した入口)を考慮して (Pは入口の数)と表されます。通常の単一関数のCFGでは なので です。
  • 別の直感的な求め方として「判定点(if, while, for, case等)の数Dに対して 」という方法があります。ただしswitch/caseはケース数に応じた調整が必要です(例:k分岐ならk−1と数える)。
  • 実務ではサイクロマティック複雑度は独立経路数=テストケースの下限にもなるため、複雑度が高い関数はテストコストや保守性リスクが高いと判断されます。一般目安として10を超えると注意が必要です。
  • 例(簡単なコードと計算):
def f(x):
    if x > 0:
        if x % 2 == 0:
            return 1
        else:
            return 2
    else:
        return 3
# 判定点D = 2 (外側ifと内側if) → M = D + 1 = 3

FAQ

Q: サイクロマティック複雑度で入口(entry)や出口(exit)はどう扱いますか?
A: 入口・出口はノードとしてグラフに含まれますが、公式 がそれらを含めて正しく計算します。特別に加える必要はありません(ただし結合成分Pが複数ある場合は を用います)。
Q: ループやバックエッジはどうカウントしますか?
A: ループもエッジとして数えます。戻り(バックエッジ)があればそれもエッジなので に含めて計算します。
Q: switch/caseはどう扱うのが安全ですか?
A: switchの場合は「分岐数 − 1」を判定点として数える方法が一般的です(各caseを個別の分岐と見なすと良い)。

関連キーワード: サイクロマティック複雑度、McCabe, 制御フローグラフ、独立経路、判定点
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

システムアーキテクトを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について