サイクロマティック複雑度とは?さいくろまてぃっくふくざつど
サイクロマティック複雑度とは、プログラムの分岐の入り組み具合を数値にした指標で、制御フローグラフ(処理を節点、流れを辺で描いた図)から「辺の数−節点の数+2」、または簡単に「判定条件の数+1」で求める。値はプログラムを通る独立した経路(ほかの経路の組合せでは作れない経路)の数に等しく、独立した経路をすべて1回ずつ通すテストの本数の目安になる。1976年にトーマス・マッケーブが提唱し、静的解析ツールで自動計測できる。
最終更新:2026-10-09
基本情報を最短で暗記・合格する →背景
「このプログラムはテストしにくい」を人の感覚で言っていると、レビューで基準を示せず、どこを分割すべきかも決められない。行数では測れない(長くても一直線なら簡単)ため、分岐の数から機械的に出せる尺度が要った。コードレビューでメトリクスとして計測し、閾値を超えた関数を分割対象にする運用で使われる。試験では計算式とテスト本数の関係が問われる。
具体例
if文が3つ並び、うち1つが「AかつB」の複合条件なら、条件を1つずつ数えて判定条件は4個で、複雑度は5。独立した経路を全部通すには5本のテストを用意する。一方、分岐網羅(判定ごとに真と偽を1回ずつ通す)だけなら、全部真の1本と全部偽の1本の計2本でも足りることがあり、複雑度の値とは一致しない。SonarQube(ソナーキューブ)のような静的解析ツールは関数ごとにこの値を出し、10を超えたら分割を検討、20を超えたら保守で不具合を作り込みやすいと警告する設定が一般的。
試験での引っ掛け
複雑度は分岐の数で決まり、行数や変数の数とは無関係。長くても分岐のない逐次処理は低く、短くても分岐だらけなら高い。求まるのは「独立した経路の数」で、全経路の数ではない。分岐が直列に並ぶと全経路数は2倍ずつ増えるが複雑度は1ずつしか増えない。値が低いことはバグがない保証ではなく、テストのしやすさの指標にすぎない。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。