Skip to main content
QUICK REVIEW

[논문 리뷰] Repairing Bugs in Python Assignments Using Large Language Models

Jialu Zhang, José Cambronero|arXiv (Cornell University)|2022. 09. 29.
Software Engineering Research인용 수 30
한 줄 요약

MMAPR은 코드에 대해 학습된 대형 언어 모델을 사용하여 파이썬 학생 과제의 구문적 버그와 의미적 버그를 모두 수정하고, 특히 few-shot 학습에서 최첨단 구문+의미적 baseline를 능가합니다.

ABSTRACT

Students often make mistakes on their introductory programming assignments as part of their learning process. Unfortunately, providing custom repairs for these mistakes can require a substantial amount of time and effort from class instructors. Automated program repair (APR) techniques can be used to synthesize such fixes. Prior work has explored the use of symbolic and neural techniques for APR in the education domain. Both types of approaches require either substantial engineering efforts or large amounts of data and training. We propose to use a large language model trained on code, such as Codex, to build an APR system -- MMAPR -- for introductory Python programming assignments. Our system can fix both syntactic and semantic mistakes by combining multi-modal prompts, iterative querying, test-case-based selection of few-shots, and program chunking. We evaluate MMAPR on 286 real student programs and compare to a baseline built by combining a state-of-the-art Python syntax repair engine, BIFI, and state-of-the-art Python semantic repair engine for student assignments, Refactory. We find that MMAPR can fix more programs and produce smaller patches on average.

연구 동기 및 목표

  • 프로그래밍 교육에서 강사 및 TA의 업무 부담을 줄여 확장 가능한 자동 피드백을 동기 부여한다.
  • 초보 Python 과제의 구문적 오류와 의미적 오류를 모두 수정할 수 있는 통합 시스템을 개발한다.
  • 다중 모달 프롬프트와 약한 감독을 사용해 코드에 대해 학습된 대형 언어 모델을 활용해 repair 품질을 개선한다.
  • 강력한 baseline에 대해 MMAPR를 평가하고 프로그램 청크화 및 few-shot 학습과 같은 디자인 선택을 분석한다.

제안 방법

  • 다중모달 LLMC(Codex)를 구문 및 의미 수정의 핵심 엔진으로 사용한다.
  • 프롬프트를 위한 실행 가능한 청크를 분리하기 위해 프로그램 청크 단계를 적용한다.
  • 구문 프롬프트를 여러 개 생성하고 검증하며 구문 오라클을 통과하는 패치를 수용한다.
  • 자연어 작업 설명 및 테스트 케이스를 사용해 수정을 이끄는 의미 단계; 필요 시 테스트 스위트 유사성에 기반한 동료들의 솔루션을 few-shot 예제로 사용한다.
  • 테스트 스위트 벡터를 기반으로 과거의 버그/정상 프로그램 쌍을 검색해 few-shot 학습을 도입한다.
  • 다수의 유사한 후보가 있을 때 원래의 buggy 프로그램에 대한 최소 토큰 편집 거리를 가진 수정을 선호한다.

실험 결과

연구 질문

  • RQ1MMAPR이 구문+의미적 수리 도구를 결합한 최첨단 baseline보다 더 많은 버그를 수정할 수 있는가?
  • RQ2설계 결정이 수리율과 패치 크기에 미치는 영향은?
  • RQ3코드에 대해 학습된 LLMC를 사용하는 것이 학생 과제의 구문 및 의미 오류를 통합적으로 처리 가능하게 하는가?
  • RQ4MMAPR 수리안이 원래 학생 제출물과 강사 참조 솔루션에 얼마나 근접하는가?

주요 결과

Problem IDSubmissionsMMAPR TED (비 Few-shot)MMAPR Repair Rate (비 Few-shot)MMAPR TED (Few-shot 포함)MMAPR Repair Rate (Few-shot 포함)BIFI + Refactory Repair RateBIFI + Refactory TED (SD)
2865116.45 (4.74)100.006.45 (4.74)100.00100.005.28 (4.27)
2868282.75 (2.17)82.142.75 (2.17)100.00100.001.83 (1.11)
2869232.91 (2.41)73.912.91 (2.41)100.00100.008.35 (7.00)
2870272.33 (2.18)85.192.33 (2.18)100.00100.0015.74 (23.92)
2872182.39 (1.20)72.222.39 (1.20)100.00100.007.39 (13.01)
2873322.84 (2.58)84.382.84 (2.58)90.6390.6312.93 (15.47)
2874162.06 (1.84)87.502.06 (1.84)100.00100.008.50 (11.76)
2875232.78 (2.71)78.262.78 (2.71)100.0078.2611.52 (12.52)
2877212.19 (1.29)80.952.19 (1.29)100.0080.959.14 (16.79)
2878254.84 (8.58)0.004.84 (8.58)100.0040.236.32 (59.53)
28792118.86 (21.24)66.6718.86 (21.24)85.7185.71132.78 (52.61)
28822317.39 (23.23)86.9617.39 (23.23)91.300.00106.57 (77.57)
288355.60 (9.74)80.005.60 (9.74)100.0040.0053 (0.00)
29201010.30 (18.68)50.0010.30 (18.68)80.000.00N/A
292131.67 (0.58)100.001.67 (0.58)100.000.00N/A
  • MMAPR은 few-shot 학습 없이 프로그램의 86.71%를 수정, baseline의 67.13%를 능가한다.
  • few-shot 학습으로 MMAPR의 수정율이 96.50%로 상승한다.
  • MMAPR 패치는 구문에서의 평균 토큰 편집 거리가 (31.29–31.40)로 baseline의 (42.50)보다 작다.
  • 반복 구문 쿼리는 수리율을 82.87%에서 86.71%로 증가시킨다.
  • 프로그램 청크러 제거 시 평균 토큰 편집 거리가 5.46에서 9.38로 증가해 청크화가 최소 변경을 안정화한다.
  • 다중 다중모달 프롬프트를 결합하면 최상의 성능이 나오고, 동료의 few-shot 예시가 수리율을 더 높인다.

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

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

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

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