테스트 주도 개발 (Test-driven Development)
기존 개발 흐름의 문제점 : 2에서 한번에 복잡한 기능을 만들면, 오류가 많이 발생한다. 그렇게 되면 디버깅을 위한 로그 메시지를 추가하고 개발 도구가 제공하는 디버거를 이용해서 코드를 한 줄씩 따라가면서 원인을 찾는다. 이런 방식은 많은 시간이 걸린다.
설계 및 테스트 케이스 작성
테스트 (기능이 올바르게 동작하는지 검증하는 테스트 코드를 작성, 이 때 테스트를 작성하는 과정에서 구현을 생각하지 않고 단지 테스트를 통과할 만큼만 코드 작성)
테스트를 통과한 뒤에는 개선할 코드가 있으면 리팩토링 (테스트 코드 자체도 리팩토링 대상)
리팩토링을 수행한 뒤에는 다시 테스트를 실행해서 기존 기능이 망가지지 않았는지 확인
테스트 코드가 있으면 리팩토링을 보다 과감하게 진행할 수 있다.
코드 수정에 대한 피드백이 빠르다
유지보수 비용을 낮춘다.
구현하기 쉬운 테스트부터 시작!
쉬운 경우에서 어려운 경우로 진행
예외적인 경우에서 정상인 경우로 진행
구현이 막히면 과감하게 코드를 지우고 미련 없이 다시 시작하는 것도 하나의 방법
최대한 어려운 경우를 나중에 시작한다. 왜냐하면 어려운 경우를 통과시키기 위한 테스트를 만들면, 한 번에 구현해야 할 코드가 많아진다. 그럼 나도 모르게 버그를 만들고 나중에 버그를 잡기 위해 또 시간이 들여진다.
예외 상황을 먼저 테스트해야 하는 이유는 예외 상황을 초반에 전혀 고려하지 않은 코드에 예외 상황을 반영하려면 코드의 구조를 뒤집거나 코드 중간에 예외 상황을 처리하기 위해 조건문을 중복해서 추가하는 일이 벌어진다. 이는 코드를 복잡하게 만들어 버그를 만들 수 있다.