Skip to main content
QUICK REVIEW

[논문 리뷰] Repair Is Nearly Generation: Multilingual Program Repair with LLMs

Harshit Joshi, José Cambronero|arXiv (Cornell University)|2022. 08. 24.
Software Engineering Research인용 수 15
한 줄 요약

이 논문은 Codex를 기반으로 하는 다국어 프로그램 복구 시스템인 ring을 소개하며, 복구를 현지화, 변환, 후보 순위 매기기로 구성된 프롬프트 기반 작업으로 간주한다. 이 시스템은 파werShell을 포함한 6개의 프로그래밍 언어에서 언어별 복구 엔진과 경쟁 가능한 성능을 달성하며, 대규모 언어 모델이 낮은 노력으로 효과적인 다국어 복구를 가능하게 하며, 사용자가 코드를 작성하고 AI가 수정을 제안하는 뒤집힌 상호작용 모델을 통해 AI가 코드를 보완하는 것이 아니라 수정을 제안하는 방식을 실현함을 보여준다.

ABSTRACT

Most programmers make mistakes when writing code. Some of these mistakes are small and require few edits to the original program -- a class of errors recently termed last mile mistakes. These errors break the flow for experienced developers and can stump novice programmers. Existing automated repair techniques targeting this class of errors are language-specific and do not easily carry over to new languages. Transferring symbolic approaches requires substantial engineering and neural approaches require data and retraining. We introduce RING, a multilingual repair engine powered by a large language model trained on code (LLMC) such as Codex. Such a multilingual engine enables a flipped model for programming assistance, one where the programmer writes code and the AI assistance suggests fixes, compared to traditional code suggestion technology. Taking inspiration from the way programmers manually fix bugs, we show that a prompt-based strategy that conceptualizes repair as localization, transformation, and candidate ranking, can successfully repair programs in multiple languages with minimal effort. We present the first results for such a multilingual repair engine by evaluating on 6 different languages and comparing performance to language-specific repair engines. We show that RING can outperform language-specific repair engines for three of these languages.

연구 동기 및 목표

  • 다양한 프로그래밍 언어에서 최소한의 공학적 노력으로 소규모 구문 수준 오류(‘마지막 마일 오류’로 간주됨)를 복구하는 데 도전하는 것.
  • 단일 대규모 언어 모델(LM)이 언어별로 별도의 훈련이나 기호 공학 없이도 다국어 복구 엔진으로 기능할 수 있는지 탐색하는 것.
  • 인간 개발자가 오류를 현지화하고 변환하며 후보를 순위 매기는 방식을 모방하는 프롬프트 기반 복구 전략의 일반화 능력과 효과성을 평가하는 것.
  • 파워쉘 프로그램 복구를 위한 새로운 벤치마크를 도입하여, 주로 사용되는 언어를 넘어선 마지막 마일 복구 범위를 확장하는 것.
  • 사용자가 코드를 작성하고 AI가 수정을 제안하는 방식의 ‘뒤집힌’ AI 프로그래밍 보조 모델을 가능하게 하는 것 — 기존의 AI가 프롬프트에서 코드를 생성하는 방식이 아니라, 코드를 수정하는 방식이다.

제안 방법

  • 시스템은 프로그램 복구를 세 단계로 분해한다: 오류 국소화(오류 메시지 또는 벡터를 사용), 소수의 프롬프트 템플릿을 통한 코드 변환, 유사도 기반 검색을 통한 후보 순위 매기기.
  • 시스템은 Codex를 기반 언어 모델로 사용하며, 재훈련 없이도 언어 간 일반화가 가능한 소수의 프롬프트 학습 능력을 활용한다.
  • 오류-수정된 코드 쌍의 정제된 예제 데이터베이스를 사용하여 소수의 프롬프트를 적용하며, 오류 메시지 유사성 또는 오류 카테고리 벡터를 기반으로 검색한다.
  • 오류 국소화를 위해 시스템은 위치 정보에 따라 구체화된 세부 정보를 제거하여 유사 오류 간 일반화 능력을 향상시킨다.
  • 오류 벡터 기반 및 메시지 임베딩 기반의 소수 프롬프트 선택 방식을 지원하며, 언어 도구의 오류 보고 세부 수준에 따라 선택된다.
  • 새로운 언어에 적응하기 위해 언어별 예제 데이터베이스를 구축하고, 오류 추상화 및 검색 전략을 해당 언어에 맞게 구성한다.

실험 결과

연구 질문

  • RQ1단일 대규모 언어 모델(LM)이 최소한의 공학적 노력으로 다국어 프로그램 복구를 효과적으로 수행할 수 있으며, 언어별 복구 시스템을 능가할 수 있는가?
  • RQ2인간 디버깅 행동을 모방하는 프롬프트 기반 전략이 파워쉘, C 등 다양한 프로그래밍 언어로 일반화되는 정도는 어떠한가?
  • RQ3소수의 예제 선택 설계 선택 사항(예: 오류 벡터 대비 메시지 임베딩) 중 복구 성공에 가장 큰 영향을 미치는 것은 무엇인가?
  • RQ4추상화된 오류 메시지(위치 정보가 제거된)는 특히 저코드 또는 자연어 오류 환경에서 복구 일반화를 얼마나 향상시키는가?
  • RQ5AI가 코드를 보완하는 것이 아니라 수정을 제안하는 ‘뒤집힌’ 상호작용 모델은 대규모 언어 모델을 활용해 마지막 마일 복구에 효과적으로 적용될 수 있는가?

주요 결과

  • ring은 평가된 6개 언어 중 3개인 파이썬, 자바스크립트, C에서 언어별 복구 엔진을 능가하며, 대규모 언어 모델을 활용한 다국어 복구가 단일 언어 시스템을 초월할 수 있음을 입증한다.
  • 파워쉘과 파wr Fx 두 언어에서도 경쟁 가능한 성능을 달성하였으며, 파워쉘을 위한 새로운 벤치마크는 저코드 환경에서의 가능성을 보여준다.
  • 위치 정보가 제거된 추상화된 오류 메시지를 사용함으로써 복구 일반화 능력이 향상되며, 특히 엑셀 및 파워쉘과 같이 자연어 오류 메시지를 사용하는 언어에서 두드러진다.
  • 오류 벡터 기반의 소수 프롬프트 선택 방식이 오류 카테고리가 세분화된 언어(예: C, 파이썬)에서 메시지 임베딩 기반 선택보다 성능이 뛰어나다.
  • 엄격한 '하나를 제외한' 예제 데이터베이스 조건에서도 시스템의 성능이 뛰어나, 소수의 예제로도 검색 기반 소수 프롬프트 학습이 효과적으로 작동함을 보여준다.
  • 결과는 AI가 코드 보완자가 아니라 디버거 역할을 하는 ‘뒤집힌’ AI 프로그래밍 모델의 실현 가능성을 검증하며, 개발 워크플로우의 마찰을 크게 줄일 수 있음을 시사한다.

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

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

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

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