더북(TheBook)

validateAndRegisterUser는 본질적으로 어떤 일을 하는 함수에서 남이 한 일을 조정하는 함수로 탈바꿈했다. 덕분에 이 함수는 테스트하기 쉬워져서 다음 여섯 조건만 확인하면 완벽한 기능 테스트를 할 수 있다.

user가 잘못 넘어오면 에러가 난다.

잘못된 user는 등록하지 않는다.

잘못된 user는 표시하지 않는다.

올바른 user를 인자로 userRegister.registerUser 함수를 실행한다.

userRegister.registerUser에서 에러가 나면 userDisplay.showRegistrationThankYou 함수는 실행하지 않는다.

user가 성공적으로 등록되면 user를 인자로 userDisplay.showRegistrationThankYou 함수를 실행한다.

 

전체 테스트는 여섯 개로 줄었다. 조금 전에는 테스트가 아홉 개였고 그나마 일부에 불과했다.

서로 다른 관심사는 작고 간단한 모듈로 나누어 만들면 코드 작성과 테스트, 그리고 이해가 쉽다. 이런 식으로 만든 코드는 장기적으로도 별 탈 없이 작동할 가능성이 크다.

TDD가 개발 속도를 늦출 것으로 생각하는 사람도 있으리라. 관심사를 제대로 분리하지 않은 채 먼저 코딩하고 테스트를 작성하는 식으로 진행하면 정말 늦어지게 될 것이라 확신한다. 무수한 실수의 늪에 빠져 허우적거리기 전에 단위 테스트가 실수를 가능한 한 빨리 발견하는 길이라는 진리를 기억하라.

적색-녹색-리팩터 과정을 반복하며 작은 코드를 개발하다 보면 점점 속도가 붙게 된다. 음악 연주자가 처음엔 느리고 조심스럽게 연습하다가 점점 연주곡을 더 빨리 마스터하게 되는 것과 같은 이치다. 첫째, 작은 코드는 대개 간단하고 실수할 가능성이 작아 디버깅 시간을 상당히 줄일 수 있다. 둘째, 테스트로 코드를 완전히 커버하니 리팩토링을 하더라도 무서울 게 없다. 따라서 코드를 DRY하게 유지하여 코드베이스(codebase)에 오류 발생 여지를 줄이고 규모를 작게 가져갈 수 있다. DRY는 결국 재사용을 의미하며 알다시피 재사용 가능한 코드는 시간을 절약한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.