자바 소스 코드 클러스터링 구문과 의미 통합 기법
초록
본 논문은 자바 소스 코드를 대상으로 구문적 특징(구조, 호출 관계)과 의미적 특징(식별자, 주석)을 동시에 추출·통합하여 유사도 행렬을 만든 뒤, 계층적 군집화와 모듈성 최적화를 적용해 효과적인 소프트웨어 클러스터링을 구현한다. 실험 결과는 기존 방법 대비 재사용성·유지보수성 측면에서 우수함을 보여준다.
상세 분석
이 연구는 소프트웨어 시스템을 의미 있는 모듈 단위로 자동 분할하는 ‘클러스터링’ 문제에 대해, 구문적(Syntactic)과 의미적(Semantic) 특징을 동시에 활용하는 새로운 프레임워크를 제시한다. 구문적 특징은 추상 구문 트리(AST) 기반의 클래스‑클래스 상속 구조, 메서드 호출 그래프, 패키지 계층 등을 정량화하여 구조적 결합도를 측정한다. 반면 의미적 특징은 식별자명, 메서드·필드 이름, 주석 및 Javadoc 텍스트를 자연어 처리(NLP) 기법—특히 토큰화, 스테밍, TF‑IDF 가중치—으로 변환하고, 잠재 의미 분석(Latent Semantic Analysis)이나 Word2Vec 기반 임베딩을 통해 의미 공간을 구축한다. 두 종류의 특징을 각각 정규화한 뒤, 가중치 파라미터 α와 β(α+β=1)를 도입해 선형 결합함으로써 전체 유사도 행렬을 만든다. 여기서 α는 구조적 결합을, β는 의미적 연관성을 강조하는 역할을 하며, 실험을 통해 최적 비율을 자동 튜닝한다. 유사도 행렬을 기반으로 계층적 병합 군집화(Hierarchical Agglomerative Clustering)를 수행하고, 군집 수는 모듈성(Modularity) 지표의 최대값을 기준으로 결정한다. 또한, 군집 결과를 후처리하여 사이클을 제거하고, 높은 결합도·낮은 응집도를 보이는 클래스는 재배치하거나 분리한다. 이 과정에서 시간 복잡도는 주요 단계가 O(N²)인 유사도 계산을 제외하고는 O(N log N) 수준에 머물러, 수천 개 클래스 규모의 대형 프로젝트에도 적용 가능함을 입증한다. 실험에서는 JHotDraw, JUnit, Eclipse JDT 등 오픈소스 프로젝트를 대상으로 기존의 구조‑기반 클러스터링, 토픽 모델링 기반 방법과 비교했으며, 재구성 정확도, 모듈 경계 명확성, 유지보수 비용 감소 효과에서 일관된 우수성을 확인했다. 특히 의미적 특징을 포함했을 때, 동일 기능을 수행하지만 다른 패키지에 흩어져 있는 클래스들을 효과적으로 하나의 군집으로 묶어, 개발자가 시스템 전반을 파악하는 데 필요한 인지 부하를 크게 낮춘다. 한계점으로는 다국어 주석 처리 시 NLP 전처리 비용이 증가하고, α·β 파라미터 선택이 도메인에 따라 민감하게 변할 수 있다는 점을 들었다. 향후 연구에서는 동적 실행 추적 데이터를 통합해 런타임 행동 기반 특징을 추가하고, 딥러닝 기반 시퀀스 모델을 활용해 식별자 의미를 보다 정교하게 파악하는 방안을 제시한다.
댓글 및 학술 토론
Loading comments...
의견 남기기