[논문 리뷰] Making refactoring decisions in large-scale Java systems: an empirical stance
이 논문은 대규모 자바 시스템에서 리팩터링을 위한 핵심 클래스를 식별하기 위해 메트릭 기반 접근법을 제안한다. 이는 상속 및 집합 관계 결합도에 대한 잠재적 이득(PG)과 메서드 및 속성 수 등의 클래스 특성들을 통합한다. 연구 결과, 시스템 간 핵심 클래스의 특성에 상당한 차이가 있음을 발견하였으며, Ant 시스템만이 기대되는 핵심 클래스 패턴과 일치하였다. 또한, 다른 도메인(예: 웹 검색)의 메트릭이 소프트웨어 공학 분야에 적합하게 변형되어 목표 지향적 리팩터링 결정에 활용될 수 있음을 강조한다.
Decisions on which classes to refactor are fraught with difficulty. The problem of identifying candidate classes becomes acute when confronted with large systems comprising hundreds or thousands of classes. In this paper, we describe a metric by which key classes, and hence candidates for refactoring, can be identified. Measures quantifying the usage of two forms of coupling, inheritance and aggregation, together with two other class features (number of methods and attributes) were extracted from the source code of three large Java systems. Our research shows that metrics from other research domains can be adapted to the software engineering process. Substantial differences were found between each of the systems in terms of the key classes identified and hence opportunities for refactoring those classes varied between those systems.
연구 동기 및 목표
- 대규모 자바 시스템에서 리팩터링 대상 클래스를 선정하기 위한 체계적인 기준의 부족을 해결하기 위해.
- 시스템 아키텍처의 핵심을 차지하는 중심 클래스를 식별하여 리팩터링의 우선 대상으로 삼기 위해.
- 다른 도메인(예: 웹 검색)에서 유래한 메트릭이 소프트웨어 공학 분야에 적용되어 리팩터링 의사결정 지원에 활용될 수 있는지 평가하기 위해.
- 다양한 자바 시스템(라이브러리 및 애플리케이션 포함) 간 핵심 클래스의 특성 차이를 조사하기 위해.
- 핵심 클래스가 일반적으로 상속 계층도의 기초에 위치해 있다는 가설을 검증하기 위해.
제안 방법
- 원래 웹 검색 분야에서 사용되던 잠재적 이득(PG) 메트릭을 변형하여, UML 클래스 다이어그램 기반의 상속 및 집합 관계 결합도를 바탕으로 클래스 중심성(centrality)을 측정하였다.
- 세 대규모 자바 시스템(JDK, Ant, Tomcat)에서 클래스 수준의 특성 네 가지를 추출하였다: 메서드 수, 속성 수, 상속 결합도, 집합 관계 결합도.
- 유비쿼터스 그래프 기반 분석을 통해 상속 및 집합 관계 관계를 기반으로 각 클래스의 PG 점수를 계산하고, 클래스 중요도를 순위화하였다.
- PG 점수를 메서드 및 속성 수의 원시 수치와 융합하여 리팩터링 대상으로 삼을 수 있는 핵심 클래스 후보를 식별하였다.
- Fowler의 72가지 리팩터링을 메타 분석하여, 결합도 및 클래스 크기에 의존하는 핵심 리팩터링 패턴(예: Move Field, Move Method)의 선택 근거를 제시하였다.
- 의존성 분석을 통해 핵심 리팩터링을 식별하고, 집합 관계, 상속, 클래스 크기 등이 리팩터링 필요성의 핵심 지표임을 정당화하였다.
실험 결과
연구 질문
- RQ1대규모 자바 시스템에서 리팩터링에 가장 적합한 클래스는 무엇이며, 이를 신뢰성 있게 식별할 수 있는 기준은 무엇인가?
- RQ2특히 잠재적 이득 메트릭을 비롯한 다른 도메인의 메트릭이 클래스 수준의 리팩터링 의사결정에 효과적으로 재사용될 수 있는가?
- RQ3기존의 추측에 따르면 핵심 클래스는 상속 계층도의 기초에 위치해 있는데, 이것이 실제로 성립하는가?
- RQ4애플리케이션과 라이브러리 기반 시스템 간에 핵심 클래스의 특성(예: 메서드 수, 속성 수, 생성자 수, 결합도)은 어떻게 다를까?
- RQ5핵심 리팩터링 패턴(예: Move Field, Move Method)과 핵심 클래스의 구조적 특성 간의 관계는 어떠한가?
주요 결과
- 잠재적 이득 메트릭은 세 시스템 전반에서 핵심 클래스를 성공적으로 식별하였으며, 다른 도메인에서 유래한 메트릭이 소프트웨어 공학 분야에 효과적으로 적응되어 리팩터링 우선순위 설정에 활용될 수 있음을 입증하였다.
- 시스템 간 상당한 차이가 발견되었으며, JDK는 평균 1.242개의 생성자를 보였고, Ant는 1.073개, Tomcat은 1.069개로, 서로 다른 구조적 패턴을 나타내었다.
- 유일하게 추측 C1에서 정의한 핵심 클래스의 기대 특성을 충족한 것은 Ant 시스템 뿐이었으며, 이는 핵심 클래스가 항상 상속 계층도의 기초에 위치하지는 않음을 시사한다.
- 메타 분석 결과, Move Field 및 Move Method는 집합 관계 및 결합도에 의존하는 핵심 리팩터링 패턴임을 확인하였으며, 이는 리팩터링 필요성 지표로 포함할 근거를 제공한다.
- 핵심 클래스에선 Large Class 및 Primitive Obsession라는 코드 냄새가 빈번하게 발견되었으며, 이는 높은 메서드 수와 속성 수가 리팩터링의 긴급성을 나타내는 지표로 유용하다는 것을 뒷받침한다.
- 이 연구는 소프트웨어 설계에서의 파워 법칙에 대한 이전 연구 결과를 지지하며, 특히 복잡한 시스템에서 인터페이스가 다중 상속의 대체 수단으로 자주 사용된다는 점을 시사한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.