순환복잡도(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함수의 제어흐름그래프를 그리거나 떠올립니다. 문장 하나(또는 이어지는 블록)가 노드 하나, 흐름이 넘어가는 화살표가 간선 하나입니다.
- 2노드 수(N)와 간선 수(E)를 셉니다. 함수 하나면 연결요소 수(P)는 1입니다.
- 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)일 때만 성립합니다.
함께 보면 좋은 도구
시간복잡도입력 크기를 넣으면 O(1)부터 O(n!)까지 아홉 가지 시간복잡도의 연산 횟수와 예상 실행 시간을 한눈에 비교합니다.할스테드 복잡도서로 다른 연산자·피연산자 수와 총 등장 횟수를 넣으면 할스테드 공식대로 부피·난이도·노력·구현 시간·추정 버그 수를 구합니다.gitignore 판정.gitignore 규칙과 경로를 넣으면 그 파일이 무시되는지, 어느 줄이 마지막으로 이겼는지 알려줍니다.울프람 규칙규칙 번호 0~255를 8비트로 풀어 세 칸 이웃에 대응시키고 세대를 쌓아 무늬를 그립니다.2-SAT「둘 중 하나는 참」인 조건을 여럿 넣으면 참·거짓 배정이 가능한지 판정하고 배정을 하나 찾아 줍니다.
마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.