-
사이클로매틱 복잡도란? [NHN은 이렇게 한다!]SW 품질관리 2023. 4. 6. 15:55
(참고) 아래 글은 NHN은 이렇게 한다! 책의 일부를 발췌함을 밝힙니다.
사이클로매틱 복잡도 (cyclomatic complexity)
■ 도입
우리가 작성하는 코드 중 많은 부분이 시간이 흐름에 따라 사라지기보다는 진화하면서 끈질기게 살아남는다. 처음 코드를 작성할 때 요구사항을 정확하고 간결하게 구현해도 지속적인 기능 확장과 유지 보수를 거치면 코드가 처음 의도와는 다르게 진화하는 일이 흔히 발생한다.
(… 생략)
새로운 요구사항을 반영하기 위해 코드를 산발적이고 국소적으로 변경하면서 생기는 수많은 조건문들은 결국 소프트웨어 유지 보수를 어렵게 한다. 복잡한 코드는 이해하기가 어려우므로 테스트하기 어렵고 결함 발생 가능성이 높으며 유지보수나 확장이 쉽지 않다. 즉, 품질 위험 요소가 높다고 할 수 있다.
코드가 복잡한 정도를 수치화하고 특정 기준 이상이면 조치를 취해 복잡도를 제어할 수 있다. 예를 들면 if, else, switch 등의 조건문을 많이 포함하는 코드는 복잡한 코드에 해당한다. 복잡한 정도를 수치화하는 방법 중 대표적인 것으로 사이클로매틱 복잡도(cyclomatic complexity)가 있다.
복잡도를 낮추는 방법은 여러가지가 있다. 높은 복잡도를 가진 메서드를 여러 개의 메서드로 분리하거나 코드의 중복을 제거하거나, 또는 조건 연산을 분리하면 복잡도가 증가한다.
기존의 레거시 코드까지 복잡도를 낮추기는 어렵겠지만 QP 도입 이후 진행하는 신규/개편 개발이나 서스테이닝 개발에는 새로 작성하거나 수정한 코드에 대해 소스코드의 복잡도를 분석했다. 어떤 메서드가 복잡도가 높은지, 복잡도가 높은 메서드가 리팩토링이 필요한지를 확인했다. 만약 리팩토링을 할 수 없다면 복잡도가 높은 메서드를 대상으로 충분히 테스트가 이뤄졌는지 코드 커버리지를 확인했다.
(… 생략)
■ CC2 계산방법
사이클로매틱 복잡도는 소프트웨어 공학에서 가장 보편적으로 사용하는 복잡도 측정 방법이다. 여기에 Boolean에 대한 복잡도를 함계 계산하는 것이 CC2(Cyclomatic complexity with Booleans)이며 공식은 다음과 같다. CC2가 높으면 코드가 복잡하다는 것을 의미한다.
CC2 = Decision 수의 합 + 추가 Boolean 연산의 합 + 1
위 식에서 Decision은 조건문 (if, elseif, switch, while 등)을 의미하며 ‘Boolean’은 조건 연산자를 의미한다. CC2의 최소 값은 1이며 Decision의 수와 조건 연산자의 수에 따라 얼마든지 큰 값일 수 있다. 일반적인 연산 방법은 아래 표와 같으며 상세한 측정방법은 도구에 따라 달라질 수 있다.
측정값의 크기 : CC2 > CC > CC3
○ CC (Cyclomatic complexity)= Decision 수의 합 + 1 (case문 하나당 복잡도가 1씩 증가)
○ CC3 (Cyclomatic complexity without Cases) = Decision 수의 합 + 1 (전체 case문에 복잡도가 1씩 증가)Construct에 따른 CC2 계산 방법 'SW 품질관리' 카테고리의 다른 글
Verification과 Validation의 차이? (0) 2023.04.13 [경쟁력 있는 소프트웨어 테스터가 되는 법] 현업에서 혼용되는 다양한 용어 풀이 (버그와 에러 차이? 랜덤테스트와 애드혹테스트의 차이? N/A, N/T, N/I 등) (0) 2023.04.12 자바 코드의 CC2 측정 예제 (0) 2023.04.10 [왜 시스템 개발만 하면 싸워댈까] 시스템개발 V모형과 요구사항 추적표 예시 (0) 2023.04.05 [NHN은 이렇게 한다! 소프트웨어 품질관리] NHN 품질 사례, 챕터별 내용 요약 (1) 2023.04.04