AI 코딩 벤치마크라고 하면 보통 기존 repository에서 issue를 해결하는 장면을 떠올립니다.

하지만 실제 개발에는 완전히 다른 종류의 작업도 있습니다.

기존 source code가 없고, 프로그램의 동작과 문서만 보고 다시 만들어야 한다면?

ProgramBench는 이 질문을 평가합니다.

ProgramBench가 주는 것은 두 가지입니다

ProgramBench의 핵심 설정은 강합니다.

Input
- compiled binary
- documentation

Goal
- 원래 프로그램과 같은 동작을 하는 codebase 구현

모델은 기존 source patch를 찾을 수 없습니다. 프로그램의 인터페이스와 동작을 관찰하고, architecture를 설계하고, 구현해야 합니다.

SWE-bench와 측정하는 능력이 다릅니다

SWE-bench 계열은 보통 기존 repository가 있습니다.

Existing codebase
+ GitHub issue
→ locate relevant code
→ patch
→ tests

ProgramBench는 출발점부터 다릅니다.

Binary + Docs
→ infer behavior
→ design architecture
→ implement
→ reproduce behavior

따라서 "코딩 점수"라는 한 단어로 두 시험을 섞으면 안 됩니다.

왜 from-scratch 능력이 중요할까

AI coding agent의 활용이 넓어질수록 단순 patch보다 다음 작업이 늘어납니다.

  • 오래된 내부 도구 재구현
  • CLI 호환 구현
  • prototype을 production code로 다시 작성
  • specification 기반 신규 서비스 개발
  • reference app 동작 복제

이런 작업에는 repository 검색보다 요구사항 추론과 시스템 설계가 더 중요합니다.

CodeBridge Mini Lab: 작은 CLI를 black-box로 재구현하기

ProgramBench 전체를 실행하기 어렵다면 아주 작은 버전을 만들 수 있습니다.

먼저 간단한 CLI 프로그램 하나를 준비합니다.

$ original-tool normalize " Hello  World "
hello world

$ original-tool count "a,b,c"
3

Agent에게 source는 주지 않고 다음만 줍니다.

- 실행 가능한 binary 또는 sample endpoint
- --help 문서
- 몇 개의 example

그리고 호환 프로그램을 만들게 합니다.

검증은 숨겨둔 input으로 합니다.

seen examples       → 통과하기 쉬움
unseen edge cases   → 진짜 behavior 이해 여부

이 실험은 "예시를 외워 복사했는가"와 "규칙을 추론했는가"를 구분하는 데 좋습니다.

긴 작업이므로 Harness 영향이 커집니다

from-scratch 구현에는 단계가 많습니다.

Explore behavior
→ Write spec
→ Design
→ Implement
→ Test
→ Find mismatch
→ Refine

모델이 한 번의 긴 응답으로 이 모든 것을 끝내려 하면 중간 오류를 놓치기 쉽습니다.

따라서 agent가 progress를 저장하고, 테스트 실패를 분석하고, 다시 수정하는 실행 구조가 중요합니다.

결론: '코드를 고치는 AI'와 '소프트웨어를 만드는 AI'는 다른 시험이 필요합니다

버그 수정 능력이 뛰어난 모델이 빈 프로젝트에서 좋은 architecture를 만드는 데도 항상 최고라고 가정할 수 없습니다.

ProgramBench가 흥미로운 이유는 AI coding을 더 넓게 보기 때문입니다.

기존 코드를 이해하고 고치는 능력뿐 아니라, 동작을 이해해 완성된 프로그램으로 다시 만드는 능력을 묻습니다.

함께 읽으면 좋은 글

참고 자료