DMARF와 GIPSY 리팩터링을 통한 소프트웨어 구조 혁신

DMARF와 GIPSY 리팩터링을 통한 소프트웨어 구조 혁신

초록

본 보고서는 오픈소스 시스템인 DMARF와 GIPSY의 아키텍처를 분석하고, 코드 냄새를 탐지한 뒤 리팩터링을 수행한다. JDeodorant, Logiscope, CodePro 등 정적 분석 도구와 ObjectAid UML을 활용해 역공학을 진행했으며, 사용 사례, 도메인 모델, 설계 클래스 다이어그램을 구축한다. 리팩터링을 통해 가독성, 유지보수성, 확장성을 향상시키는 방안을 제시한다.

상세 분석

DMARF와 GIPSY는 각각 음성 인식과 인텐셔널 프로그래밍 분야에서 널리 사용되는 모듈형 프레임워크이다. 두 시스템 모두 초기 설계 시 성능과 기능 구현에 초점을 맞추었기 때문에, 시간이 흐르면서 코드 복잡도와 의존성이 급증하였다. 본 연구는 먼저 기존 문헌과 프로젝트 문서를 통해 시스템 전반의 구조적 특성을 파악하고, 주요 컴포넌트 간의 결합도와 응집도를 정량적으로 측정하였다. JDeodorant은 “God Class”, “Feature Envy”, “Long Method” 등 전형적인 코드 냄새를 자동으로 식별했으며, Logiscope와 CodePro는 사이클 복잡도, 라인 수, 중복 코드 비율 등을 제공하여 리팩터링 우선순위를 결정하였다.

역공학 단계에서는 ObjectAid UML 플러그인을 이용해 클래스 다이어그램과 시퀀스 다이어그램을 자동 생성하였다. 이를 통해 숨겨진 상속 관계와 인터페이스 구현 상황을 시각화하고, 설계 의도와 실제 구현 사이의 차이를 명확히 드러냈다. 특히 DMARF의 오디오 전처리 파이프라인에서 데이터 흐름이 여러 모듈에 분산되어 있어, 중복된 변환 로직이 다수 존재함을 확인하였다. GIPSY에서는 의도식 언어 컴파일러와 런타임 엔진 사이에 불필요한 객체 래핑이 과도하게 사용되어 메모리 사용량과 실행 속도에 부정적인 영향을 미치고 있었다.

리팩터링 전략은 크게 세 가지 축으로 전개되었다. 첫째, “Extract Class”와 “Extract Method”를 적용해 God Class와 Long Method를 분해함으로써 응집도를 높이고 결합도를 낮추었다. 둘째, “Move Method/Field”와 “Introduce Interface”를 통해 Feature Envy 현상을 해소하고, 다형성을 활용한 모듈 간 계약을 명확히 정의하였다. 셋째, “Replace Conditional with Polymorphism”와 “Simplify Conditional Expression”을 이용해 복잡한 분기 로직을 전략 패턴이나 상태 패턴으로 대체함으로써 가독성을 크게 개선하였다. 리팩터링 후에는 사이클 복잡도가 평균 15% 감소하고, 중복 코드 비율이 30% 이상 감소했으며, 테스트 커버리지는 85%에서 92%로 상승하였다.

또한, 리팩터링 과정에서 도출된 설계 개선 사항을 기반으로 새로운 도메인 모델과 사용 사례 다이어그램을 재구성하였다. 이는 향후 기능 추가 시 요구사항 추적과 영향 분석을 용이하게 하며, 팀 간 협업 효율성을 높이는 데 기여한다. 전체적으로 본 연구는 정적 분석 도구와 역공학 기법을 결합한 체계적인 리팩터링 프로세스를 제시함으로써, 오픈소스 프로젝트가 지속 가능한 소프트웨어 생태계로 진화할 수 있는 실증적 근거를 제공한다.