TDD — 테스트가 곧 설계
TDD — 테스트가 곧 설계
1. 요약
TDD (Test-Driven Development) 는 1990년대 후반 Kent Beck 이 XP 의 핵심 관행으로 재발견 했고, 2003년 Test-Driven Development: By Example 책으로 정식 방법론이 됐다. Red → Green → Refactor 의 짧은 사이클이 핵심. Beck 자신이 "TDD 는 testing 이 아니라 design 도구" 라고 강조했다.
2. 배경 (이전 도구의 한계)
전통적 SW 개발은 코드 작성 → 나중에 테스트 작성 → 버그 발견 → 수정 의 비용 폭발 패턴. 테스트는 검증 으로만 보였다. Beck 의 통찰: 테스트를 먼저 쓰면 → 인터페이스가 명확해진다 → 즉 테스트는 설계 도구 다.
3. 핵심 개념·표기법
Red-Green-Refactor 사이클 (수 분 ~ 수십 분):
| 단계 | 의미 |
|---|---|
| Red | 실패하는 작은 테스트 작성 (컴파일 안 돼도 됨) |
| Green | 테스트 통과시키는 최소 코드 작성 (sin 을 저질러도 OK) |
| Refactor | 새 코드 + 기존 코드 모두 정리 |
3 법칙 (Robert Martin):
- 실패하는 단위 테스트 없이는 production 코드 ❌
- 컴파일·실패하기에 충분한 만큼만 테스트 작성
- 실패하는 테스트를 통과시키는 만큼만 production 작성
4. 언어·OS 매핑 (★ 강의 핵심)
| 시대 | 언어·도구 | TDD 활용 |
|---|---|---|
| 1998~ | Java + JUnit, Smalltalk + SUnit | Beck 가 만든 xUnit 시리즈 |
| 2000s | Ruby, Python, JavaScript | RSpec, pytest, Mocha |
| 2010s | Go, Rust, Kotlin | 언어별 standard test runner |
| 2020s | AI 시대 | ★ LLM 이 TDD를 자동 적용 (Claude Code 의 test_driven 기본 워크플로우) |
★ Anthropic 의 Claude Code 는 TDD 비협상 원칙을 박았다 — 30분 이상 작업이면 무조건 테스트 먼저. 이는 본 강의 Plan-First 방법론의 핵심.
5. 현대까지의 영향
- xUnit 패밀리 — JUnit, NUnit, pytest, RSpec, Mocha 등 거의 모든 언어
- Mock 객체 (Tim Mackinnon 2000) — TDD 의 보조 도구
- BDD (2003) — TDD 의 사용자 관점 진화
- Property-based Testing (QuickCheck 1999, Hypothesis) — 무작위 입력 TDD
- Mutation Testing — 테스트 강도 검증
- AI 자동 테스트 생성 — Claude Code, Cursor 의 test_first 모드
★ TDD 의 Red-Green-Refactor 리듬 이 LLM 시대에는 spec 작성 → LLM 코드 생성 → 검증 으로 진화했다. 짧은 피드백 사이클 이라는 본질은 영원.
6. 주요 인물·사건
| 연도 | 사건 |
|---|---|
| 1989 | Beck, Smalltalk 에서 Test First 실험 (자전거 부품) |
| 1996 | Chrysler C3 — XP 의 일부로 TDD 정착 |
| 1999 | Beck + Erich Gamma, JUnit 1.0 (Java) |
| 2003 | Beck, Test-Driven Development: By Example |
| 2008 | Robert Martin, Clean Code — TDD 3 법칙 정식화 |
| 2014 | DHH (David Heinemeier Hansson), TDD is Dead 논쟁 — 그래도 TDD 살아남음 |
| 2024 | Anthropic Claude Code — TDD 자동화 |
7. 강의 활용
"테스트는 검증이 아니라 설계 도구" — Beck 의 25년 된 통찰이 LLM 시대에 부활. AI 에게 코드를 시키기 전에 테스트를 먼저 쓰면, AI 가 명세에 맞는 코드 를 만든다 — 이것이 본 강의 Plan-First × TDD 비협상 의 핵심.
출처
- Test-driven development — Wikipedia
- bliki: Test Driven Development — Martin Fowler
- Canon TDD — Kent Beck Substack
- Test-Driven Development: By Example — Internet Archive
그룹 시리즈
→ synthesis/group-se_g4 (시대 그룹 종합 카드)