[논문 리뷰] API Beauty is in the eye of the Clients: 2.2 Million Maven Dependencies reveal the Spectrum of Client-API Usages
이 연구는 94개의 인기 있는 자바 라이브러리에서 220만 개의 Maven 종속성을 분석하여, 대부분의 API 유형이 적어도 한 명의 클라이언트에 의해 사용되지만, 대부분의 클라이언트 사용은 소수의 핵심 유형에 의해 차지됨을 밝혀냈다. 이는 헤이럼의 법칙과 실제 관찰 간의 역설을 해소하며, 사용 패턴의 스펙트럼을 보여주는데, 대부분의 API는 최소한으로 사용되지만, 클라이언트 수가 많아지면 희귀한 요소들조차도 사용되기 시작함으로써, API 유지를 위한 핵심 요소 우선순위 설정과 문서화가 가능하다는 점을 시사한다.
Hyrum's law states a common observation in the software industry: "With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody". Meanwhile, recent research results seem to contradict this observation when they state that "for most APIs, there is a small number of features that are actually used". We investigate this seeming paradox between the observations in industry and the research literature, with a large scale empirical study of client API relationships in one single ecosystem: Maven Central. We study the 94 most popular libraries in Maven Central, as well as the 829,410 client artifacts that declare a dependency to these libraries and that are available in Maven Central, summing up to 2.2M dependencies. Our analysis indicates the existence of a wide spectrum of API usages, with enough clients, most API types end up being used at least once. Our second key observation is that, for all libraries, there is a small set of API types that are used by the vast majority of its clients. The practical consequences of this study are two-fold: (i) it is possible for API maintainers to find an essential part of their API on which they can focus their efforts; (ii) API developers should limit the public API elements to the set of features for which they are ready to have users.
연구 동기 및 목표
- Hyrum의 법칙(모든 관찰 가능한 동작은 사용된다)과 실제로 사용되는 API 기능의 일부분에만 초점이 맞춰진 연구 결과 사이의 명백한 모순을 해결하기 위해.
- Maven Central이라는 대규모 실세계 생태계에서 클라이언트-API 사용 패턴의 스펙트럼을 조사하기 위해.
- 공통적으로 사용되는 API 요소에 집중함으로써 API 유지보수 노력과 지원 가능한 클라이언트 수의 상호 교환 관계를 규명하기 위해.
- API 개발자들이 공개 표면적을 줄이면서도 광범위한 클라이언트 호환성을 유지할 수 있도록 실질적인 통찰을 제공하기 위해.
- 다른 API의 유형 중 소수의 유형만 유지해도 대부분의 클라이언트를 지원할 수 있는지 가능성 탐색하기 위해.
제안 방법
- 2018년 9월 기준으로 Maven 종속성 그래프(MDG)에서 829,410개의 클라이언트 아티팩트와 5,225개의 라이브러리 버전을 수집하였다.
- 실제 API 사용을 탐지하기 위해 정적 바이트코드 분석을 수행하였으며, 선언된 종속성과 런타임 사용을 구분하였다.
- 각 API의 모든 버전을 통해 사용 패턴을 분석하여 누적 사용량을 확인한 후, 가장 인기 있는 버전에 집중하였다.
- ‘Core_n’을 정의하여 n%의 클라이언트를 지원하기 위해 필요한 최소한의 API 유형 집합을 설정하였으며, 소멸 순서를 사용하여 영향을 측정하였다.
- 통계 분석을 통해 94개의 라이브러리에서 클라이언트에 의해 0명, 소수, 대부분의 클라이언트에 의해 사용되는 API 유형의 비율을 정량화하였다.
- 결과의 타당성을 검증하기 위해 세 명의 연구자가 수작업으로 검토하였으며, 재현 가능성을 위해 모든 데이터와 코드를 오픈소스로 공개하였다.
실험 결과
연구 질문
- RQ1Maven Central의 선언된 종속성이 실제로 런타임 API 사용으로 이어지는 정도는 어느 정도인가?
- RQ2라이브러리의 가장 인기 있는 버전에서 최소한 한 명의 클라이언트에 의해 사용되는 API 유형은 몇 개인가?
- RQ3다수의 클라이언트 사용을 차지하는 API 유형의 비율은 얼마이며, 이 비율은 라이브러리 간에 어떻게 달라지는가?
- RQ4클라이언트의 상당 부분을 유지보수하는 데 있어 API의 유형 중 소수만 유지해도 가능한가?
- RQ5리플렉션 또는 동적 호출의 존재가 정적 분석을 통한 API 사용 탐지 정확도에 영향을 미치는가?
주요 결과
- 선언된 종속성 중 41.13%는 바이트코드 수준에서 실제 API 사용이 전혀 발생하지 않아, 선언과 런타임 사용 사이에 상당한 격차가 있음을 시사한다.
- 각 라이브러리의 가장 인기 있는 버전에서, 모든 공개 API 멤버가 적어도 한 명의 클라이언트에 의해 사용되고 있어, 대규모에서 Hyrum의 법칙이 확인되었다.
- 94개 라이브러리의 초과 절반에서, API 유형의 12%만으로도 75%의 클라이언트를 지원할 수 있었으며, 이는 빈번히 사용되는 요소의 강력한 핵심 집합이 있음을 시사한다.
- gson:2.3.1과 같은 라이브러리의 경우, 모든 클라이언트를 지원하기 위해 162개의 API 유형을 유지해야 하지만, 90%의 클라이언트만 지원하도록 집중할 경우 20개의 API 유형(12%)으로 줄일 수 있어 유지보수 노력이 크게 감소한다.
- 클라이언트 기반의 규모가 충분히 커지면, 희귀하거나 특수한 API 유형조차도 적어도 한 명의 클라이언트에 의해 사용됨으로써, Hyrum의 법칙이 지속됨을 뒷받침한다.
- 클라이언트 코드에서 리플렉션의 사용 빈도는 낮아서(메서드의 ≤0.47%), 이 맥락에서 정적 분석을 통한 실제 API 사용 탐지가 신뢰할 수 있음을 시사한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.