콘텐츠로 이동

테스트 주도 개발 — Kent Beck

정의

Kent Beck 이 정리한 TDD 의 원전. 화폐(돈) 예제로 1·2·3·R·G·R 사이클을 직접 보여주고, xUnit 자체를 TDD 로 만들고, 마지막에 패턴 카탈로그.

본질: "빨강 → 초록 → 리팩터" 의 짧은 사이클이 좋은 설계를 창발 시킨다.

책 메타데이터

항목
저자 Kent Beck (XP·JUnit 창시자)
원서 Test-Driven Development: By Example (Addison-Wesley, 2002)
한국어판(추정) 테스트 주도 개발 (인사이트, 2014, 김창준·강규영 옮김)
분량 3부 32장 + 부록 A·B + 마치는 글 (Fowler)
언어 예제 Java (1부), Python (2부)
관련작 XP Explained (Beck), Extreme Programming Adventures in C#

핵심 메시지 (목차에서 그대로 도출)

메시지 출처 풀이
빨강 → 초록 → 리팩터 책 전체 골격 실패하는 테스트 → 빠른 통과 → 정련. 분 단위 사이클
할 일 목록 1·25장 흐름 끊지 말고 새 아이디어는 목록에
가짜로 구현하기 (Fake It) 1·28장 상수 박아 빠른 초록, 다음 단계에서 진짜
삼각측량 28장 두 번째 테스트로 일반화 강제
두 모자 5·14장 새 기능 / 리팩터링 — 한 번에 하나
xUnit 6 추상화 18~24장 TestCase·TestSuite·TestResult·run·setUp·tearDown 으로 전부
설계가 창발 책 전체 처음부터 완벽 X, 사이클의 누적 결과
테스트도 코드 9장 + Clean Code 9장 깨끗한 테스트 = 깨끗한 코드의 안전망

책의 구조 — 3부 + 부록

목적
1부 화폐 예제 1~17 Money 클래스 진화 — 다중 통화·equals·정적 팩터리·Expression·Bank 까지
2부 xUnit 예시 18~24 xUnit (테스트 프레임워크) 자체를 TDD 로 — 자기 회귀
3부 TDD 패턴 25~32 일반·빨강·테스팅·초록·xUnit·디자인·리팩토링·마스터 패턴
부록 A·B 영향도·피보나치
마치는 글 Fowler TDD 관·균형·실용주의

1부 — 도메인 진화 사이클 정리

변환 도입
1 Dollar.times 부작용 빨강
2 새 객체 반환 (불변) 값 객체
3 equals 동등성
4 private 필드 캡슐화
5 Franc 추가 의도된 중복
6 Money 슈퍼클래스 추출
7 통화 비교 LSP 첫 마주침
8 정적 팩터리 (Money.dollar()) EJ Item 1
9~11 times 통합, 자식 제거 단일 Money
12 $5+$5 → plus Expression
13 Bank.reduce 환율 정책 분리
14 Pair 컬렉션 키
15 $5 + 10 CHF 1장 첫 할 일 완성
16 times 추상화 컴포지트 완성
17 회고 1부 통찰

→ 17장 분량의 작은 단계가 정교한 도메인 모델 (Money·Bank·Expression·Sum) 을 만듦.

위키 기존 페이지와의 매핑

TDD 주제 위키 페이지
equals/hashCode (3·14장) entity-effective-java Item 10·11
값 객체 불변 (2·11장) Item 17
정적 팩터리 (8장) Item 1
서브클래스 제거 (11장) entity-refactoring 12.7
슈퍼클래스 추출 (6장) entity-refactoring 12.8
컴포지트·Strategy (12·16장) concept-design-patterns
책임 주도 설계 발견 entity-object
단순 설계 4규칙 entity-clean-code 12장
자가 테스트 + 리팩터링 entity-refactoring 4장
TDD 3법칙 + F.I.R.S.T. entity-clean-code 9장

같은 인사이트 패턴 — "사이클 안의 거부 신호"

TDD 의 빨강(실패하는 테스트) = 사이클 안에 들어가 있는 거부 신호. 위키의 다른 영역에 같은 패턴 누적.

영역 거부 신호 사이클
TDD 실패 테스트 (빨강) 빨강 → 초록 → 리팩터
자기검증 자동화 테스트·타입체크·exit 1 back-pressure 루프
AI 루프 테스트·타입체크·실제 에러 concept-loop-engineering "거부 신호 없는 루프 = 메아리방"
Hooks guard.sh exit 1 concept-claude-hooks
멀티 에이전트 Critic의 REJECT concept-multi-agent-pattern
트랜잭션 unchecked 예외 자동 롤백 concept-transactional-rollback-policy
DB 풀 Leak 감지 + timeout concept-db-connection-pool

공통 원리: 자동 사이클은 거부 신호 가 있어야 발산 안 함. TDD 가 가장 오래된 사례.

5권 도서 오각형 — OO 설계 학습의 5권 세트

같은 OO/품질 결론을 5권이 서로 다른 단위·시점으로 가리킨다.

관점 단위 시점 언어
entity-object 오브젝트 책임 주도 설계 (목적지) 객체·협력·역할 처음부터 잘 설계 Java
entity-effective-java Effective Java 90 권고 (매뉴얼) 메서드·필드·생성자 매번 짤 때 Java
entity-refactoring 리팩터링 2판 카탈로그 (가는 길) 1단계 변환 이미 짠 코드 JS (2판)
entity-clean-code Clean Code 미시 규칙 + 휴리스틱 줄·이름·함수 매 라인 Java
(이 책) entity-tdd TDD 사이클 (만드는 과정) 사이클 1회 (분) 코드 짜기 전 Java + Python

TDD 의 독특함: 다른 4권이 코드의 결과 (객체·메서드·줄·1단계 변환) 를 다룬다면, TDD 는 코드를 만드는 과정 자체를 다룸. 다른 4권은 "잘 쓰인 코드는 어떤 모습" 을 그리고, TDD 는 "그 모습에 어떻게 도달할까" 를 그림. 5권이 자연스럽게 한 세트.

누구에게·언제 권할 책인가

독자 효과
TDD 입문자 1부 (17장) 가 가장 효과적인 손 익히기
테스트 작성 두려운 개발자 "테스트도 코드" 라는 관점 + 분 단위 사이클
레거시 코드 다루는 사람 TDD 사이클 + 특성화 테스트 (Clean Code 16장)
신입 교육 1부 1·2장 + 3부 25·28장 가 짧고 강력
JUnit 사용자 2부 (xUnit 자체) 가 도구 이해 깊이 ↑

빠른 진단 — 이 책을 펴야 할 신호

  • 코드 짜고 나서 테스트 작성하는 습관 (Test-After)
  • 테스트 작성이 부담스러워 미루는 경향
  • 한 PR 에 여러 기능 + 리팩터링 섞임 (두 모자 위배)
  • flaky 테스트 방치
  • 작은 단계로 분해하기 어려워 큰 변경 한 번에
  • Mock 남발로 테스트가 구현 디테일 검증

위 중 2개+ → 1·2·3·4·5장 (1부 시작) + 25·28장 (패턴) 우선.

한계·주의

  • 2002년 출판 — Java 5 이전. 일부 코드 스타일은 현대 (record·sealed) 와 차이
  • 모든 코드에 TDD 100% 적용은 어려움 — UI·통합·성능은 다른 도구
  • Fowler 의 마치는 글 이 균형 잡힌 시각 — Test-First vs Test-After, Mock 의존도
  • 숙련도가 결정적 — 책 읽기만으로는 부족, 직접 코딩 필수

원본 출처

  • raw/tdd/toc.md — 사용자가 입력한 목차 (2026-06-20)
  • raw/tdd/테스트 주도 개발 실전 강의 교재 1~32장.md + 부록A·B + 마치는글.md — 35편 강의 교재 (사용자 입력 1·2장 + 본 세션 작성 3~32·부록·마치는글)
  • 통합 인덱스: src-tdd-lecture
  • 책 본문 직접 인용 아닌 강의용 재구성

관련 페이지