이 논문은 코드를 수정하거나 새로운 기능을 추가하는 등의 작업을 자동화하는 모델에 대한 내용이다.
일반적으로 코드 작성 시 llm을 사용할 때 보통 코드를 짜주거나 단순 개선 등에 이용되는데, 이 논문은 그와 다르게 소프트웨어 유지보수 / 업데이트에 필요한 개선 자동화를 주로 하고 있다. 코드를 짜는 목표가 아니라, 시스템적으로 코드 수정에 특화된 방식을 개발하였다는 말.
다른 논문에서도 llm을 쓰는 것이 종종 있었지만, 기본적으로 '바꿔야 할 부분'을 주고 이를 바꾸라고 시킨다. 하지만 저자들이 말하기를 전체 코드상에서 틀린 부분을 찾는 것조차도 이미 굉장히 어려운 태스크라고 주장한다. (실제 코드를 짜 보면 알겠지만, 어디가 틀렸는지 보통 디버거로 찾아 들어가야 한다. 그마저도 안 보이는 경우도 존재하고, 분명 맞는 로직인데 어디선가 충돌이 나서 틀린 로직으로 보이는 경우도 존재)
이 논문에서는 다음과 같은 작업을 통해 문제를 해결한다.
AutoCodeRover가 문제를 해결하는 방식은 다음과 같다.
위에 나오는 api는 다음과 같음
각 패치 작성 시 다음과 같이 프롬프트로 지속적인 수정 및 대치 작업을 한다. (마치 agent와 같이 동작)
오류 부분 검색을 진행할 때, 코드의 상단부터 시작하여 계층적으로 나아가게 된다.
agent와 비슷하게 동작하며, insufficient인 경우 계속해서 다음 계층을 탐색하여 들어가는 느낌.
이때 초반 검색 시 '반복적인 검색' '반복적인 성능 평가' 등이 나오는데, 이 기법이 SBFL이다.
SBFL(spectrum-based fault localization)은 테스트를 기반으로 오류 발생 가능성이 있는 프로그램의 위치를 찾아내는 기법이다.
사용하지 않은 경우 코드 문맥을 찾는 데 한계가 있었다고 설명함. 마치 RAG를 하지 않았을 때 실제 정보에 한계가 있던 것처럼, 실제 정보에 거의 접근한 정보를 알려줌으로서 정답에 가깝게 답변할 수 있도록 보강하는 느낌이다.
오 너무 낮은데? 라고 생각했는데 원본 벤치마크에서 충격받았다.