레거시 코드(흔히 테스트가 없고, 변경하기 어려운 코드)는 테스트하기 까다롭습니다 — 얽힌 의존성과 테스트가 없을 수 있습니다. 안전하게 테스트를 추가하는 것은 특성화 테스트(characterization test), 의존성을 끊는 이음새(seam), 점진적 개선 같은 기법을 포함하며, 더 안전한 변경을 가능하게 합니다.
레거시 코드의 과제
레거시 코드는 흔히: 테스트 없음, 강하게 결합됨, 이해하기 어려움, 변경 위험:
→ 테스트 없음 → 변경이 위험 (무언가 깨뜨렸는지 알 수 없음)
→ 테스트 어려움 → 의존성이 얽힘 (unit 격리 불가); 테스트를 위해 설계되지 않음
→ 닭과 달걀 문제: 안전하게 변경하려면 테스트가 필요한데, 테스트하기 어렵다.
특성화 테스트 (현재 동작을 고정)
특성화(골든 마스터) 테스트 → 코드의 현재 동작을 있는 그대로 포착
(완전히 이해하지 못하거나 / 버그가 있어도):
→ 그것이 실제로 지금 하는 것을 단언하는 테스트 작성 → 안전망
→ 그러면 동작이 보존된다는 자신감으로 리팩터링/변경 가능
→ 해야 할 것이 아니라 하는 것을 단언 — 회귀로부터 보호하기 위해.
