Skip to main content
QUICK REVIEW

[논문 리뷰] Dynamic Neural Program Embeddings for Program Repair

Ke Wang, Zhendong Su|arXiv (Cornell University)|2018. 02. 15.
Software Engineering Research인용 수 35
한 줄 요약

이 논문은 실행 트레이스를 통해 프로그램 의미를 포착하는 동적 신경 프로그램 임베딩을 제안한다. 라이브 변수 상태를 순차적 튜플로 모델링하여 프로그램 복구 성능을 향상시킨다. 학생 프로그래밍 과제와 CodeHunt 연습 문제에서 평가한 결과, 의미 기반 임베딩이 문법 기반 임베딩보다 유의미하게 뛰어나며, 검색 기반 복구의 효율성을 높인다.

ABSTRACT

Neural program embeddings have shown much promise recently for a variety of program analysis tasks, including program synthesis, program repair, fault localization, etc. However, most existing program embeddings are based on syntactic features of programs, such as raw token sequences or abstract syntax trees. Unlike images and text, a program has an unambiguous semantic meaning that can be difficult to capture by only considering its syntax(i.e. syntactically similar programs can exhibit vastly different run-time behavior), which makes syntax-based program embeddings fundamentally limited. This paper proposes a novel semantic program embedding that is learned from program execution traces. Our key insight is that program states expressed as sequential tuples of live variable values not only captures program semantics more precisely, but also offer a more natural fit for Recurrent Neural Networks to model. We evaluate different syntactic and semantic program embeddings on predicting the types of errors that students make in their submissions to an introductory programming class and two exercises on the CodeHunt education platform. Evaluation results show that our new semantic program embedding significantly outperforms the syntactic program embeddings based on token sequences and abstract syntax trees. In addition, we augment a search-based program repair system with the predictions obtained from our semantic embedding, and show that search efficiency is also significantly improved.

연구 동기 및 목표

  • 유사한 구조를 가진 프로그램 간의 의미적 차이를 포착하지 못하는 문법 기반 프로그램 임베딩의 한계를 해결하기 위해.
  • 실행 트레이스—특히 라이브 변수 값의 순서어린 시퀀스—가 프로그램 임베딩을 학습하는 데 더 효과적인 기반으로 기능할 수 있는지 탐색하기 위해.
  • 의미 기반 임베딩을 활용해 검색 기반 복구 시스템의 검색 공간을 더 효율적으로 이끌어 프로그램 복구를 향상시키기 위해.
  • 학생이 제출한 코드를 포함한 실제 교육 프로그래밍 환경에서 의미 기반 임베딩의 효과를 평가하기 위해.

제안 방법

  • 실행 중 라이브 변수 값의 순차적 튜플로 프로그램 실행 트레이스를 모델링하여 프로그램 임베딩을 학습한다.
  • 순환 신경망(RNN)을 사용해 이러한 순차적 프로그램 상태를 고밀도 의미 임베딩으로 처리하고 인코딩한다.
  • 실행 트레이스에서 유도된 실행 트레이스를 기반으로 RNN 기반 임베딩 모델을 훈련시켜 동적 의미 행동을 포착한다.
  • 제안된 의미 기반 임베딩의 성능을 원시 토큰 시퀀스와 추상 구문 트리에서 유도된 문법 기반 임베딩과 비교한다.
  • 의미 기반 임베딩 예측 결과를 검색 기반 프로그램 복구 시스템에 통합하여 검색 공간을 안내하고 효율성을 향상시킨다.
  • 실제 학생 프로그래밍 제출물과 CodeHunt 연습 문제에서 오류 유형 예측 작업을 통해 임베딩 품질을 평가한다.

실험 결과

연구 질문

  • RQ1실행 트레이스 기반 프로그램 임베딩이 문법 기반 임베딩보다 프로그램 의미를 더 효과적으로 포착할 수 있는가?
  • RQ2제안된 의미 기반 임베딩은 학생 프로그래밍 과제에서 흔히 발생하는 오류 유형을 예측하는 데 얼마나 효과적인가?
  • RQ3의미 기반 임베딩은 검색 기반 프로그램 복구 시스템의 효율성을 어느 정도 향상시키는가?
  • RQ4의미 기반 임베딩의 성능 향상은 다양한 프로그래밍 작업 및 오류 패tern에서 어떻게 비교되는가?

주요 결과

  • 제안된 의미 기반 프로그램 임베딩은 토큰 시퀀스와 추상 구문 트리에서 유도된 문법 기반 임베딩보다 학생 프로그래밍 제출물에서 오류 유형을 예측하는 데 유의미하게 뛰어나다.
  • 의미 기반 임베딩은 오류 예측 정확도를 향상시켜, 문법적 구조만으로는 포착할 수 없는 의미적 차이를 효과적으로 포착함을 보여준다.
  • 검색 기반 프로그램 복구 시스템에 통합된 의미 기반 임베딩은 검색 공간을 줄이고 복구 효율성을 향상시킨다.
  • 모델의 성능은 CodeHunt 교육 플랫폼과 초급 프로그래밍 과제를 포함한 다양한 프로그래밍 작업에서 일관되게 유지된다.
  • 실행 트레이스를 순차적 라이브 변수 상태로 표현하면 정적 문법적 구조보다 RNN에 더 자연스럽고 효과적인 입력이 된다.
  • 결과적으로 의미 인식 기반 프로그램 임베딩은 순수하게 문법적 표현보다 더 강력하고 정보가 풍부한 복구 도구임을 시사한다.

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

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

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

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