Evaluating and Improving Automated Repository-Level Rust Issue Resolution with LLM-based Agents
이 논문은 Rust 프로그래밍 언어의 자동화된 이슈 해결을 위한 대규모 벤치마크인 'Rust-SWE-bench'를 제안하고, 이를 통해 기존 에이전트의 한계를 분석한 뒤 테스트 환경 자동 설정과 메타프로그래밍 기반 동적 추적을 결합한 새로운 에이전트 'RUSTFORGER'를 개발하여 기존 최상위 모델 대비 34.9% 향상된 성능을 입증했습니다.
비유: "완벽하지만 까다로운 정교한 시계" Rust 는 컴퓨터 프로그램이 작동할 때 메모리나 데이터가 꼬이지 않도록 아주 엄격한 규칙을 가진 언어입니다. 마치 완벽하게 조립된 정교한 시계와 같아요. 시간이 정확하고 고장 나지 않지만, 한 번 나사 하나를 잘못 조이면 전체가 멈추거나 부러져 버립니다.
문제점: 이 시계를 수리하려면 규칙을 완벽하게 알아야 해서, 개발자들이 배우기 매우 어렵고 실수하기 쉽습니다.
해결책: 그래서 개발자들을 도와주는 **AI 비서 (LLM 기반 에이전트)**를 만들려고 했습니다. 하지만 기존 AI 비서들은 Python 이나 Java 같은 '편안한 언어'는 잘 다뤘는데, '까다로운 Rust 시계'를 고치는 데는 서툴렀습니다.
2. 첫 번째 성과: 새로운 시험지 만들기 (Rust-SWE-bench)
연구진들은 AI 의 실력을 제대로 측정할 수 있는 새로운 시험지를 만들었습니다.
Rust-SWE-bench: 전 세계의 유명한 Rust 프로젝트 34 개에서 실제 발생한 버그 500 개를 모았습니다.
의미: 마치 "전 세계의 다양한 시계 모델 34 개에서 고장 난 부분 500 개를 뽑아내서, AI 가 얼마나 잘 고치는지 시험을 보게 한 것"입니다.
3. 두 번째 발견: AI 가 왜 고생했을까? (현황 분석)
연구진은 최신 AI 4 가지와 모델 4 가지를 이 시험지에 투입해 봤습니다. 결과는 어땠을까요?
성공: AI 가 21.2% 정도의 버그를 성공적으로 고쳤습니다. (기존보다 훨씬 나아졌지만, 여전히 80% 는 실패했습니다.)
실패 원인 1: 전체 구조를 못 봄 (도서관의 지도 문제)
AI 는 특정 책 (코드) 만 보고 고치려 했지만, Rust 는 도서관 전체의 구조 (전체 코드 구조) 를 알아야만 책을 찾을 수 있었습니다. AI 는 도서관 지도를 제대로 읽지 못해 필요한 책을 찾지 못했습니다.
실패 원인 2: 고장 난 시계를 재현하지 못함 (시뮬레이션 실패)
시계를 고치려면 먼저 "어떻게 고장 났는지"를 똑같이 재현해 봐야 합니다. 하지만 AI 가 만든 테스트 환경이 너무 복잡해서, 고장 난 상황을 다시 만들어내는 것 자체가 실패했습니다. 고장 원인을 찾지 못하면 고칠 수 없는 것입니다.
4. 해결책: 새로운 AI 비서 'RustForger' 등장
연구진은 이 문제들을 해결하기 위해 **RustForger(러스트포저)**라는 새로운 AI 비서를 개발했습니다. 이름처럼 'Rust 를 만드는 (Forger) 전문가'입니다.
RustForger 의 두 가지 비밀 무기:
안전한 수리 작업대 (자동화된 테스트 환경)
기존 AI 는 원래 시계 (프로젝트) 를 바로 만져서 망가뜨릴까 봐 두려웠습니다.
RustForger는 완전히 분리된 안전 작업대를 먼저 만듭니다. 원래 시계를 이 작업대에 가져와서, 실제 시계를 건드리지 않고 여기서 고장 난 상황을 완벽하게 재현합니다.
초고속 X-ray (동적 추적 기술)
시계가 고장 난 원인을 찾기 위해, RustForger 는 시계의 내부 톱니바퀴가 돌아가는 모습을 실시간으로 X-ray 촬영합니다.
Rust 언어의 특수한 기능을 이용해, 코드가 실행될 때 어떤 순서로 작동하는지, 어디에서 문제가 생기는지 정확한 데이터를 뽑아냅니다.
이 데이터를 바탕으로 AI 는 "아, 이 톱니바퀴가 맞지 않네!"라고 정확히 진단하고 고칩니다.
5. 결과: 얼마나 좋아졌을까?
성공률 향상: RustForger 를 쓰니 AI 가 고친 버그가 **28.6%**로 늘었습니다. 기존 최고의 AI 보다 34.9% 더 잘 고친 것입니다.
독보적인 성과: 다른 어떤 AI 도 고치지 못했던 46 개의 난제를 RustForger 가 유일하게 해결했습니다.
비용 절감: 더 똑똑한 AI 모델을 쓰지 않아도, RustForger 의 방법론 덕분에 더 적은 비용으로 더 좋은 결과를 얻었습니다.
6. 한 줄 요약
"까다로운 Rust 시계를 고치는 AI 비서들이 '전체 지도'를 못 보고 '고장 재현'을 못 해서 고생했는데, 연구진이 '안전한 작업대'와 '실시간 X-ray'를 달아주니 AI 가 훨씬 똑똑하게 시계를 고치게 되었습니다."
이 연구는 앞으로 AI 가 복잡한 소프트웨어를 스스로 개발하고 수리하는 시대가 왔음을 보여주며, 특히 까다로운 Rust 언어에서도 AI 가 큰 역할을 할 수 있음을 증명했습니다.
1. 연구 배경 및 문제 정의 (Problem)
Rust 언어의 도전 과제: Rust 는 메모리 안전성과 높은 성능을 보장하지만, 엄격한 타입 시스템과 소유권 (ownership) 모델로 인해 학습 곡선이 가파르고 코딩 난이도가 높습니다. 이로 인해 개발 생산성 저하가 발생하며, 자동화된 이슈 해결 도구의 필요성이 대두되었습니다.
기존 연구의 한계: 최근 LLM 기반 코드 에이전트 (Code Agents) 는 Python 등 다른 언어에서 복잡한 소프트웨어 엔지니어링 (SWE) 태스크를 해결하는 데 성공했습니다. 그러나 Rust 에 특화된 대규모 리포지토리 수준의 벤치마크가 부재하여, 에이전트들의 실제 능력을 체계적으로 평가하거나 개선하기 어려웠습니다.
기존 벤치마크는 C-to-Rust 변환, 함수 단위 합성 등 세분화된 태스크에 집중하거나, Rust 태스크의 수가 매우 적었습니다.
핵심 문제: 기존 에이전트들이 Rust 의 복잡한 리포지토리 구조를 이해하지 못하거나, 엄격한 타입/트레이트 (trait) 시맨틱스를 준수하지 못해 컴파일 오류가 발생하며, 특히 이슈 재현 (Issue Reproduction) 단계에서 실패하는 경우가 많았습니다.
2. 방법론 (Methodology)
이 논문은 크게 벤치마크 구축, 기존 에이전트 평가, 새로운 에이전트 (RustForger) 제안의 세 단계로 구성됩니다.
A. Rust-SWE-bench 구축 (Benchmark Construction)
데이터 수집: GitHub 에서 1,000 개 이상의 스타를 가진 87 개의 인기 있는 Rust 리포지토리에서 약 80,000 개의 병합된 Pull Request (PR) 를 수집했습니다.
필터링 및 검증:
이슈와 연결되고 테스트 파일을 수정한 PR 만 선별.
Fail-to-Pass 검증: 테스트 패치 적용 시 실패하고, 수정 패치 적용 시 통과하는지 확인 (컴파일 오류를 테스트 실패로 간주).
수동 검증: 문제 설명의 명확성, 해결책 누출 여부, 테스트 무결성을 3 인의 연구자가 검증.
결과: 34 개의 다양한 리포지토리에서 500 개의 고품질 태스크로 구성된 Rust-SWE-bench를 완성했습니다.
B. 기존 에이전트 평가 (Empirical Study)
대상: 4 가지 대표 에이전트 (SWE-agent, OpenHands, Agentless, AutoCodeRover) 와 4 가지 최신 LLM (Claude-Sonnet-3.7, GPT-4o, OpenAI o4-mini, Qwen3) 을 조합하여 평가했습니다.
분석 포인트:
태스크 해결률 (Resolved Rate).
생성된 패치의 규모 (수정 파일 수, 라인 수).
발생 빈도 높은 컴파일 오류 유형 (리포지토리 구조 이해 실패, 타입/트레이트 시맨틱스 위반).
이슈 재현 성공률: 에이전트가 원본 이슈를 재현하는 테스트를 생성하고 실행하는 능력.
C. RustForger 제안 (Novel Approach)
연구 결과, 이슈 재현과 런타임 분석의 중요성을 발견하고 이를 해결하기 위해 RustForger를 제안했습니다.
1 단계: 자동화된 테스트 환경 구축 (Setup Testing Workspace)
원본 프로젝트의 복잡한 빌드 시스템과 의존성 충돌을 피하기 위해, 격리된 (Isolated) 테스트 워크스페이스를 생성합니다.
원본 프로젝트를 로컬 경로 의존성으로 가져와 정확한 코드 하위 집합에서 테스트를 실행합니다.
2 단계: 크로스-프로젝트 동적 추적 (Cross-Project Dynamic Tracing)
Trace 명령어: Rust 의 메타프로그래밍 기능 (절차적 매크로, AST 수정) 을 활용하여 타겟 함수에 추적 코드를 주입합니다.
동적 분석: 격리된 워크스페이스에서 테스트를 실행하여 런타임 제어 흐름 (Control-flow) 과 데이터 흐름을 수집합니다.
장점: 원본 프로젝트의 빌드 시스템에 얽매이지 않고, 정확한 런타임 정보를 통해 버그의 근본 원인 (Root Cause) 을 파악할 수 있습니다.
3. 주요 기여 (Key Contributions)
Rust-SWE-bench: Rust 소프트웨어 엔지니어링 태스크를 평가하기 위한 첫 번째 대규모 (500 개 태스크), 리포지토리 수준의 벤치마크를 공개했습니다.
종합적 실증 연구: 최신 LLM 기반 에이전트들의 Rust 이슈 해결 능력을 평가하고, 리포지토리 구조 이해의 부재와 이슈 재현의 어려움이 주요 병목 현상임을 규명했습니다.
RustForger 프레임워크: 격리된 테스트 환경과 Rust 특유의 메타프로그래밍 기반 동적 추적 (Dynamic Tracing) 을 결합한 새로운 에이전트 프레임워크를 제안했습니다.
4. 실험 결과 (Results)
기존 에이전트 성능:
ReAct 스타일 에이전트 (OpenHands 등) 가 가장 우수했으나, 최고 성능 모델 (Claude-Sonnet-3.7) 을 사용해도 **21.2%**의 태스크만 해결했습니다.
해결되지 않은 태스크 중 **44.5%**는 이슈 재현 단계에서 실패했습니다.
주요 실패 원인은 컴파일 오류 (E0599, E0433 등) 로, 이는 리포지토리 전체 구조를 이해하지 못하거나 Rust 의 엄격한 타입 시맨틱스를 준수하지 못했기 때문입니다.
RustForger 성능:
해결률: Claude-Sonnet-3.7 과 결합 시 **28.6%**의 태스크를 해결하여, 기존 최강 베이스라인 (21.2%) 대비 34.9% 향상을 보였습니다.
고유 해결: 모든 LLM 과 에이전트 조합 중 46 개의 태스크를 유일하게 해결했습니다.
비용 효율성: 해결률 향상에도 불구하고, 평균 API 비용은 기존 최상위 에이전트보다 21.3% 낮았습니다.
재현 성공률: RustForger 는 이슈 재현 성공률을 67.3% (Claude 기준) 까지 끌어올려, 기존 에이전트 (55.5%) 보다 월등히 높았습니다.
Ablation Study: 격리된 워크스페이스 도입만으로도 성능이 향상되었고, **Trace 명령어 (동적 추적)**를 추가함으로써 추가적인 성능 향상을 입증했습니다.
5. 의의 및 결론 (Significance)
Rust 생태계 자동화의 진전: Rust 의 높은 진입 장벽을 낮추기 위해, 단순한 코드 생성을 넘어 런타임 동적 분석과 격리된 환경 구축이 필수적임을 증명했습니다.
메타프로그래밍의 활용: Rust 의 강력한 메타프로그래밍 기능 (AST 조작, 매크로) 을 에이전트의 디버깅 도구로 활용하는 새로운 패러다임을 제시했습니다.
향후 연구 방향: 이 연구는 LLM 기반 에이전트가 복잡한 리포지토리 수준의 문제를 해결할 때, 정적 분석뿐만 아니라 신뢰할 수 있는 동적 실행 환경과 런타임 피드백이 결정적 요소임을 보여줍니다.
요약하자면, 이 논문은 Rust 의 자동화된 버그 수정을 위한 표준 벤치마크를 마련하고, 기존 에이전트들의 한계를 극복하기 위해 동적 추적 (Dynamic Tracing) 기술을 도입한 RustForger를 통해 해결률을 획기적으로 높인 획기적인 연구입니다.