[논문 리뷰] An Empirical Study on the Impact of Refactoring Activities on Evolving Client-Used APIs
이 사례 기반 연구는 183개 버전에 걸쳐 8개의 인기 있는 자바 라이브러리에서 클라이언트가 사용하는 API에 대한 리팩터링의 영향을 분석하며, 자동화된 도구를 사용해 총 12,900건의 리팩터링과 9,700건의 API 손상 사례를 탐지하였다. 연구 결과, 클라이언트가 사용하는 API 손상의 약 37%만이 리팩터링으로 인해 직접 발생하며, 나머지 63%는 버그 수정 및 기능 추가 등으로 인해 발생함을 확인하였다. 이는 리팩터링 활동 중에도 라이브러리 유지를 위한 후행 호환성 우선 순위가 유지됨을 시사한다.
Context: Refactoring is recognized as an effective practice to maintain evolving software systems. For software libraries, we study how library developers refactor their Application Programming Interfaces (APIs), especially when it impacts client users by breaking an API of the library. Objective: Our work aims to understand how clients that use a library API are affected by refactoring activities. We target popular libraries that potentially impact more library client users. Method: We distinguish between library APIs based on their client-usage (refereed to as client-used APIs) in order to understand the extent to which API breakages relate to refactorings. Our tool-based approach allows for a large-scale study across eight libraries (i.e., totaling 183 consecutive versions) with around 900 clients projects. Results: We find that library maintainers are less likely to break client-used API classes. Quantitatively, we find that refactoring activities break less than 37% of all client-used APIs. In a more qualitative analysis, we show two documented cases of where non-refactoring API breaking changes are motivated other maintenance issues (i.e., bug fix and new features) and involve more complex refactoring operations. Conclusion: Using our automated approach, we find that library developers are less likely to break APIs and tend to break client-used APIs when addressing these maintenance issues.
연구 동기 및 목표
- 진행 중인 소프트웨어 라이브러리에서 리팩터링 활동이 클라이언트가 사용하는 API에 미치는 영향을 이해하기 위해.
- 클라이언트가 사용하는 API의 손상이 리팩터링 외의 유지보수 활동에 의해 얼마나 영향을 받는지 조사하기 위해.
- 리팩터링 시 클라이언트 대상 API를 다룰 때 라이브러리 유지보수자가 후행 호환성을 얼마나 우선시하는지 평가하기 위해.
- 다시 연구하거나 추가 연구를 위해 활용할 수 있도록, 대규모이고 도구 기반의 API 손상 및 리팩터링 데이터셋을 제공하기 위해.
제안 방법
- 183개의 연속된 버전의 8개의 인기 있는 자바 라이브러리에서 리팩터링 작업(예: move_method, rename_method 등)을 탐지하기 위해 자동화된 정적 분석을 사용하였다.
- API 손상은 바이트코드 분석을 통해 라이브러리 버전 간의 이진 호환성을 비교함으로써 식별하였다.
- 클라이언트가 실제로 사용하는 API를 파악하기 위해 실제 클라이언트 프로젝트 약 900개를 분석하여 사용 중인 API를 특정하였다.
- 리팩터링 유형과 API 손상 빈도 간의 관계를 분석하기 위해 비모수적 통계 검정을 적용하였다.
- 모든 리팩터링과 손상 사례 데이터셋을 포함한 복제 팩키지를 제작하고, 공개적으로 제공하였다.
실험 결과
연구 질문
- RQ1진행 중인 소프트웨어 라이브러리에서 클라이언트가 사용하는 API가 리팩터링 활동으로 인해 얼마나 깨지는가?
- RQ2클라이언트가 사용하는 API와 비클라이언트가 사용하지 않는 API 간에 리팩터링 빈도와 유형은 어떻게 다를까?
- RQ3리팩터링으로 인한 API 손상 이외의 나머지 손상은 무엇에 의해 유도되며, 버그 수정이나 기능 추가와 같은 유지보수 작업과 어떻게 관련이 있는가?
- RQ4특정 리팩터링 유형(예: rename_method, move_field 등)이 다른 유형보다 클라이언트가 사용하는 API를 더 자주 깨우는가?
주요 결과
- 클라이언트가 사용하는 API 손상의 약 37%만이 리팩터링 작업으로 인해 직접 발생하며, 이는 대부분의 손상이 리팩터링 외의 활동에서 기인함을 시사한다.
- 라이브러리 유지보수자는 클라이언트가 사용하는 API를 내부 클래스나 비클라이언트가 사용하지 않는 클래스보다 훨씬 덜 깨뜨리는 경향이 있다.
- 나머지 63%의 API 손상은 주로 버그 수정 및 기능 추가와 같은 비리팩터링 유지보수 작업으로 인해 발생한다.
- move_method, rename_method, move_field와 같은 단순한 리팩터링은 비클라이언트가 사용하지 않는 클래스보다 클라이언트가 사용하는 API에 더 적게 적용된다.
- 복잡한 리팩터링이 비리팩터링 기반의 손상과 자주 관련되어 있음을 확인하여, 디자인 또는 유지보수 측면에서 더 깊은 문제를 암시한다.
- 12,900건의 리팩터링과 9,700건의 API 손상 사례를 포함한 공개된 데이터셋은 향후 API 진화 연구의 재현 및 도구 개발을 가능하게 한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.