다중목표 정수선형계획법을 활용한 자동 소프트웨어 인지복잡도 감소 기법

다중목표 정수선형계획법을 활용한 자동 소프트웨어 인지복잡도 감소 기법
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 SonarSource의 인지복잡도(CC) 지표를 기준으로, 메서드 추출 리팩토링을 통해 코드의 복잡도를 낮추는 문제를 다중목표 정수선형계획법(MO‑ILP)으로 모델링한다. 목표는 추출 횟수를 최소화하면서, 추출된 메서드들의 인지복잡도와 코드 라인수(LOC)를 균형 있게 감소시키는 것이다. 이를 위해 ε‑제약법과 하이브리드 알고리즘을 포함한 여러 해결책을 제시하고, Java 오픈소스·산업 프로젝트를 대상으로 실험을 수행해 파레토 최적 해를 도출하였다.

상세 분석

이 연구는 기존에 단일 목표(추출 횟수 최소화)로만 다루어졌던 인지복잡도 감소 문제를 근본적으로 재정의한다. SonarSource가 정의한 CC는 제어 흐름 문장의 등장과 중첩 수준에 따라 가중치가 부여되는 지표이며, 15를 초과하면 유지보수 위험이 커진다. 논문은 CC를 낮추기 위한 가장 직관적인 방법인 Extract‑Method 리팩토링을 선택했으며, 이를 조합 최적화 문제로 모델링한다.

먼저, 가능한 추출 구간을 AST 기반으로 식별하고, 각 구간이 CC와 LOC에 미치는 영향을 정량화한다. 추출 구간의 수는 n개의 문장에 대해 O(n²)로 증가하지만, 실제 적용 가능한 구간은 제어 흐름을 깨뜨리지 않는 제약을 통해 크게 제한된다. 이러한 제약을 정수 변수 xᵢ(0/1)로 표현하고, 다음 세 가지 목표 함수를 정의한다.

  1. 추출 횟수 최소화: Σxᵢ → 최소화, 과도한 메서드 분할을 방지한다.
  2. CC 균형: 추출 후 각 메서드의 CC가 목표 임계값(≤15) 이하이면서 전체 CC 감소량을 최대화하도록 Σ(CCᵢ·xᵢ) → 최소화(또는 최대화) 형태로 설계한다.
  3. LOC 균형: 추출된 메서드들의 라인 수가 지나치게 작거나 크게 변하지 않도록 Σ(LOCᵢ·xᵢ)와 원본 메서드 LOC 간의 차이를 최소화한다.

이 세 목표는 서로 상충할 수 있어 파레토 최적 해 집합을 탐색해야 한다. 논문은 두 가지 알고리즘을 제안한다. 첫 번째는 ε‑제약법으로, 하나의 목표를 최적화하면서 나머지 목표에 대해 허용 오차(ε)를 설정해 다중 목표 문제를 일련의 단일 목표 ILP로 변환한다. 두 번째는 하이브리드 알고리즘으로, ε‑제약법과 메타휴리스틱(예: NSGA‑II) 기반 탐색을 결합해 해 공간을 빠르게 확장하고, 비지배 해를 효율적으로 수집한다. 또한, 증강 ε‑제약 알고리즘을 도입해 기존 ε‑제약의 탐색 편향을 보완한다.

도구 구현 측면에서는 “ILP CC Reducer Tool”을 개발하였다. 이 도구는 Java 소스 코드를 파싱해 AST와 제어 흐름 그래프를 생성하고, 가능한 추출 구간을 자동으로 식별한다. 사용자는 목표 가중치와 ε 값을 파라미터화하여 입력할 수 있으며, 내부적으로 CPLEX·Gurobi와 같은 상용 ILP 솔버를 호출한다. 결과는 파레토 전면을 시각화한 그래프와, 각 해에 대응하는 추출 스크립트(리팩토링 패치) 형태로 제공된다.

실험에서는 50여 개의 메서드를 대상으로, 오픈소스 프로젝트(cybercaptor‑server 등)와 사내 산업용 시스템을 포함했다. 각 메서드에 대해 단일 목표 ILP와 제안된 MO‑ILP를 비교했으며, MO‑ILP는 평균 12% 이상의 CC 감소와 동시에 LOC 변동을 ±5% 이내로 유지하는 균형 잡힌 해를 제공했다. 파레토 전면에 위치한 해들은 개발자가 “추출 횟수는 적당히, 복잡도는 크게, 라인 수는 크게 변하지 않음”이라는 직관에 부합함을 확인했다.

한계점으로는 ILP 모델의 규모가 커질수록(문장 수·가능 추출 구간 수 증가) 솔버 실행 시간이 급격히 상승한다는 점을 들었다. 이를 완화하기 위해 추출 후보를 사전 필터링하거나, 부분 문제 분할 기법을 적용하는 방안이 제시되었다. 또한, 현재는 CC와 LOC만을 목표로 삼았지만, 메서드 이름 가독성, 테스트 커버리지 등 추가적인 품질 지표를 포함하는 확장 가능성도 논의된다.

전반적으로, 이 연구는 소프트웨어 리팩토링을 정량적 최적화 문제로 전환하고, 다중 목표 최적화를 통해 실무 개발자가 직관적으로 선택할 수 있는 해 집합을 제공함으로써, 코드 유지보수 비용 감소와 품질 향상에 기여한다.


댓글 및 학술 토론

Loading comments...

의견 남기기