Skip to main content
QUICK REVIEW

[논문 리뷰] DeepDebug: Fixing Python Bugs Using Stack Traces, Backtranslation, and Code Skeletons

Dawn Drain, Colin B. Clement|arXiv (Cornell University)|2021. 05. 19.
Software Engineering Research참고 문헌 25인용 수 14
한 줄 요약

DeepDebug는 스택 트레이스, 백트랜슬레이션, 코드 스켈레톤을 활용하여 파이썬 버그를 수정하는 시퀀스-투-시퀀스 트랜스포머 모델을 제안한다. 실행 가능한 테스트 벤치마크에서 첫 번째 尝시도 성공률이 75%에 달하고 QuixBugs에서 잘못된 경고율을 35%에서 5%로 감소시켜 이전 작업보다 50% 이상 높은 수정 성능을 달성하며, 추론 시간을 6시간에서 1분으로 크게 단축시켰다.

ABSTRACT

The joint task of bug localization and program repair is an integral part of the software development process. In this work we present DeepDebug, an approach to automated debugging using large, pretrained transformers. We begin by training a bug-creation model on reversed commit data for the purpose of generating synthetic bugs. We apply these synthetic bugs toward two ends. First, we directly train a backtranslation model on all functions from 200K repositories. Next, we focus on 10K repositories for which we can execute tests, and create buggy versions of all functions in those repositories that are covered by passing tests. This provides us with rich debugging information such as stack traces and print statements, which we use to finetune our model which was pretrained on raw source code. Finally, we strengthen all our models by expanding the context window beyond the buggy function itself, and adding a skeleton consisting of that function's parent class, imports, signatures, docstrings, and method bodies, in order of priority. On the QuixBugs benchmark, we increase the total number of fixes found by over 50%, while also decreasing the false positive rate from 35% to 5% and decreasing the timeout from six hours to one minute. On our own benchmark of executable tests, our model fixes 68% of all bugs on its first attempt without using traces, and after adding traces it fixes 75% on first attempt. We will open-source our framework and validation set for evaluating on executable tests.

연구 동기 및 목표

  • 자동 프로그램 수리에서 발생하는 높은 잘못된 경고율 문제를 해결하라. 이는 패치가 테스트를 통과하지만 진정으로 수정된 것은 아님을 의미한다.
  • 스택 트레이스와 프린트 문을 포함한 실행 가능한 테스트 피드백을 활용하여 버그 위치 특정화 및 수리 성능을 향상시킨다.
  • 코드 스켈레톤(임포트, 서명, 문서화 문자열, 부모 클래스 컨텍스트)을 통합하여 모델의 일반화 능력과 정확도를 향상시킨다.
  • 추론 시간을 수시간에서 1분 이내로 단축시키면서도 벤치마크 데이터셋에서 수정 성능을 높인다.
  • 실제 개발 워크플로우에 통합 가능한 확장성 있는 종단 간 자동 디버깅 프레임워크를 개발한다.

제안 방법

  • 역방향 Git 커밋을 기반으로 버그 생성 모델을 훈련하여 데이터 증강을 위한 합성 버그를 생성한다.
  • 백트랜슬레이션을 활용해 200만 개의 저장소에서 사전 훈련된 시퀀스-투-시퀀스 트랜스포터(DeepDev-py 기반)를 미세조정하여 버그-수리 매핑을 학습한다.
  • 실행 가능한 테스트가 있는 1만 개의 저장소에서 합성 버그를 함수에 삽입하고, 테스트 커버리지와 스택 트레이스를 유지한다.
  • 이 실행 가능한 테스트 데이터로 모델을 재미세조정하며, 스택 트레이스와 확장된 컨텍스트(코드 스켈레톤)를 통합하여 위치 특정화 및 수리 성능을 향상시킨다.
  • 축 방향 임베딩을 사용해 모델의 컨텍스트 창을 확장하여 상위 클래스, 임포트, 함수 서명, 문서화 문자열을 우선순위 순서로 포함한다.
  • top-k 및 top-p 디코딩을 활용한 샘플링 전략을 적용해 다수의 후보 패치를 생성하고, 이를 테스트 세트에 대해 평가한다.

실험 결과

연구 질문

  • RQ1대규모 원시 파이썬 코드에 대한 백트랜슬레이션은 자동 프로그램 수리의 일반화 능력을 향상시키는가?
  • RQ2코드 스켈레톤(임포트, 서명, 문서화 문자열, 상위 클래스)이 버그 위치 특정화 및 수리 정확도에 얼마나 기여하는가?
  • RQ3백트랜슬레이션과 코드 스켈레톤과 결합했을 때 스택 트레이스가 모델 수리에 얼마나 효과적으로 기여하는가?
  • RQ4통합된 모델이 추론 시간을 수시간에서 수분으로 단축시키면서도 높은 수정 성공률과 낮은 잘못된 경고율을 동시에 달성할 수 있는가?
  • RQ5실행 가능한 테스트 피드백(예: 스택 트레이스)을 활용할 경우, 합성 벤치마크보다 실제 실행 가능한 버그에 대해 성능이 향상되는가?

주요 결과

  • QuixBugs 벤치마크에서 DeepDebug는 40개의 버그 중 21개(53%)를 수정했으며, 이는 이전 최고 성능 대비 50% 향상된 성과이며, 잘못된 경고율은 35%에서 1개(5%)로 감소했다.
  • 523개의 실행 가능한 신경 버그로 구성된 자체 벤치마크에서 DeepDebug는 스택 트레이스를 사용할 경우 첫 번째 시도로 523개 중 393개(75%)를 수정했으며, 트레이스 없이 사용했을 경우 68%에서 상승했다.
  • 1위 패치 성공률은 트레이스 없이 사용했을 때 90%에서 트레이스를 사용했을 때 97%로 상승하여 트레이스 인식 수리의 가치를 입증했다.
  • 코드 스켈레톤을 추가함으로써 신경 버그 탐지에서 교차 엔트로피 손실이 25% 감소했으며, 이는 모델의 자신감 향상과 정확한 수정과의 일치도 향상을 의미한다.
  • 모델은 1분의 추론 타임아웃을 달성했으며, 이는 이전 도구들이 사용한 6시간 타임아웃 대비 극적인 향상이다. 동시에 높은 수정 품질을 유지했다.
  • 낮은 퍼플렉서티로 인해 모델이 많은 중복 편집을 생성함으로써, 보다 다양한 수리 후보를 도출하기 위한 샘플링 전략의 향상 필요성을 시사한다.

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

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

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

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