Introduction


  • EvoCodeBench는 LLM 기반 코딩 시스템의 자기진화(self-evolving) 능력을 측정하기 위한 인간 성능 기준 벤치마크
  • LeetCode에서 수집한 3,822개 문제 중 100개를 선별하여 데이터 오염을 최소화
  • 5개 언어 지원: Python3, C++, Java, Go, Kotlin (Kotlin은 long-tail 언어로 robustness 측정)
  • 최대 3회 Reflection-Revision 반복 루프로 자기진화 궤적(trajectory-level) 측정
  • 핵심 기여: 능력 지표(Pass Rate), 효율성 지표(Runtime/Memory), 인간 참조 지표(ARB/AMB) 3축 평가

Related Papers


  • HumanEval, MBPP: 단일 시도 통과율만 측정 — 자기 개선 능력 미포착
  • SWE-bench: 실제 GitHub 이슈 해결 — 반복 개선 미측정
  • Reflexion (Shinn et al., 2023): 언어 강화학습 기반 자기 반성 — EvoCodeBench의 Reflection-Revision 루프와 연결
  • 차별점: (1) 자기진화 궤적 측정 최초 체계화, (2) 인간 성능 직접 비교(ARB/AMB), (3) 다언어 long-tail 평가

Methods


벤치마크 구성

문제 선정

  • LeetCode 3,822개 문제에서 최신 100개 선별 → 데이터 오염 최소화
  • 5개 언어별 코드 템플릿 생성 (Python3, C++, Java, Go, Kotlin)

자기진화 프레임워크

  • 최대 3회 Reflection-Revision 반복 루프
  • 각 루프: 실패 원인 분석(엣지케이스, 논리 오류, 복잡도, 언어 문제) → 개선 코드 재생성 → 재평가
  • 문제 사양, 프롬프트, 모델 파라미터 고정 — 오직 솔루션 artifact만 수정

평가 지표

  • 능력 지표: Pass Rate(PR), TLE, MLE, CE, RE, WA, TO, RpE
  • 효율성 지표: Average Runtime(AR), Average Memory(AM), Average Passed Cases(APC)
  • 인간 참조 지표: ARB(Average Runtime Beats), AMB(Average Memory Beats) — LeetCode 인간 제출 분포 백분위 기준

방법론 다이어그램

graph TD
    A[LeetCode 3,822 문제 풀] -->|오염 방지 필터링| B[100문제 평가 세트]
    B --> C[5개 언어 코드 템플릿 생성]
    C --> D[LLM 초기 솔루션 생성]
    D --> E{LeetCode 저지 실행}
    E -->|통과| F[능력 지표 기록]
    E -->|실패| G[자기 진화 루프<br/>최대 3회 반복]
    G --> H[Reflection: 실패 원인 분석]
    H --> I[Revision: 개선 코드 생성]
    I --> J{반복 횟수 < 3?}
    J -->|Yes| E
    J -->|No| K[최종 결과 기록]
    F --> L[효율성 지표 측정<br/>AR / AM / APC]
    K --> L
    L --> M[인간 참조 지표 산출<br/>ARB / AMB]

    style G fill:#ffe4e1
    style M fill:#f3e5f5

Results


  • 평가 모델: GPT-5.2, Claude-4.5-Opus, Gemini-3-Flash/Pro, Grok-4.1-Fast, DeepSeek-v3.2
  • 데이터셋: 100문제 × 5언어
  • 핵심 발견: 자기진화 효과가 언어마다 비대칭적 — long-tail 언어에서 최대 개선

실험 결과 상세

기본 Pass Rate 비교 (100문제 기준)

ModelPython3C++JavaGoKotlin
GPT-5.28490919078
Claude-4.5-Opus8285878483
Gemini-3-Flash7984848275
DeepSeek-v3.234111177

자기진화 효과 (Gemini-3-Flash, 3회 반복)

LanguageBefore PRAfter PRGainRuntime 감소
Python37987+10.1%-7.8%
C++8499+17.9%-46.4%
Java8498+16.7%N/A
Go8295+15.9%N/A
Kotlin7595+26.7%N/A

인간 비교 지표 (GPT-5.2)

LanguagePRARB (%)AMB (%)
Python38468.0637.98
C++9071.8756.48
Kotlin7888.4483.12

Discussion


  • Long-tail 언어에서 자기진화 효과 극대화: Kotlin(+26.7%)이 Python3(+10.1%)보다 3배 큰 개선 — 초기 성능 낮을수록 reflection의 상대적 이득 증가
  • “통과”와 “효율적 통과”의 괴리: GPT-5.2 C++ PR=90이지만 ARB=71.87% — pass rate만으로는 불충분
  • 한계 1: 100문제 규모가 통계적 신뢰성 부족
  • 한계 2: LeetCode 알고리즘 중심 — 실제 SW 엔지니어링(API, 리팩토링)과 생태적 타당성 한계
  • 한계 3: 3회 반복 한도 자의적 — 수렴 패턴 분석 부재

Insights


  • 주목할 점: 자기진화 효과의 언어별 비대칭성은 “능력 격차 보완 메커니즘”으로 해석 가능 — 취약 영역에서 더 큰 개선 달성
  • 연결 고리: Reflexion의 언어 강화학습 프레임워크와 직접 연결. LeetCode 인간 분포 기반 ARB/AMB는 LMSYS Chatbot Arena의 Elo 방식과 유사
  • 시사점: 자동화 코딩 시스템 도입 시 pass rate뿐 아니라 런타임·메모리 효율성을 함께 평가해야 함
  • 비판적 코멘트: LeetCode 참여자는 경쟁 프로그래머로 편향 — ARB/AMB가 일반 개발자 대비 비교인지 불확실

Discussion Points


  • 논쟁점: “오직 솔루션 artifact만 수정”하는 고정 설계가 현실적 자기진화 시나리오를 반영하는가? 실제 시스템은 프롬프트 전략이나 tool use도 수정 가능
  • 검증 필요 가정: LeetCode 인간 분포가 “일반 프로그래머”를 대표한다는 가정이 미검증
  • 후속 연구: (1) SWE-bench 유형 코드베이스 수정 환경에서 자기진화 측정, (2) 추론 비용 대비 성능 향상 트레이드오프, (3) 자기진화 개선의 일반화 가능성 종단 연구