도구스개발

순환복잡도(McCabe) 계산기

제어흐름그래프의 노드·간선·연결요소 수를 넣으면 McCabe 순환복잡도 V(G)=E−N+2P를 구하고 위험도와 최소 테스트 케이스 수를 보여줍니다.

순환복잡도 V(G)

3

위험도: 저위험 · 최소 테스트 케이스 3개

판단 노드(분기점) 수로 환산2개 + 1
1~10 — 단순한 절차. 테스트하기 쉽습니다.저위험
11~20 — 다소 복잡. 한 번 더 살펴볼 만합니다.중위험
21~50 — 복잡. 리팩터링을 권장합니다.고위험
50 초과 — 사실상 테스트가 불가능한 수준입니다.매우 고위험
V(G) = E − N + 2P로 구합니다. 노드·간선을 셀 때 시작·종료를 별도 노드로 넣는지에 따라 사람마다 결과가 1~2 어긋나기 쉬우니, 같은 팀 안에서는 세는 규칙을 맞춰 두는 편이 좋습니다. 판단 노드 수로의 환산은 연결요소가 1개(함수 하나)일 때만 성립합니다.

사용 방법

  1. 1함수의 제어흐름그래프를 그리거나 떠올립니다. 문장 하나(또는 이어지는 블록)가 노드 하나, 흐름이 넘어가는 화살표가 간선 하나입니다.
  2. 2노드 수(N)와 간선 수(E)를 셉니다. 함수 하나면 연결요소 수(P)는 1입니다.
  3. 3V(G)와 위험도, 최소 테스트 케이스 수를 확인합니다.

자주 묻는 질문

V(G) = E − N + 2P (E: 간선 수, N: 노드 수, P: 연결요소 수)로 구하는, 제어흐름그래프에 독립된 경로가 몇 개 있는지를 재는 지표입니다. 토마스 매케이브가 1976년에 제안했으며, 이 값은 그 함수를 모든 분기까지 테스트하는 데 필요한 최소 테스트 케이스 수와 같습니다.

연결요소가 1개(함수 하나)라면 V(G) = 판단 노드(if·while·for·case·&&·|| 등 분기점) 수 + 1과 같습니다. 실무에서는 그래프를 그리는 대신 이 식으로 코드를 훑어 바로 셉니다.

분기가 많을수록 테스트해야 할 경로가 기하급수적으로 늘고, 사람이 코드를 한눈에 파악하기도 어려워집니다. 매케이브가 제시한 기준으로 10 이하는 단순, 11~20은 중위험, 21~50은 고위험, 50 초과는 사실상 테스트가 불가능한 수준으로 봅니다.

분기 하나가 곧 복잡도 1이므로, 중첩된 조건문을 조기 반환(early return)으로 펼치거나 함수를 더 작은 단위로 쪼개 분기를 나눠 담는 것이 일반적인 방법입니다.

알아두면 좋은 점

  • 노드·간선을 셀 때 시작·종료를 별도 노드로 넣는지에 따라 사람마다 결과가 1~2 어긋나기 쉽습니다. 이 계산기는 입력값을 공식에 그대로 대입할 뿐, 그래프를 직접 그려 세는 규칙 자체는 검증하지 않습니다.
  • 판단 노드 수로의 역산은 연결요소가 1개(P=1)일 때만 성립합니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.