마지막 장은 새 패턴을 늘어놓지 않는다. 대신 지금까지의 패턴들을 어떻게 조율하며 쓰는가, 그리고 TDD가 더 큰 그림 속 어디에 놓이는가를 짚는다. 벡의 답들은 대체로 “정답은 없고 감각을 기르라”는 쪽이다 — 카탈로그를 규칙이 아니라 손잡이로 쓰라는 것이다.

걸음 크기 — 얼마나 잘게 갈 것인가

걸음 크기. TDD의 걸음은 고정된 크기가 아니다. 익숙한 영역에서는 명백한 구현(28장)으로 성큼 가고, 낯설거나 불안한 영역에서는 가짜 구현·삼각측량으로 잘게 쪼갠다. 핵심은 걸음의 크기를 자유자재로 조절하는 능력이다. TDD는 항상 작게 가라는 게 아니라, 필요할 때 작게 갈 수 있는 기어를 쥐여 준다.

판단 기준: 빨강이 예상 밖으로 자주 뜨면 걸음을 줄이고, 초록이 지루할 만큼 쉬우면 걸음을 키운다. 함정: 남이 잘게 간다고 나도 잘게, 남이 성큼 간다고 나도 성큼 가는 건 흉내다 — 걸음은 자기 확신 수준에 맞춘다.

피드백 — 무엇을 얼마나 자주 듣는가

피드백. TDD의 동력은 짧은 피드백 루프다. 테스트가 빨강/초록으로 즉시 답하고, 커밋이 저장 지점을 찍고, 리팩터링이 설계를 다듬는다. 피드백이 빠를수록 추측이 줄고 실수가 일찍 드러난다. 느린 테스트가 문제인 이유도 여기 있다 — 피드백이 늦으면 그 사이에 쌓인 실수가 커진다.

판단 기준: “지금 이 판단이 맞는지 몇 초 안에 확인되는가”가 좋은 루프의 척도다. 함정: 피드백 없이 오래 코드를 쌓아 두고 한꺼번에 돌리면, 여러 실수가 뒤엉켜 어느 것이 원인인지 못 가린다.

테스트 삭제 — 언제 지우는가

테스트 삭제 기준. 테스트도 유지 비용이 있다. 두 테스트가 사실상 같은 코드 경로를 검증하고, 하나가 사라져도 자신감이 줄지 않는다면 지워도 된다. 판단의 축은 둘이다 — 자신감(이 테스트가 잡아 주는 게 있는가)과 의사소통(이 테스트가 설명하는 게 있는가). 둘 다 아니라면 잉여다.

판단 기준: “이 테스트를 지우면 자신감이나 문서 가치를 잃는가?”가 아니오면 지운다. 함정: 중복이라며 경계 조건·회귀 테스트를 지우면, 겉보기엔 겹쳐도 실제로는 다른 실패를 지키던 것을 잃는다 — “같은 경로”인지부터 확인한다.

전환 비용 — 왜 어렵게 느껴지는가

전환 비용. TDD로 옮겨 갈 때 가장 큰 장벽은 기술이 아니라 습관이다. “코드부터 짜고 나중에 테스트”라는 몸에 밴 순서를 뒤집는 데 드는 비용이다. 처음엔 느리게 느껴지지만, 디버깅에 쏟던 시간이 앞단으로 옮겨 온 것일 뿐 총량은 대개 준다. 넘어야 할 언덕은 실력이 아니라 관성이다.

판단 기준: “느려졌다”는 체감은 대개 디버깅 시간이 안 보이던 곳에서 앞으로 옮겨 온 착시다 — 총 소요와 재작업까지 합쳐 본다. 함정: 초기의 느림에 지쳐 “테스트는 나중에”로 후퇴하면 전환은 영원히 미완으로 남는다.

TDD가 놓인 자리 — 패턴, XP와의 관계

TDD는 홀로 서 있지 않다. 아래로는 디자인 패턴(30장)과 맞닿아 있고 — 중복을 지우다 보면 패턴에 도달하고, 패턴을 알면 리팩터링의 목적지가 보인다. 위로는 익스트림 프로그래밍(XP)의 실천들과 맞물린다 — 짧은 반복, 지속적 통합, 리팩터링, 페어 프로그래밍은 TDD의 짧은 피드백 루프와 같은 결이다.

TDD가 주는 진짜 선물은 코드가 아니라 심리다. 두려움을 지루함으로 바꾸는 것 — 큰 도약 앞의 불안을, 언제든 초록으로 돌아갈 수 있다는 확신에서 오는 차분함으로 바꾼다. 테스트가 지켜 주니 과감하게 고칠 수 있고, 과감하게 고칠 수 있으니 설계가 깨끗하게 자란다.

책을 닫으며

  • 3부의 패턴들은 규칙이 아니라 손잡이다. 상황에 맞게 골라 쓰되, 왜 그 손잡이를 잡는지는 스스로 판단한다.
  • TDD의 리듬은 단순하다 — 빨강, 초록, 리팩터링(1장). 이 장들은 그 세 걸음을 더 잘 밟기 위한 세부일 뿐이다.
  • 목표는 테스트를 많이 쓰는 것이 아니라, 두려움 없이 코드를 바꾸는 능력을 갖는 것이다. 테스트는 그 능력을 떠받치는 발판이다.