Digest: HumanEval/MBPP가 단일 함수 수준의 코드 생성을 측정했다면, Princeton의 SWE-bench는 실제 GitHub 저장소의 이슈를 해결하는 소프트웨어 엔지니어링 전체 과정을 평가한다. 12개의 인기 Python 저장소(Django, scikit-learn, Flask 등)에서 2,294개의 실제 이슈-PR 쌍을 수집했다. 핵심 통찰은 실제 소프트웨어 개발은 단일 함수가 아닌 다중 파일에 걸친 코드 수정, 테스트 생성, 기존 코드 이해를 요구한다는 것이다. Claude 2 + BM25 retrieval이 4.8% (Table 2)만 해결하여, LLM의 실제 소프트웨어 엔지니어링 능력이 아직 초기 단계임을 보여주었다. 이후 SWE-agent, Devin 등 코딩 에이전트의 핵심 벤치마크로 자리잡았다.
메타데이터
항목
내용
제목
SWE-bench: Can Language Models Resolve Real-World GitHub Issues?
저자
Carlos E. Jimenez, John Yang, Alexander Wettig, Shunyu Yao, Kexin Pei, Ofir Press, Karthik Narasimhan
# Problem Statement (GitHub Issue):
"QuerySet.union() generates invalid SQL when combined with
annotate() - the annotation column appears in the wrong position."
# Gold Patch (simplified):
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -420,7 +420,8 @@
- if self.query.combinator:
- return self.as_combinator_sql(...)
+ if self.query.combinator:
+ features = self.connection.features
+ if not features.supports_slicing_ordering_in_compound:
+ return self.as_combinator_sql(...)
# FAIL_TO_PASS test:
test_union_with_annotation()
예시 2: scikit-learn 기능 수정
# Problem Statement:
"ColumnTransformer with remainder='passthrough' produces incorrect
column order when transformers drop columns."
# Gold Patch:
# 3개 파일에 걸쳐 총 23줄 수정
# sklearn/compose/_column_transformer.py (15줄)
# sklearn/compose/tests/test_column_transformer.py (8줄 테스트 추가)
왜 이 연구를 하는가?
핵심 질문
LLM이 실제 소프트웨어 저장소에서 발생하는 이슈를 자율적으로 해결할 수 있는가?
기존 접근법의 한계
한계
설명
단일 함수 평가
HumanEval/MBPP는 독립적 함수만 생성, 실제 개발과 괴리
컨텍스트 부재
기존 벤치마크는 코드베이스 이해가 불필요
비현실적 설정
실제 개발은 다중 파일 편집, 테스트, 디버깅 포함
핵심 통찰
실제 소프트웨어 엔지니어링 능력을 평가하려면, (1) 실제 코드베이스 컨텍스트, (2) 실제 이슈 설명, (3) 실제 테스트 기반 검증이 모두 필요하다. GitHub의 이슈-PR 쌍은 이 세 가지를 자연스럽게 제공한다.
방법 (Method)
프레임워크 개요
graph TB
A["GitHub 저장소<br/>(12개 Python 프로젝트)"] --> B["이슈-PR 쌍 수집<br/>(merged PR + 관련 이슈)"]
B --> C["테스트 기반 필터링<br/>(FAIL_TO_PASS 테스트 존재)"]
C --> D["SWE-bench 인스턴스<br/>(2,294개)"]
D --> E["모델에 제공:<br/>이슈 설명 + 코드베이스"]
E --> F["모델이 패치 생성"]
F --> G["테스트 실행<br/>(FAIL_TO_PASS + PASS_TO_PASS)"]
G --> H{"모든 테스트 통과?"}
H -->|Yes| I["✓ Resolved"]
H -->|No| J["✗ Unresolved"]
평가 메트릭
% Resolved: FAIL_TO_PASS 테스트를 통과하면서 PASS_TO_PASS 테스트도 유지하는 인스턴스 비율
Retrieval 설정: BM25로 관련 코드 파일을 검색하여 컨텍스트로 제공
발견 (Findings)
주요 결과
모델/시스템
SWE-bench (% Resolved)
Claude 2 + BM25
4.80%
GPT-4 + BM25
1.74%
SWE-agent (GPT-4)
12.47%
SWE-agent (Claude 3.5)
~18%
Devin (2024)
13.86%
(Table 2, Leaderboard 2024 기준)
핵심 발견
극단적 난이도: 최고 성능 LLM도 full SWE-bench에서 ~5% 미만 해결 (Table 2)
에이전트 프레임워크의 효과: 단순 LLM 호출 대비, SWE-agent 같은 에이전트 루프가 2-3배 성능 향상
Retrieval의 중요성: 코드베이스에서 관련 파일을 정확히 찾는 것이 성능의 핵심 병목
이슈 유형별 차이: 버그 수정이 새 기능 추가보다 높은 해결률
이론적 의의
AI 소프트웨어 엔지니어링의 표준 벤치마크
SWE-bench는 AI 코딩 에이전트 분야의 사실상 표준이 되었다. Devin, SWE-agent, AutoCodeRover, Aider 등 모든 주요 코딩 에이전트가 SWE-bench에서 성능을 보고한다. “실제 소프트웨어 이슈 해결”이라는 과제 설정은 학계와 산업계 모두에서 가장 의미 있는 코딩 벤치마크로 인정받고 있다.