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


메타데이터

항목내용
제목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
소속Princeton University
연도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