한줄평

테스트를 하라. 성공시켜라. 리팩토링하라.

책을 읽게 된 계기

단위테스트를 작성하다가 자연스럽게 TDD라는 개발 방법론을 접하게 되었습니다. 실제로 가능한건지 몸소 체험해보고 싶었고, 이 책을 통해 기본적인 개념을 느끼고 프로젝트에 직접 적용해보고자 했습니다.

작가 소개

켄트 벡(Kent Beck)

켄트 벡(Kent Beck, 1961년~ )은 미국의 소프트웨어 엔지니어이자, 협업적이고 반복적인 디자인 프로세스의 엄격한 사양을 삼가는 소프트웨어 개발 방법론인 익스트림 프로그래밍의 개발자이다. 애자일 소프트웨어 개발의 창설 문서인 애자일 선언문의 17명의 오리지널 서명인 가운데 한 명이었다. 현재 캘리포니아주 샌프란시스코에 거주하고 있으며 소셜 미디어 기업 페이스북에서 종사하였다.1

핵심요약

테스트 성공 전략

  • 가짜로 구현하기 : 상수를 반환하다가, 점점 변수로 변환해간다.
  • 명백한 구현 사용하기 : 실제 구현을 입력한다.
  • 삼각측량 : 두 테스트를 만들고, 이를 모두 해결하기 위한 코드를 작성한다.

TDD Process

  • 작은 테스트를 추가한다.
  • 모든 테스트를 실행하고, 실패하는 것을 확인한다.
  • 코드에 변화를 준다.
  • 모든 테스트를 실행하고, 성공하는 것을 확인한다.
  • 중복을 제거하기 위해 리팩토링한다.

TDD에 도움이 되는 디자인 패턴

  • 커맨드 : 계산 작업에 대한 호출을 메시지가 아닌 객체로 표현
  • 값 객체 : 객체가 생성된 후 값이 절대로 변하지 않게 한다.
  • 널 객체 : 계산 작업의 기본 사례를 객체로 표현한다.
  • 템플릿 매서드 : 계산 작업의 변하지 않는 순서를 추상 메서드로 표현한다.
  • 플러거블 객체 : 둘 이상의 구현을 객체를 호출하여 다양성을 표현한다.
  • 플러거블 셀렉터 : 객체별로 서로 다른 메서드가 동적으로 호출되게 하여 필요없는 하위 클래스의 생성을 피한다.
  • 팩토리 메서드 : 생성자 대신 메서드를 통해 객체를 생성한다.
  • 임포스터 : 현존 프로토콜의 다른 구현을 추가하여 시스템에 변이를 도입한다.
  • 컴포지트 : 하나의 객체로 여러 객체의 행위 조합을 표현한다.
  • 수집 매개변수 : 여러 다른 객체에서 계산한 결과를 모으기 위해 매개변수를 여러곳으로 전달한다.

평가

제목에 충실하게 이 책은 예제를 통해 저자가 직접 TDD를 어떻게 적용하는지 보여줍니다.

구체적인 예시와 실제 테스트 커버리지 분석 등의 결과를 통해 TDD가 얼마나 효율적인지 확인할 수 있습니다.

또한, 후반부에 제시하는 디자인 패턴들도 TDD와 객체지향을 좀더 깊게 이해하고 적용할 수 있도록 도와줍니다.

느낀점

예제 코드의 흐름이 지나치게 구체적인 것 같다가도, 어느새 완성되어 가는 코드를 보며 직접 TDD로 코딩을 하는듯한 느낌을 받았습니다.

이 책을 읽고 TDD를 직접 사용하면서 테스트 주도 개발의 안정성과 녹색 막대를 보는 즐거움을 느꼈고, 앞으로도 TDD를 코딩 습관이자 패러다임으로서 계발해 나갈 생각입니다.

추천

테스트를 어느정도 짜면서 막연하게 TDD에 대해 알고 있었던 분들의 추상적인 개념을 구체화하는데 많은 도움이 될 것 같습니다.

References

URL게시일자방문일자작성자