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 등 코딩 에이전트의 핵심 벤치마크로 자리잡았다.
# 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에서 성능을 보고한다. “실제 소프트웨어 이슈 해결”이라는 과제 설정은 학계와 산업계 모두에서 가장 의미 있는 코딩 벤치마크로 인정받고 있다.
SWE-bench는 실제 GitHub 이슈-PR 쌍을 수집하여 LM의 소프트웨어 엔지니어링 능력을 평가하는 벤치마크
12개 인기 Python 저장소에서 2,294개 task instance 확보
기존 벤치마크(HumanEval, MBPP)의 한계: 독립적 소규모 코딩 문제 — 실제 개발 환경과 괴리
실행 기반 이중 검증: fail-to-pass + pass-to-pass 테스트로 기능적 정확성 측정
핵심 발견: 최고 모델(Claude 2)도 BM25 설정에서 **1.96%**만 해결
Related Papers
HumanEval, MBPP: 단일 함수 코드 생성 — 코드베이스 이해 불필요
CodeContests (Li et al.): 경쟁 프로그래밍 — 실제 SW 개발과 거리
SWE-agent (Yang et al., 2024): SWE-bench 기반 에이전트 — 이후 발전
차별점: (1) 실제 이슈-PR 쌍 기반, (2) fail-to-pass 이중 검증, (3) 자동 갱신 가능
Methods
벤치마크 구축 파이프라인
1단계: 저장소 선정
PyPI 상위 100개 중 12개 Python 저장소에서 ~90,000 PR 수집
2단계: 속성 기반 필터링
GitHub 이슈 연결 + 테스트 파일 변경 포함 + 병합된 PR만 선별
3단계: 실행 기반 필터링
최소 1개 fail-to-pass 테스트 존재하는 인스턴스만 최종 포함
평가 설정
BM25 검색: 비-오라클 설정 (실제적)
Oracle 검색: 정답 파일 직접 제공 (상한 측정)
모델은 Unix diff 패치 생성 → 테스트 실행으로 검증
방법론 다이어그램
graph TD
A[GitHub 상위 Python 저장소<br/>12개 선정] --> B[PR 수집 ~90,000개]
B --> C{속성 기반 필터링}
C -->|이슈 연결 + 테스트 변경| D[후보 PR 선별]
D --> E{실행 기반 필터링}
E -->|fail-to-pass 존재| F[Task Instance 2,294개]
F --> G[모델: 코드베이스 + 이슈 → 패치 생성]
G --> H{테스트 실행}
H -->|fail-to-pass 통과<br/>+ pass-to-pass 유지| I[Resolved]
H -->|실패| J[Unresolved]
style I fill:#2d8a4e,color:#fff
style J fill:#c0392b,color:#fff
Results
평가 모델: Claude 2, GPT-4, ChatGPT-3.5, SWE-Llama 7b/13b
데이터셋: SWE-bench 2,294 인스턴스
핵심 발견: 최선 모델도 극히 낮은 해결률 — 코드 검색이 핵심 병목
실험 결과 상세
Model
Setting
% Resolved
Claude 2
BM25 13k
1.96%
GPT-4
BM25 13k
0.00%
SWE-Llama 13b
BM25 13k
0.70%
Claude 2
Oracle
4.80%
GPT-4
Oracle
1.74%
SWE-Llama 13b
Oracle
4.00%
Claude 2
Oracle-Collapsed
5.90%
BM25 검색 재현율
Context Limit
Recall
13k tokens
29.58%
27k tokens
44.41%
50k tokens
51.06%
Discussion
코드 검색이 핵심 병목: Oracle vs BM25 격차 큼 (Claude 2: 4.8% vs 1.96%)
컨텍스트 증가 역설: 더 많은 컨텍스트 → 검색 재현율 ↑ but 모델 성능 ↓
한계: 12개 Python 저장소 한정, 다국어/엔터프라이즈 코드 대표성 낮음
이후 영향: SWE-agent, Devin, SWE-bench Verified 등의 표준 평가 플랫폼이 됨
Insights
주목할 점: 실제 SW 개발 사이클(이슈 → 코드 수정 → 테스트) 재현. fail-to-pass 이중 검증은 PR 리뷰 기준과 동등
연결 고리: SWE-agent, Devin 등 에이전트 기반 코딩 연구의 촉발점. 자동화 이슈-PR 수집 파이프라인으로 지속적 갱신 가능 → 오염 문제 완화
시사점: “LM의 한계”인가 “검색/컨텍스트 관리의 한계”인가 — 에이전트 루프로 개선 가능
비판적 코멘트: 이슈 설명 질(quality) 차이로 코드 이해 vs 지시 이해 분리 어려움
Discussion Points
논쟁점: 벤치마크 결과가 “LM은 실제 SW에 한참 못 미친다”의 근거로 사용되나, Oracle 설정에서는 훨씬 높은 성능 → 근본 한계 vs 검색 한계 논쟁
검증 필요 가정: fail-to-pass 테스트가 이슈 핵심을 포착한다는 가정 — 테스트 잘 작성된 “쉬운 이슈”로 편향 가능
후속 연구: (1) 에이전트 루프(SWE-agent) 해결률 상승 정량화, (2) 다국어 확장, (3) 자기진화 코딩 에이전트 평가 프레임워크 발전