Skip to main content
QUICK REVIEW

[논문 리뷰] Tree2Tree Neural Translation Model for Learning Source Code Changes.

Saikat Chakraborty, Miltiadis Allamanis|arXiv (Cornell University)|2018. 09. 30.
Software Engineering Research참고 문헌 54인용 수 21
한 줄 요약

이 논문은 실제 패치에서 소스 코드 변경 패턴을 추출하여 추상 구문 트리(abstract syntax trees, ASTs)로 코드를 모델링함으로써 소스 코드 변경 패턴을 학습하는 트리 기반 신경 기계 번역 모델인 CODIT를 제안한다. 24,000건의 변경 사항으로 훈련하고 5,000개의 패치로 평가한 결과, 정확한 코드 변경을 제안하고 Defects4J의 80개 버그 중 25개를 수정하는 데 성공하여, 문법적으로 유효하고 재사용 가능한 코드 변환을 학습하는 데 효과적임을 입증한다.

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 deep neural networks and the availability of vast open-source evolutionary data opens up the possibility of automatically learning those templates from the wild. However, deep neural network based modeling for code changes and code in general introduces some specific problems that needs specific attention from research community. 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 neural network models without adapting the methods to the source code domain yields sub-optimal results. To this end, we propose a novel tree-based neural network system to model source code changes and learn code change patterns from the wild. Specifically, we propose a tree-based neural machine translation model to learn the probability distribution of changes in code. We realize our model with a change suggestion engine, CODIT, and train the model with more than 24k real-world changes and evaluate it on 5k patches. Our evaluation shows the effectiveness of CODITin learning and suggesting patches. CODIT can also learn specific bug fix pattern from bug fixing patches and can fix 25 bugs out of 80 bugs in Defects4J.

연구 동기 및 목표

  • 실제 소스 코드 진화 데이터로부터 패턴을 학습함으로써 반복적인 코드 변경을 자동화하는 데 도전하는 것.
  • 표준 신경망이 코드 번역에서 가지는 한계를 극복하기 위해 코드를 트리로 모델링하여 문법적 구조를 유지하는 것.
  • 사전 정의된 템플릿에 의존하지 않고 의미적이고 문법적으로 유효한 코드 변경을 학습하고 제안하는 시스템을 개발하는 것.
  • 표준 벤치마크를 사용하여 모델의 실세계 버그 수정 시나리오에 대한 일반화 능력을 평가하는 것.

제안 방법

  • 모델는 소스 코드 AST를 수정된 AST로 매핑하는 트리-투-트리 신경 기계 번역 프레임워크를 사용하여 문법적 구조를 유지한다.
  • AST를 인코딩하고 디코딩하기 위해 트리 구조의 장기 순환 신경망(Long Short-Term Memory, Tree-LSTM)을 사용하는 인코더-디코더 아키텍처를 채택한다.
  • 오픈소스 저장소에서 추출한 실제 24,000건의 코드 변경 사항을 엔드 투 엔드로 훈련한다.
  • 변경 제안 엔진인 CODIT는 훈련된 모델을 활용해 코드 편집 중 패치 제안을 생성한다.
  • 모델는 진화 데이터에서 학습하여 하드코딩된 템플릿 없이도 일반적인 리팩터링 및 버그 수정 패턴을 포착한다.
  • 평가 시험은 실제 5,000개의 패치를 포함하며, 이 중 80개는 Defects4J 버그 수정 예제이다.

실험 결과

연구 질문

  • RQ1신경 모델은 실제 소스 코드 진화 데이터로부터 의미 있고 문법적으로 유효한 코드 변경 패턴을 직접 학습할 수 있는가?
  • RQ2시퀀스 기반 또는 템플릿 기반 모델과 비교해 트리 기반 신경 번역 모델은 새로운 코드 변경에 대해 얼마나 잘 일반화되는가?
  • RQ3표준 벤치마크의 패치에서 특정 버그 수정 패턴을 얼마나 잘 학습하고 적용할 수 있는가?
  • RQ4실제 소프트웨어 개발 환경에서 정확하고 문법적으로 올바른 코드 변경을 제안할 수 있는가?

주요 결과

  • CODIT는 코드를 추상 구문 트리로 모델링함으로써 높은 문법적 정확도로 코드 변경을 성공적으로 학습하고 제안한다.
  • 5,000개의 테스트 패치로 구성된 보류된 테스트 세트에서 뛰어난 성능을 보이며, 새로운 변경 사항으로의 일반화 능력을 입증한다.
  • CODIT는 Defects4J 벤치마크의 80개 버그 중 25개를 수정하여 실세계 버그 수정 시나리오에서의 효과성을 입증한다.
  • 트리 기반 아키텍처는 표준 시퀀스 기반 신경 모델 대비 코드 구조의 보존 능력이 뛰어나다.
  • 수동으로 템플릿을 정리할 필요 없이 원시적인 코드 진화 데이터에서 재사용 가능한 변경 패턴을 학습한다.

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

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

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

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