Study_Note

cyclomatic complexity 본문

temp

cyclomatic complexity

12월7일생 2024. 8. 26. 15:08
728x90
반응형

순환 복잡도(Cyclomatic Complexity)

코드의 복잡도를 측정하는 지표로, 프로그램의 논리적 복잡성을 나타냅니다. 주로 소프트웨어 테스트와 유지보수 측면에서 중요한 개념입니다. 

 

구체적으로, 순환 복잡도는 프로그램의 독립적인 실행 경로의 수를 나타냅니다. 이 수치는 프로그램의 제어 흐름 그래프(Control Flow Graph)를 기반으로 계산되며, 이 그래프는 프로그램 내의 각 명령문을 노드로, 제어 흐름을 에지로 표현합니다.

 

순환 복잡도는 보통 맥케이브(McCabe) 순환 복잡도로 불리며, 이를 구하는 공식은 다음과 같습니다.

  • V(G) : 순환 복잡도 (그래프의 복잡도)
  • E : 제어 흐름 그래프의 에지(Edges) 수
  • N : 제어 흐름 그래프의 노드(Nodes) 수
  • P : 프로그램의 독립적인 연결 컴포넌트 수
    (일반적으로 하나의 프로그램이 하나의 연결 컴포넌트로 간주되므로 보통 1)

예시

간단한 if-else 문이 포함된 함수의 순환 복잡도를 구해보겠습니다.

def example(a):
    if a > 0:
        print("Positive")
    else:
        print("Non-positive")

이 함수의 순환 복잡도는 2입니다. (기본 경로 + if 조건으로 인해 두 개의 경로가 생기므로 2개의 독립적인 경로가 존재함)

순환 복잡도의 의미

  • 복잡도 1 : 제어 흐름이 없고, 하나의 경로만 존재 (직선형 코드)
  • 복잡도 2 이상 : 조건문(if), 반복문(while, for), 분기문 등이 추가되어 여러 경로가 생김

순환 복잡도가 높을수록 코드는 더 복잡하며, 이해하기 어렵고 테스트해야 할 경로가 많아집니다. 이상적으로는 순환 복잡도를 낮게 유지하는 것이 바람직하며, 복잡도가 너무 높으면 코드의 구조를 개선하거나 리팩토링하는 것이 권장됩니다.

'temp' 카테고리의 다른 글

Install python  (0) 2025.01.08
prioritization  (0) 2024.09.10
RIAC(reliability information analysis center)  (0) 2024.08.26
LCOM(lack of cohesion of methods)  (0) 2024.08.26
fan-in & fan-out  (0) 2024.08.26