본문으로 건너뛰기

맥케이브 순환복잡도(McCabe's Cyclomatic Complexity)

· 약 3분

맥케이브 순환복잡도 개념

  • 제어 흐름 그래프(Control Flow Graph)를 기반으로 프로그램 내 선형 독립 실행 경로(Linearly Independent Path)의 수를 정량 측정하는 정적 소프트웨어 복잡도 지표.
  • 기본 경로 테스트(Basis Path Testing)의 최소 테스트 케이스 수를 결정하는 상한 기준으로, 화이트박스 테스트 설계와 유지보수성 평가에 활용.

맥케이브 순환복잡도 개념도

  • 위 그래프는 간선 수 E=5E=5, 노드 수 N=5N=5, 판단 노드 수 D=1D=1이며 단일 모듈(P=1P=1)이므로 V(G)=EN+2P=55+2=2V(G)=E-N+2P=5-5+2=2로 산출.

맥케이브 순환복잡도 구성도, 핵심요소, 적용방안

맥케이브 순환복잡도 구성도

  • 소스코드의 제어 흐름을 노드(명령 구문)와 간선(분기 경로)으로 추상화하여 분기 구조를 시각화.

맥케이브 순환복잡도 핵심요소

구분핵심요소설명
간선-노드 방식V(G)=EN+2PV(G)=E-N+2P간선 수 EE, 노드 수 NN, 연결 요소 수 PP (단일 모듈은 P=1P=1) 기반 일반식
판단 노드 방식V(G)=D+1V(G)=D+1판단(Predicate) 노드 수 DD (if, while, for, case 등) 기반의 간소식
폐영역 방식V(G)=RV(G)=R평면 그래프가 분할하는 폐영역과 외부 영역의 합인 총 영역 수 RR 과 매핑
복잡도 등급V(G)10V(G)\le 10통상 10 이하 안정, 1120 보통, 2150 고위험, 50 초과 리팩토링 대상

맥케이브 순환복잡도 적용방안

구분내용비고
공공공공 SW 사업 정적 감리 시 소스코드 품질 요구사항 임계치로 반영감리 점검 기준
금융계정계 핵심 거래 모듈 단위 복잡도를 V(G)5V(G)\le 5 로 엄격 통제결함 최소화
민간CI/CD 정적 분석 도구(SonarQube 등) 품질 게이트 규칙으로 자동 통제파이프라인 연동

맥케이브 순환복잡도와 인지 복잡도 비교

구분맥케이브 순환복잡도인지 복잡도(Cognitive Complexity)
측정 목적기계적 테스트 경로 충분성·구조 복잡성 측정코드를 읽고 이해하는 정신적 부하 측정
측정 요소제어 흐름 분기 수의 단순 합산흐름 단절·중첩 깊이·논리 가중치 산출
중첩 가중치미반영 (중첩 if와 순차 if를 동일 측정)반영 (중첩 깊이에 비례 가산)
주요 활용기본 경로 테스트 케이스 설계가독성 향상·리팩토링 타깃 식별
  • 시사점: 순환복잡도는 테스트 경로 설계, 인지 복잡도는 유지보수 생산성에 특화되어 상호 보완적으로 운용해야 함.

맥케이브 순환복잡도 도입을 위한 고려사항

구분문제점해결방안
형식적 측정수치 충족만을 위한 비정상적 코드 분할 왜곡 발생인지 복잡도 혼용 정책으로 가독성 함께 통제
비용 부담과도한 경로로 테스트 케이스 설계·실행 비용 급증핵심 로직 선택 적용·정적 분석 자동화로 공수 절감
설계 경직성대용량 파싱 등 본질적 분기 로직에서 오탐 발생도메인별 복잡도 임계치(Threshold) 유연 정의
  • 복잡도 지표는 정적 분석·형상 통제의 핵심 도구로 SW 전 생명주기에 걸쳐 체계적으로 관리되어야 함.

참조