객체지향 프로그래밍을 위한 사이클로매틱 복잡도 개선 방안
초록
본 논문은 전통적인 사이클로매틱 복잡도 지표가 조건문 중심으로만 계산되어 객체 간 결합도를 반영하지 못한다는 문제점을 지적한다. 이를 해결하기 위해 클래스 간 결합도를 포함한 새로운 복잡도 계산 알고리즘을 제안하고, 적용 사례를 통해 기존 지표 대비 더 정확한 복잡도 평가가 가능함을 보인다.
상세 분석
이 논문은 사이클로매틱 복잡도(Cyclomatic Complexity, CC)가 객체지향 프로그래밍(OOP) 환경에서 갖는 한계를 명확히 제시한다. 전통적인 CC는 제어 흐름 그래프의 분기점 수를 기반으로 복잡도를 산출하지만, OOP에서는 클래스 간 결합(coupling)과 상속, 다형성 등 구조적 요소가 코드의 유지보수성과 이해도에 큰 영향을 미친다. 저자들은 이러한 구조적 복잡성을 무시하면 실제 개발 비용을 과소평가하게 된다고 주장한다.
제안된 개선 방안은 두 단계로 구성된다. 첫 번째 단계는 기존 CC 계산에 더해 각 클래스가 다른 클래스와 맺는 결합 관계를 정량화한다. 결합도는 사용된 메서드 호출, 필드 접근, 상속 관계 등을 가중치가 부여된 항목으로 분류하고, 이를 “결합 복잡도(Coupling Complexity, Cc)”라 명명한다. 두 번째 단계는 기존 CC와 Cc를 선형 결합하거나 비선형 함수 형태로 통합하여 “통합 복잡도(Integrated Complexity, IC)”를 도출한다. 논문에서는 가중치 설정을 위해 경험적 데이터와 전문가 설문을 활용했으며, 알고리즘 흐름을 의사코드 형태로 제시한다.
실험 부분에서는 몇 개의 오픈소스 Java 프로젝트를 대상으로 기존 CC와 제안된 IC를 비교한다. 결과는 IC가 클래스당 평균 결함 발생률과 더 높은 상관관계를 보였으며, 특히 결합도가 높은 모듈에서 기존 CC가 낮게 평가되는 현상을 보완한다는 점을 강조한다. 그러나 실험 규모가 제한적이며, 가중치 선정 과정이 주관적이라는 비판도 가능하다. 또한, 상속 깊이와 다형성에 대한 정밀한 모델링이 부족해 보이며, 런타임 다형성에 의한 동적 결합을 정적으로 측정하기 어려운 점도 한계로 지적된다.
전체적으로 이 논문은 OOP 환경에서 복잡도 측정의 정확성을 높이기 위한 실용적인 접근을 제시하지만, 제안된 메트릭의 일반화 가능성과 자동화 도구와의 연계성에 대한 추가 연구가 필요하다.