일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 비기능테스트
- test
- 자동화
- QA
- 파이썬
- SQA
- risk-based testing
- Test Case
- 유지보수성 테스트
- 위험 기반 테스트
- 테스트케이스
- testcase
- ISTQB
- agile
- Python
- 애자일
- selenium
- seleium
- 테스트 케이스
- maintainability test
- Software life cycle model
- 테스트 설계 기법에 따른 분류
- csts
- Testing
- 테스트
- regression test
- RBT
- 셀레니움
- 품질
- testing method
Archives
- Today
- Total
Study_Note
cyclomatic complexity 본문
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 |