McCabe 회전 복잡도

I. 코드 품질의 정량적 측정, McCabe 회전 복잡도

개념소스코드 복잡도의 정량적 표현을 위해 제어 흐름을 그래프로 표현하는 측정 지표
특징정량 지표소스코드 복잡도를 정량적 측정/평가
구조적평가SW산출물 실제 동작전 상태 품질 측정
간접 방식효율, 기능성, 품질 등 간접적 측정
  • 코드 복잡도 계산 위해 그래프 표현 및 계산식 존재

 

II. McCabe 회전 복잡도 측정 기법 및 복잡도 평가 지표

가. McCabe 회전 복잡도 측정 기법

구분측정 기법설명
계산식V(G)=E-N+2– 노드 수(N) 및 간선 수(E)계산
V(G)=P+1– 조건 분기문(P) 수로 계산
그래프
구성
– Node
– 프로세싱 태스크 표현
– Edge
– 태스크 간 제어 흐름 표현
그래프
표현
– Sequence
– 분기, 반복 없는 태스크
– While
– 사전 조건에 의한 반복 제어
– Until
– 사후 조건에 의한 반복 제어
– If – Else
– 조건 분기문에 의한 제어흐름

나. McCabe 평가 지표

지표평가 기준설명
복잡도
1 ~ 10
– 구조적
– 안정된 코드
– 높은 테스트 가능성
– 낮은 위험도 및 비용
복잡도
11 ~ 20
– 다소 복잡– 중간 수준 테스트 가능성
– 중간 수준 위험도 및 비용
복잡도
21 ~ 50
– 매우 복잡– 낮은 테스트 가능성
– 높은 위험도 및 비용
복잡도
40이상
– 테스트 불가– 매우 높은 위험 및 비용
  • ISO26262, MISRA에서 SW안전성 위해 복잡도 측정 요구

 

III. McCabe 회전 복잡도 계산예제

가. 문제 그래프 식 표현

노드구문
 int x = 0; int a[] = {1, 2, 3, 4, 5};
1while(x < 5)
2  switch(a[x] % 2) {
     case 0:
3printf(“a[%d] is even\n”, x);
 break;
     case 1:
4printf(“a[%d] is odd\n”, x);
 break;
     default:
5printf(“Fault result: a[%d]\n”, x)
   }
6  x++;
 }
7printf(“Program terminated.\n”);
  • 그래프

나. McCabe 회전 복잡도 계산

구분설명
V(G)=E-N+2– 총 간선 수 (E): 9, 총 노드 수 (N): 7
– 회전 복잡도 V(G) = 9 – 7 + 2 = 4
V(G)=P+1– 총 조건 분기문 (P) = 3 (if-then, case 조건 수, 단 else, default는 제외)
– 회전 복잡도 V(G) = 3 + 1 = 4
회전 복잡도주어진 문제의 회전 복잡도는 4
  • 기존 McCabe 계산 단점 보완한 Modified, Strict Cyclomatic Complexity를 이용하여 복잡도 측정 가능

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^