Skip to main content
QUICK REVIEW

[논문 리뷰] CODIT: Code Editing with Tree-Based NeuralMachine Translation

Saikat Chakraborty, Miltiadis Allamanis|arXiv (Cornell University)|2018. 09. 30.
Software Engineering Research인용 수 9
한 줄 요약

CODIT는 실제 소스 코드 패치에서 학습하고 코드 변경 사항을 제안하기 위해 트리 기반 신경 기계 번역 모델을 제안한다. 이는 소스 코드의 문법적 구조와 대규모 오픈소스 진화 데이터를 활용한다. 30,000개의 변경 사항으로 훈련하고 6,000개의 패치로 평가한 결과, 표준 NMT보다 코드 문법을 잘 유지하며 버그 수정 및 리팩터링 제안을 효과적으로 생성한다.

ABSTRACT

The way developers edit day-to-day code tends to be repetitive, often using existing code elements. Many researchers have tried to automate repetitive code changes by learning from specific change templates which are applied to limited scope. The advancement of Neural Machine Translation (NMT) and the availability of vast open-source evolutionary data opens up the possibility of automatically learning those templates from the wild. However, unlike natural languages, for which NMT techniques were originally devised, source code and its changes have certain properties. For instance, compared to natural language, source code vocabulary can be significantly larger. Further, good changes in code do not break its syntactic structure. Thus, deploying state-of-the-art NMT models without adapting the methods to the source code domain yields sub-optimal results. To this end, we propose a novel Tree based NMT system to model source code changes and learn code change patterns from the wild. We realize our model with a change suggestion engine: CODIT and train the model with more than 30k real-world changes and evaluate it on 6k patches. Our evaluation shows the effectiveness of CODIT in learning and suggesting patches.CODIT also shows promise generating bug fix patches.

연구 동기 및 목표

  • 사전 정의된 템플릿이 아닌 실제 세계의 코드 변경 사항에서 학습함으로써 반복적인 코드 편집을 자동화하는 데 도전한다.
  • 자연어보다 더 큰 어휘 집합과 더 엄격한 문법 제약 조건을 가진 소스 코드에 신경 기계 번역 기법을 적용한다.
  • 수정 과정에서 코드 구조를 유지하여 생성된 패치의 문법적 정확성을 보장하는 모델을 개발한다.
  • 실제 세계의 코드 변경 제안 및 버그 수정 생성에 대한 모델의 효과성을 평가한다.

제안 방법

  • CODIT는 소스 코드를 추상 구문 트리(_ASTs_)로 모델링하여 계층적 구조를 포착하는 트리 기반 신경 기계 번역 아키텍처를 사용한다.
  • AST 순회를 통해 소스 코드 변경 사항을 인코딩하고, 트리 구조의 어텐션을 사용하는 시퀀스 투 시퀀스 프레임워크를 통해 새로운 코드로 디코딩한다.
  • 오픈소스 저장소에서 추출한 30,000개 이상의 실제 세계 코드 변경 사항을 엔드 투 엔드로 훈련한다.
  • 희귀하거나 복잡한 코드 토큰을 번역 과정에서 유지하기 위해 복사 메커니즘을 활용하여 일반화 능력을 향상시킨다.
  • 코드 편집 중에 패치를 제안하는 엔진으로 시스템을 구현한다.
  • 정확도와 문법적 정확성을 측정하기 위해 6,000개의 패치로 구성된 별도의 테스트 세트를 사용해 평가한다.

실험 결과

연구 질문

  • RQ1트리 기반 NMT 모델은 실제 세계의 진화 데이터에서 구조적으로 올바른 코드 변경 사항을 효과적으로 학습하고 생성할 수 있는가?
  • RQ2CODIT는 표준 NMT 모델에 비해 정확하고 구조적으로 타당한 코드 패치를 제안하는 데 얼마나 효과적인가?
  • RQ3CODIT는 의미 있는 버그 수정 패치를 생성하는 데 얼마나 일반화될 수 있는가?
  • RQ4AST로 코드를 모델링하면 평면적 시퀀스 모델에 비해 코드 변경 제안의 품질을 향상시키는가?

주요 결과

  • CODIT는 소스 코드의 구조적 통합성을 유지함으로써 표준 NMT 모델보다 문법적으로 정확한 코드 패치 생성에서 뚜렷한 우월성을 보였다.
  • 모델은 실제 세계의 코드 변경 사항을 높은 정확도로 제안하여 미리 보지 않은 패치에 대해서도 강력한 일반화 능력을 입증했다.
  • CODIT는 현실적으로 타당한 버그 수정 패치를 성공적으로 생성하여 자동 디버깅 보조의 잠재력을 보였다.
  • 트리 구조의 어텐션과 AST 기반 인코딩을 사용함으로써 복잡한 코드 구조와 희귀 토큰을 더 잘 다룰 수 있었다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.