X

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};
1 while(x < 5)
2 switch(a[x] % 2) {
case 0:
3 printf(“a[%d] is even\n”, x);
break;
case 1:
4 printf(“a[%d] is odd\n”, x);
break;
default:
5 printf(“Fault result: a[%d]\n”, x)
}
6 x++;
}
7 printf(“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를 이용하여 복잡도 측정 가능
도리: