SWE-bench: 언어모델이 실제 GitHub 이슈를 해결할 수 있는가?

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 등 코딩 에이전트의 핵심 벤치마크로 자리잡았다.


메타데이터

연도2023
발표ICLR 2024, arXiv:2310.06770
링크arXiv, GitHub, Leaderboard
키워드SWE-bench, software engineering, GitHub issues, code agent, patch generation

데이터셋 구성

규모 및 분할

항목내용
SWE-bench (Full)2,294개 이슈-PR 쌍
SWE-bench Lite300개 (필터링된 핵심 부분집합)
SWE-bench Verified500개 (사람이 검증한 고품질 부분집합)
소스 저장소12개 Python 오픈소스 프로젝트
시간 범위각 저장소의 최근 3년간 이슈

소스 저장소 목록

저장소이슈 수도메인
Django470Web framework
scikit-learn354ML library
matplotlib282Visualization
sympy258수학 라이브러리
requests78HTTP library
Flask56Web framework
pytest119Testing framework

Feature/Column 구조

필드설명예시
instance_id고유 식별자django__django-11099
repo저장소 이름django/django
base_commit이슈 시점의 커밋 해시abc123...
problem_statement이슈 설명 (원본 GitHub issue)“QuerySet.union() doesn’t…”
hints_text추가 힌트 (optional)관련 코멘트
patch정답 패치 (gold PR diff)--- a/django/db/...
test_patch검증용 테스트 패치새 테스트 추가 diff
FAIL_TO_PASS패치 전 실패→패치 후 통과해야 하는 테스트["test_union_..."]
PASS_TO_PASS패치 전후 모두 통과해야 하는 테스트["test_basic_..."]

난이도 분류

난이도기준비율
Easy단일 파일 1-5줄 수정~15%
Medium1-3 파일, 10-50줄 수정~55%
Hard다중 파일, 50줄+ 수정, 새 기능 추가~30%

실제 데이터 예시

예시 1: Django 버그 수정

# 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 + BM254.80%
GPT-4 + BM251.74%
SWE-agent (GPT-4)12.47%
SWE-agent (Claude 3.5)~18%
Devin (2024)13.86%

(Table 2, Leaderboard 2024 기준)

핵심 발견

  1. 극단적 난이도: 최고 성능 LLM도 full SWE-bench에서 ~5% 미만 해결 (Table 2)
  2. 에이전트 프레임워크의 효과: 단순 LLM 호출 대비, SWE-agent 같은 에이전트 루프가 2-3배 성능 향상
  3. Retrieval의 중요성: 코드베이스에서 관련 파일을 정확히 찾는 것이 성능의 핵심 병목
  4. 이슈 유형별 차이: 버그 수정이 새 기능 추가보다 높은 해결률

이론적 의의

AI 소프트웨어 엔지니어링의 표준 벤치마크

SWE-bench는 AI 코딩 에이전트 분야의 사실상 표준이 되었다. Devin, SWE-agent, AutoCodeRover, Aider 등 모든 주요 코딩 에이전트가 SWE-bench에서 성능을 보고한다. “실제 소프트웨어 이슈 해결”이라는 과제 설정은 학계와 산업계 모두에서 가장 의미 있는 코딩 벤치마크로 인정받고 있다.


관련 연구


핵심 용어 정리

용어정의
SWE-benchSoftware Engineering Benchmark. 실제 GitHub 이슈 해결로 코딩 능력을 평가하는 벤치마크
FAIL_TO_PASS패치 적용 전 실패하다가 적용 후 통과해야 하는 테스트
PASS_TO_PASS패치 적용 전후 모두 통과해야 하는 회귀(regression) 테스트
Gold Patch실제 개발자가 작성한 정답 패치 (PR diff)
BM25전통적 키워드 기반 정보 검색 알고리즘, 관련 코드 파일 검색에 사용

태그

paper #2023 benchmark software_engineering SWE_bench agent GitHub Princeton

Introduction


  • 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 인스턴스
  • 핵심 발견: 최선 모델도 극히 낮은 해결률 — 코드 검색이 핵심 병목

실험 결과 상세

ModelSetting% Resolved
Claude 2BM25 13k1.96%
GPT-4BM25 13k0.00%
SWE-Llama 13bBM25 13k0.70%
Claude 2Oracle4.80%
GPT-4Oracle1.74%
SWE-Llama 13bOracle4.00%
Claude 2Oracle-Collapsed5.90%

BM25 검색 재현율

Context LimitRecall
13k tokens29.58%
27k tokens44.41%
50k tokens51.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) 자기진화 코딩 에이전트 평가 프레임워크 발전