[논문 리뷰] Frustrated with Code Quality Issues? LLMs can Help!
이 논문은 정적 분석 경고에 대한 코드 수정을 생성하고 평가하는 데 두 단계의 LLM 기반 시스템인 CORE를 제안한다. 첫 번째 LLM(제안자)은 지시를 따르는 언어 모델로서 정적 분석 경고에 대한 코드 수정을 생성하고, 두 번째 LLM(순위 지정자)은 기능적 정확성과 품질을 평가하고 순위를 매긴다. CORE는 여러 도구와 검사 기준을 통해 파이썬에서 59.2%의 수정률, 자바에서 76.8%의 수정률을 기록했으며, 거짓 긍정률을 25.8% 감소시켰고, 훨씬 적은 엔지니어링 노력으로 전문화된 APR 도구와 유사한 성능을 달성했다.
As software projects progress, quality of code assumes paramount importance as it affects reliability, maintainability and security of software. For this reason, static analysis tools are used in developer workflows to flag code quality issues. However, developers need to spend extra efforts to revise their code to improve code quality based on the tool findings. In this work, we investigate the use of (instruction-following) large language models (LLMs) to assist developers in revising code to resolve code quality issues. We present a tool, CORE (short for COde REvisions), architected using a pair of LLMs organized as a duo comprised of a proposer and a ranker. Providers of static analysis tools recommend ways to mitigate the tool warnings and developers follow them to revise their code. The \emph{proposer LLM} of CORE takes the same set of recommendations and applies them to generate candidate code revisions. The candidates which pass the static quality checks are retained. However, the LLM may introduce subtle, unintended functionality changes which may go un-detected by the static analysis. The \emph{ranker LLM} evaluates the changes made by the proposer using a rubric that closely follows the acceptance criteria that a developer would enforce. CORE uses the scores assigned by the ranker LLM to rank the candidate revisions before presenting them to the developer. CORE could revise 59.2% Python files (across 52 quality checks) so that they pass scrutiny by both a tool and a human reviewer. The ranker LLM is able to reduce false positives by 25.8% in these cases. CORE produced revisions that passed the static analysis tool in 76.8% Java files (across 10 quality checks) comparable to 78.3% of a specialized program repair tool, with significantly much less engineering efforts.
연구 동기 및 목표
- 정적 분석 도구가 경고한 코드 품질 문제 해결에 있어 개발자의 부담을 줄이기 위해.
- 기존의 자동 프로그램 수리(APR) 도구의 한계를 극복하기 위해, 광범위한 엔지니어링 작업, 훈련 데이터 또는 특정 패턴에 국한된 제약 없이 작동하도록 하기 위해.
- 정적 분석 도구에서 제공하는 자연어 기반 수정 권고를 지시로 활용하여, 피팅 튜닝 없이도 제로샷, 피셔샷, 또는 프롬프팅을 통한 제로샷 코드 수정을 가능하게 하기 위해.
- 기능을 변경하는 의미적으로 잘못된 수정을 탐지하고 제거함으로써 수정 품질을 향상시키기 위해.
- 최소한의 엔지니어링 오버헤드로 다수의 도구, 언어, 검사 기준 간 호환성을 확보하기 위해.
제안 방법
- CORE는 지시에 맞춰 튜닝된 두 개의 LLM을 사용한다: 정적 분석 권고에 기반해 후보 코드 수정을 생성하는 제안자 LLM.
- 제안자 LLM은 버그가 있는 코드, 품질 문제 기술, 자연어 수정 권고를 프롬프트로 제공받아 수정된 코드를 생성한다.
- 생성된 수정 사항은 원본 정적 분석 도구에 대해 검증되어 문제를 해결하지 못한 사항을 걸러낸다.
- 두 번째 LLM(순위 지정자)은 인간의 수락 기준과 일치하는 평가 척도를 사용해 각 후보 수정 사항의 정확성과 기능 보존 정도를 평가하고 점수를 매긴다.
- 순위 지정자는 원본 코드와 수정된 코드 간의 코드 차이(diff)를 활용해 의미적 변화를 추론함으로써 미세한 기능 저하를 더 잘 탐지할 수 있도록 한다.
- 최종 후보 수정 사항은 순위 지정자의 점수에 따라 순위가 매겨지고 개발자에게 제출되어 수동 검토의 부담을 줄인다.
실험 결과
연구 질문
- RQ1피팅 튜닝이나 훈련 데이터 없이도 LLM이 정적 분석 검사와 인간 검토 기준을 모두 충족하는 코드 수정을 생성할 수 있는가?
- RQ2두 번째 LLM이 정적 분석 검사를 통과하지만 의도하지 않은 의미적 변화를 유도하는 수정 사항을 식별하고 제거하는 데 얼마나 효과적인가?
- RQ3CORE와 같은 이중 LLM 시스템이 파이썬과 자바와 같은 다양한 프로그래밍 언어, CodeQL 및 SonarQube와 같은 정적 분석 도구, 그리고 다양한 코드 품질 검사 기준에 걸쳐 일반화될 수 있는가?
- RQ4CORE의 수정률과 거짓 긍정률은 규칙 기반 자동 프로그램 수리 도구와 비교해 성능과 엔지니어링 비용 측면에서 어떻게 다른가?
- RQ5정적 분석 도구에서 제공하는 자연어 기반 수정 권고를 제로샷 환경에서 직접적으로 LLM의 지시로 사용할 수 있는 정도는 어느 정도인가?
주요 결과
- CORE는 52개의 품질 검사 기준을 통해 파이썬 코드에서 59.2%의 수정률을 기록했으며, 이는 정적 분석 도구와 인간 심사자 모두가 수락한 수정 사항이었다.
- 순위 지정자 LLM은 정적 분석 검사를 통과하지만 의도하지 않은 功能 변화를 유도하는 수정 사항을 식별하고 제거함으로써 거짓 긍정률을 25.8% 감소시켰다.
- 자바 벤치마크에서 CORE는 10개의 품질 검사 기준을 통해 76.8%의 수정률을 기록했으며, 전문화된 규칙 기반 APR 도구(78.3%)와 유사한 성능을 보였지만 훨씬 적은 엔지니어링 노력으로 달성했다.
- 시스템은 피팅 튜닝이나 작업별 데이터 없이도 두 가지 프로그래밍 언어와 두 가지 정적 분석 도구에서 다양한 코드 품질 문제를 성공적으로 처리했다.
- GPT-4는 코드 차이 분석에서 GPT-3.5-Turbo보다 더 뛰어난 추론 능력을 보여, 의미적 평가에서 모델 능력의 중요성을 입증했다.
- 자연어 기반 수정 권고를 프롬프트로 직접 활용함으로써 효과적인 제로샷 코드 수정이 가능했으며, 대규모 훈련 데이터나 패턴 추출의 필요성을 피할 수 있었다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.