타입 스크립트가 필요한 이유: 버그 검출 연구 분석

"To Type or Not to Type: Quantifying Detectable Bugs in JavaScript" (2017, ICSE)에 기술된 내용 입니다.

To Type or Not to Type - Quantifying Detectable Bugs in JavaScript.pdf

자바스크립트는 폭발적으로 성정해 이제는 웹 영역을 넘어서 대규모의 성숙한 프로젝트에서도 사용 되고있다. 자바스크립트는 동적 타입 언어이지만, Facebook의 Flow나 Microsoft의 타입스크립트와 같은 정적 타입 시스템들이 개발되었다. 이 정적 타입 시스템들은 어떤 이점을 제공할까?

저자들은 자바스크립트 프로젝트의 이력을 활용해, 수정된 버그들을 선택하고 해당 수정 직전의 코드를 확인했다.

버그가 있는 코드에 수동으로 타입 어노테이션을 추가하고, Flow와 Typescript가 버그가 있는 코드에서 에러를 보고하는지 테스트했다. 이를 통해 개발자가 버그를 공개 배포 전에 수정할 수 있었는지 확인했고, 에러를 보고한 버그의 비율을 조사했다.

공개된 버그들에 대해 정적 타입 시스템을 평가하는 것은 보수적이다. 개발 과정 중의 버그 검출 효과를 과소평가 하게되고, 코드 검색/자동완성 기능 개선이나 문서화 역할과 같은 다른 이점들은 고려하지 않은 것이다.

이러한 불균형 조건에도 불구하고, 두 정적 타임 시스템 모두 상당한 비율의 공개 버그를 찾아낸다: 모두 15%의 버그를 검출했다.

image.png

Airbnb에서는 무려 38%의 버그를 타입스크립트 사용으로 예방할 수 있었다고 한다.

세 회사가 자바스크립트를 위한 정적 타입 시스템을 개발할 만큼 정적 타입을 중요하게 여겼다: Google이 Closure를 공개했고, 그 다음 Microsoft의 TypeScript, 가장 최근에는 Facebook이 Flow를 발표했다.