AI가 요구사항 문장만 보고 소프트웨어 저장소 전체를 처음부터 짓게 하려면, 설계도를 한 번 그리고 끝내는 게 아니라 코딩하면서 계속 고쳐야 한다는 연구
AI가 요구사항 문장만 보고 소프트웨어 저장소 전체를 처음부터 짓게 하려면, 설계도를 한 번 그리고 끝내는 게 아니라 코딩하면서 계속 고쳐야 한다는 연구
기존 코드 생성 AI들은 파일 구조나 모듈 경계가 미리 정해진 상태에서 코드를 채워 넣는 데는 강했지만, 자연어 요구사항만 주어졌을 때 저장소 구조 자체를 설계하는 일에는 취약했다. Repo0은 요구사항과 구현 컴포넌트를 각각 그래프로 표현하고, 두 그래프를 연결한 채로 코딩이 진행되는 동안에도 구조를 쪼개고 합치고 고치도록 만든 프레임워크다. 여섯 개의 실제 오픈소스 저장소를 재현하는 실험에서 기존 최강 baseline보다 기능 커버리지 최대 20.08%p, 테스트 통과율 최대 29.74%p를 더 높였다.
METAL MEDIA 해설 도표
AI가 요구사항 문장만 보고 소프트웨어 저장소 전체를 처음부터 짓게 하려면, 설계도를 한 번 그리고 끝내는 게 아니라 코딩하면서 계속 고쳐야 한다는 연구
- 01기존 방식(RPG 등)은 요구사항을 한 번 분석해 저장소 설계도를 만들고 그 설계도대로 코드를 찍어내는 방식이었는데, 이는 실제 개발과 다르다. 코드를 짜다 보면 처음 설계한 모듈 경계가 틀렸다는 게 뒤늦게 드러나기 때문이다.
- 02Repo0은 요구사항 단위들의 관계를 나타내는 그래프(requirement-level DAG)와 실제 구현 모듈들의 의존관계를 나타내는 그래프(component-level DAG)를 따로 만들고 두 그래프를 연결(alignment)해서, 요구사항 쪽은 비교적 고정한 채 구현 쪽 구조만 계속 진화시킨다.
- 03응집도(한 모듈이 서로 관련 있는 역할만 묶고 있는지)와 결합도(두 모듈이 겹치는 책임을 갖고 있는지)라는 지표를 기준으로, 모듈을 쪼개기(split), 합치기(merge), 설명만 고치기(revise), 그대로 두기(save)라는 네 가지 행동을 반복하다가 더 이상 바꿀 게 없으면 구조를 확정한다.
- 04구조가 확정된 뒤에는 테스트부터 만들고 코드를 채우는 방식(TDD)으로 실제 코드를 생성하며, 테스트가 실패하면 해당 부분만 국소적으로 수정한다.
- 05scikit-learn, pandas, sympy, statsmodels, requests, django를 각색한 여섯 개 벤치마크 저장소에서 GPT-5 mini와 DeepSeek V3.2 두 모델로 실험한 결과, 모든 설정에서 기능 커버리지와 테스트 통과율이 가장 높았다.
무엇을 했나
- 기존 방식(RPG 등)은 요구사항을 한 번 분석해 저장소 설계도를 만들고 그 설계도대로 코드를 찍어내는 방식이었는데, 이는 실제 개발과 다르다. 코드를 짜다 보면 처음 설계한 모듈 경계가 틀렸다는 게 뒤늦게 드러나기 때문이다.
- Repo0은 요구사항 단위들의 관계를 나타내는 그래프(requirement-level DAG)와 실제 구현 모듈들의 의존관계를 나타내는 그래프(component-level DAG)를 따로 만들고 두 그래프를 연결(alignment)해서, 요구사항 쪽은 비교적 고정한 채 구현 쪽 구조만 계속 진화시킨다.
- 응집도(한 모듈이 서로 관련 있는 역할만 묶고 있는지)와 결합도(두 모듈이 겹치는 책임을 갖고 있는지)라는 지표를 기준으로, 모듈을 쪼개기(split), 합치기(merge), 설명만 고치기(revise), 그대로 두기(save)라는 네 가지 행동을 반복하다가 더 이상 바꿀 게 없으면 구조를 확정한다.
- 구조가 확정된 뒤에는 테스트부터 만들고 코드를 채우는 방식(TDD)으로 실제 코드를 생성하며, 테스트가 실패하면 해당 부분만 국소적으로 수정한다.
- scikit-learn, pandas, sympy, statsmodels, requests, django를 각색한 여섯 개 벤치마크 저장소에서 GPT-5 mini와 DeepSeek V3.2 두 모델로 실험한 결과, 모든 설정에서 기능 커버리지와 테스트 통과율이 가장 높았다.

| Real Repo | Para. Name | #Files | LOC | Task Counts |
|---|---|---|---|---|
| scikit-learn | MLKit-Py | 185 | 65,972 | 236 |
| pandas | TableKit | 217 | 106,447 | 175 |
| sympy | SymbolicMath | 699 | 218,924 | 192 |
| statsmodels | StatModeler | 271 | 83,325 | 234 |
| requests | HttpEasy | 17 | 2,793 | 50 |
| django | PyWebEngine | 681 | 109,457 | 165 |

| Model | Method | requests | statsmodels | django | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Cov. (%) | Nov. (%) | Pass./Vot. (%) | Cov. (%) | Nov. (%) | Pass./Vot. (%) | Cov. (%) | Nov. (%) | Pass./Vot. (%) | ||
| GPT-5 mini | mini-SWE-agent | 68.18 | 2.63 | 4.11 / 27.40 | 18.18 | 9.09 | 0.00 / 31.86 | 47.92 | 6.96 | 37.04 / 44.44 |
| Paper2Code | 95.50 | 7.20 | 24.66 / 24.66 | 44.32 | 24.13 | 4.42 / 30.09 | 66.67 | 15.30 | 30.04 / 78.60 | |
| RPG | 90.91 | 13.70 | 31.51 / 95.89 | 70.40 | 13.80 | 77.90 / 92.00 | 60.42 | 11.58 | 47.33 / 74.07 | |
| Repo0 | 100.00 | 18.20 | 50.98 / 100.00 | 80.68 | 11.48 | 85.51 / 98.65 | 80.50 | 13.59 | 74.36 / 97.12 | |
| DeepSeek V3.2 | mini-SWE-agent | 86.36 | 15.34 | 21.92 / 47.95 | 59.09 | 23.39 | 2.65 / 53.98 | 33.33 | 9.38 | 10.70 / 47.33 |
| Paper2Code | 90.91 | 11.80 | 4.11 / 56.16 | 14.77 | 5.00 | 49.56 / 61.95 | 62.50 | 43.46 | 7.82 / 53.50 | |
| RPG | 95.45 | 9.23 | 61.64 / 90.41 | 64.70 | 13.70 | 39.29 / 73.57 | 68.75 | 26.50 | 46.50 / 69.55 | |
| Repo0 | 100.00 | 24.77 | 78.08 / 100.00 | 78.41 | 14.10 | 69.03 / 86.46 | 79.17 | 14.29 | 74.07 / 93.83 | |
| Human Developer | Gold Project | 100.00 | – | 94.12 / 100.00 | 100 | – | 94.15 / 100.00 | 100.00 | – | 96.34 / 100.00 |

| Repository | Setting | Cov. (%) | Nov. (%) | Pass./Vot. (%) |
|---|---|---|---|---|
| requests | Repo0 | 100.00 | 18.20 | 50.98 / 100.00 |
| w/o Requirement Context | 95.45 (-4.55) | 9.05 (-9.15) | 45.39 (-5.59) / 87.86 (-12.14) | |
| w/o Component-Graph Ordering | 100.00 (0.00) | 12.85 (-5.35) | 50.98 (0.00) / 100.00 (0.00) | |
| w/o Dual-DAG | 95.45 (-4.55) | 9.14 (-9.06) | 48.72 (-2.26) / 87.86 (-12.14) | |
| w/o Structural Evolution | 94.32 (-5.68) | 8.94 (-9.26) | 42.51 (-8.47) / 82.14 (-17.86) | |
| statsmodels | Repo0 | 80.68 | 11.48 | 85.51 / 98.65 |
| w/o Requirement Context | 67.92 (-12.76) | 11.69 (+0.21) | 85.51 (0.00) / 98.65 (0.00) | |
| w/o Component-Graph Ordering | 80.68 (0.00) | 15.57 (+4.09) | 55.51 (-30.00) / 88.65 (-10.00) | |
| w/o Dual-DAG | 78.55 (-2.13) | 14.66 (+3.18) | 85.51 (0.00) / 95.32 (-3.33) | |
| w/o Structural Evolution | 75.35 (-5.33) | 13.50 (+2.02) | 73.51 (-12.00) / 93.65 (-5.00) | |
| django | Repo0 | 87.50 | 13.59 | 74.36 / 100.00 |
| w/o Requirement Context | 78.29 (-9.21) | 12.10 (-1.49) | 64.36 (-10.00) / 100.00 (0.00) | |
| w/o Component-Graph Ordering | 83.56 (-3.94) | 11.58 (-2.01) | 67.70 (-6.66) / 100.00 (0.00) | |
| w/o Dual-DAG | 82.24 (-5.26) | 12.40 (-1.19) | 64.36 (-10.00) / 93.33 (-6.67) | |
| w/o Structural Evolution | 81.58 (-5.92) | 10.94 (-2.65) | 61.03 (-13.33) / 91.66 (-8.34) |
왜 중요한가
저장소 통째로 만들어주는 코딩 에이전트가 실제로 쓸모 있으려면 파일을 나눠 넣는 감각, 즉 소프트웨어 설계 능력이 필요한데, 이 연구는 그 설계 자체를 코딩 과정에서 계속 다시 그려야 한다는 것을 실험으로 보여준다. 개발 도구를 만드는 사람이나 AI 에이전트로 프로젝트 초기 구조를 뽑아내려는 사람에게, 설계를 한 번에 끝내는 접근이 왜 한계가 있는지에 대한 근거를 제공한다.
이 논문의 용어
- Dual-DAG · 요구사항끼리의 관계를 나타내는 그래프와 구현 모듈끼리의 의존관계를 나타내는 그래프, 두 개를 짝지어 함께 관리하는 구조
- DAG(방향 비순환 그래프) · 화살표로 연결되지만 한 바퀴 돌아 제자리로 돌아오지 않는 그래프 구조
- 응집도(Cohesion) · 한 모듈 안에 묶인 요구사항들이 서로 얼마나 관련 있는지를 나타내는 지표, 낮으면 잡다한 기능이 섞여 있다는 뜻
- 결합도(Coupling) · 두 모듈이 담당하는 요구사항이 얼마나 겹치는지를 나타내는 지표, 높으면 두 모듈을 합쳐야 할 후보
- TDD(테스트 주도 개발) · 실제 구현 코드를 짜기 전에 먼저 테스트 코드를 만들어 두고, 그 테스트를 통과하도록 코드를 채워나가는 개발 방식
- Functionality Coverage / Pass Rate · 생성된 저장소가 원본이 요구한 기능을 얼마나 갖췄는지, 그리고 정답 테스트를 얼마나 통과하는지를 재는 지표

최신 논문
- AI 코딩 에이전트에게 과학 소프트웨어 수리를 시켜보니, 절반도 제대로 못 고쳤다AI 코딩 에이전트에게 과학 소프트웨어 수리를 시켜보니, 절반도 제대로 못 고쳤다
- 논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기
- 고객상담 AI 상담원이 규정을 '한 번의 행동'이 아니라 '전체 절차'로 지키게 만드는 방법고객상담 AI 상담원이 규정을 '한 번의 행동'이 아니라 '전체 절차'로 지키게 만드는 방법
- 로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다
- 에이전트 학습용 환경을 새로 만드는 대신, 기존 환경에 '패치 부품'을 씌워 그 에이전트의 약점에 맞게 바꾸는 방법에이전트 학습용 환경을 새로 만드는 대신, 기존 환경에 '패치 부품'을 씌워 그 에이전트의 약점에 맞게 바꾸는 방법
- AI 모델을 '소유'하지 못한 조직은 안전 통제도 절반밖에 못 한다AI 모델을 '소유'하지 못한 조직은 안전 통제도 절반밖에 못 한다
- AI가 선생님 모델을 따라 배우다가, 정답에 다가가는 '좋은 생각'까지 억누르는 문제를 잡아낸다AI가 선생님 모델을 따라 배우다가, 정답에 다가가는 '좋은 생각'까지 억누르는 문제를 잡아낸다
- AI가 특정 사람 말투를 흉내내도록 시켜봤더니, 결국 AI 자신의 말투에서 못 벗어난다AI가 특정 사람 말투를 흉내내도록 시켜봤더니, 결국 AI 자신의 말투에서 못 벗어난다
METAL MEDIA 최신 기사
그림 출처: Silin Chen et al., arXiv:2608.19854, CC BY 4.0