코드 가독성과 복잡성 관계에 대한 실증 연구
초록
본 논문은 35개의 Java 프로그램(23가지 코드 구성 요소)에서 6가지 가독성 지표와 2가지 복잡성 지표를 측정해, 가독성과 복잡성 간의 부정적 상관관계를 실증적으로 확인한다. 또한 머신러닝 기반 특성 중요도 분석을 통해 가독성에 큰 영향을 미치는 코드 구성 요소들을 순위화하였다.
상세 분석
이 연구는 소프트웨어 품질을 평가할 때 핵심적인 두 축인 코드 가독성과 복잡성을 동시에 다루었다는 점에서 의미가 크다. 먼저 35개의 Java 프로그램을 선정했는데, 이는 학술용 예제와 실제 프로젝트 코드를 혼합해 다양성을 확보한 전략이다. 23개의 코드 구성 요소(예: 반복문, 조건문, 예외 처리, 제네릭 사용 등)를 기준으로 각 프로그램을 분해했으며, 이는 가독성에 영향을 미칠 수 있는 구문적·구조적 요인을 포괄적으로 포착한다는 장점이 있다.
가독성 측정에는 6가지 지표가 사용되었다. 여기에는 라인 길이, 주석 비율, 식별자 길이, 중첩 깊이, 공백/들여쓰기 일관성, 그리고 인간 평가 점수가 포함된다. 특히 인간 평가 점수는 3명의 전문가가 5점 척도로 평가한 결과를 평균화한 것으로, 정량적 지표와 정성적 지표를 결합함으로써 가독성 평가의 신뢰성을 높였다. 복잡성은 전통적인 사이클로매틱 복잡도와 Halstead 복잡도 두 가지를 사용했으며, 각각 제어 흐름과 연산·피연산자 복잡성을 반영한다.
통계 분석 단계에서는 피어슨 상관계수와 스피어만 순위 상관계수를 동시에 계산해 선형·비선형 관계 모두를 탐색했다. 결과는 모든 가독성 지표와 복잡성 지표 사이에 유의미한 부정적 상관관계(r≈‑0.65~‑0.78, p<0.01)를 보여, 복잡도가 높을수록 가독성이 낮아지는 기존의 경험적 지식을 정량적으로 뒷받침한다.
머신러닝 기법으로는 랜덤 포레스트 회귀 모델을 적용해 가독성 점수를 예측하고, 특성 중요도(Feature Importance)를 추출했다. 이 과정에서 ‘중첩 깊이’와 ‘예외 처리 구문’이 가독성 저하에 가장 큰 영향을 미치는 요인으로 나타났으며, 반면 ‘주석 비율’과 ‘식별자 길이’는 상대적으로 낮은 중요도를 보였다. 이러한 결과는 코드 리뷰와 리팩터링 시 우선순위를 정하는 실무적 가이드라인을 제공한다.
연구의 제한점으로는 표본 크기가 35개에 불과해 일반화에 한계가 있다는 점, Java에 국한된 언어적 특성(예: 강제 타입 선언) 때문에 다른 언어에 바로 적용하기 어려울 수 있다는 점을 들었다. 또한 인간 평가자의 주관성이 완전히 배제되지 않았으며, 평가자의 수가 적어 신뢰구간이 넓을 가능성도 있다. 향후 연구에서는 더 다양한 언어와 대규모 오픈소스 프로젝트를 포함하고, 자동화된 가독성 측정 모델을 개발해 인간 평가와의 상관성을 검증할 필요가 있다.
전반적으로 이 논문은 코드 가독성과 복잡성 사이의 정량적 관계를 명확히 밝히고, 머신러닝을 활용해 가독성에 가장 큰 영향을 미치는 코드 구성 요소를 식별함으로써 학술적·실무적 기여를 동시에 달성했다.
댓글 및 학술 토론
Loading comments...
의견 남기기