핵심 개념
본 연구는 NPM 생태계에서 발생하는 파괴적 변경의 특징과 원인을 분석하고, 이를 통해 개발자들이 파괴적 변경을 더 잘 이해하고, 향후 이를 감지하는 도구 개발에 활용될 수 있는 정보를 제공합니다.
초록
본 연구는 NPM 생태계에서 발생하는 파괴적 변경에 대한 심층적인 이해를 제공하는 것을 목표로 합니다.
연구 목적
- NPM 생태계에서 문서화된 파괴적 변경과 실제 감지되는 파괴적 변경 간의 일치 정도를 파악합니다.
- JavaScript 및 TypeScript 특유의 구문적 파괴적 변경 유형을 식별합니다.
- 개발자들이 행동적 파괴적 변경을 수행하는 방식을 분석합니다.
- NPM 생태계에서 개발자들이 파괴적 변경을 수행하는 이유를 조사합니다.
연구 방법
본 연구는 Libraries.io에서 제공하는 데이터를 기반으로 50개 이상의 GitHub 스타를 보유하고 GitHub 저장소와 연결된 인기있는 JavaScript 및 TypeScript 프로젝트 35,786개 중 381개를 무작위로 선택하여 분석했습니다. 선택된 프로젝트의 커밋 메시지, 변경 로그, 이슈 및 풀 리퀘스트 텍스트를 분석하여 개발자가 명시적으로 확인한 파괴적 변경을 추출했습니다.
주요 결과
- 감지된 파괴적 변경의 95.4%가 개발자 문서에 기록되어 있으며, 문서화된 파괴적 변경의 81%는 회귀 테스트를 통해 감지될 수 있습니다.
- JavaScript 및 TypeScript 특유의 구문적 파괴적 변경에는 기본 내보내기 제거, 내보내기 위치 제거, 구성 객체의 매개변수 변경, 콜백과 Promise 간 전환, undefined 및 null 간 전환, 메서드 또는 인터페이스 선언에서 필드의 "필수" 및 "선택 사항" 간 전환 등이 있습니다.
- 개발자는 반환 값 사양 변경, 특정 옵션 값에 대한 프로세스 변경, 변수의 기본값 또는 초기값 변경, 오류 처리 방법 변경과 같은 네 가지 주요 유형의 행동적 파괴적 변경을 수행합니다.
- NPM 생태계에서 개발자가 파괴적 변경을 수행하는 주된 이유는 코드 중복성 감소, 식별자 이름 개선, API 디자인 개선의 세 가지로 분류됩니다.
연구의 의의
본 연구는 NPM 생태계에서 발생하는 파괴적 변경에 대한 포괄적인 이해를 제공하며, 이는 향후 파괴적 변경 감지 도구 개발에 유용한 정보를 제공합니다.
연구의 한계점 및 향후 연구 방향
본 연구는 문서화된 파괴적 변경에 초점을 맞추었기 때문에 문서화되지 않은 파괴적 변경에 대한 분석은 제한적입니다. 향후 연구에서는 문서화되지 않은 파괴적 변경을 식별하고 분석하는 방법을 모색해야 합니다. 또한, 본 연구에서 제시된 파괴적 변경 유형 분류는 JavaScript 및 TypeScript에 국한되므로 다른 프로그래밍 언어에 대한 추가 연구가 필요합니다.
통계
감지된 파괴적 변경의 95.4%가 문서화되었습니다.
문서화된 파괴적 변경의 81%는 회귀 테스트를 통해 감지될 수 있습니다.
전체 파괴적 변경 중 Change Behavior 유형이 68.1%를 차지합니다.
Move와 Inline 유형은 각각 1.8%와 0.1%로 가장 낮은 비율을 보입니다.
인용구
"When I first saw the requestCheck() method on ChangeDetectorRef, I assumed it was how I manually run change detection. Others have assumed this as well." (angular/angular #3403)