더북(TheBook)

옳거니! 반환 객체의 속성명을 잘못해서 passengerInformation 대신 passengerInfo로 적었다. 속성명을 정정하고 다시 테스트하면 성공한다(그림 2-3). 그림을 보면 it 문의 문장도 passengerInformation 프로퍼티에 할당한다고 바뀌었다.

► 그림 2-3

 

flightInformation 할당 테스트도 마찬가지 방법으로 실행하면 createReservation 함수는 문제가 없음을 확인할 수 있다.

반환 객체의 속성명을 잘못 쓴 실수가 createReservation 함수를 구현한 코드에 잠복해 있지만, 이번에는 테스트를 먼저 작성한 뒤 명세에 따라 테스트를 했으므로 다른 개발자가 통합 테스트를 진행하다가 연락할 때까지 몇 시간(또는 며칠, 몇 주) 기다리지 않고도 에러를 즉시 확인하여 조치할 수 있다.

createReservation 같은 사소한 함수마다 일일이 테스트를 만들어 기능을 붙이라는 건 너무하지 않나 여기는 독자도 있을 것이다. 하지만 TDD의 반복 과정이 디버깅 시간을 엄청나게 단축한 사례는 절대 드물지 않다.

배열 데이터를 받아 많은 계산을 수행하는 함수를 개발한다고 치자. 한 번에 후다닥 함수 본체를 코딩했는데, 계산 과정에서 마지막 회차 값이 빠지는 한끗차이 에러(off-by-one error)가 숨어 있었다.

함수 실행 후 계산된 결괏값은 당연히 맞지 않을 것이다. 하지만 이유는 도저히 모르겠다. 계산 수식에 잘못된 부분이 있나 아니면 수치 오버플로(numeric overflow)를 처리하지 않아서 그런가, 머리가 아파지기 시작한다. 처음부터 간단하게라도 계산 단계와 배열 원소에 대해 테스트를 작성하여 검증했더라면 훨씬 더 빨리 한끗차이 에러를 솎아내고 다음 업무로 넘어갔을 것이다.

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