Book/Programming

[Test-Driven Development: By Example] 테스트 주도 개발-Money편

개랭갱깽스타 2020. 2. 25. 15:13
테스트 주도 개발 Test-Driven Development
국내도서
저자 : 켄트 벡 / 김창준,강규영역
출판 : 인사이트 2014.02.15
상세보기
상세보기

TDD

  • 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
  • 중복을 제거한다.

프로그래밍 순서

  1. 빨강 - 실패하는 작은 테스트를 작성한다. 처음에는 컴파일조차 되지 않을 수 있다.
  2. 초록 - 빨리 테스트가 통과하게끔 만든다. 이를 위해 어떤 죄악(copy and paste, 테스트만 간식히 통과할 수 있게끔 함수가 무조건 특정 상수를 반환하도록 구현하기 등)을 저질러도 좋다.
  3. 리팩토링 - 일단 테스트를 통과하게만 하는 와중에 생겨난 모든 중복을 제거한다.

  • 불확실한 상태로 있는 대신, 가능하면 재빨리 구체적인 학습을 하기 시작한다.
  • 침묵을 지키는 대신, 좀 더 분명하게 커뮤니케이션한다.
  • 피드백을 회피하는 대신, 도움이 되고 구체적인 피드백을 찾는다.
  • (자신의 나쁜 성깔을 직접 해결해야 한다.)

다중 통화를 지원하는 Money 객체

TDD 단계

  1. 테스트 작성
  2. 컴파일되게 하기
  3. 실패하는지 확인하기 위해 실행
  4. 실행하게 만듦
  5. 중복제거
    : 1~4는 빠르게 진행
"$5 * 2 = $ 10 을 테스트하자!"

Test Case - 1

"컴파일 에러를 고치고 테스트가 실패하는 것을 확인하자!"

Test Result - 1-1 (Fail)

"조금 수정하고 테스트가 성공하는 것을 확인하자!"

간단하게 코드 추가
Test Result - 1-2 (Success)

"중복을 제거하기 위해 리팩토링을 하자!"

테스트에 있는 데이터와 코드에 있는 데이터 중복 제거   객체 초기화 단계의 설정코드를 times() 메서드 안으로 옮김

작업코드와 테스트코드 사이의 중복 제거
Test Result - 1-3 (Success)


  • 오직 테스트를 향상시키기 위해서만 개발된 기능을 사용했다.
  • 두 테스트가 동시에 실패하면 망한다는 점을 인식했다.
  • 위험 요소가 있음에도 계속 진행했다.
  • 테스트와 코드 사이의 결합도를 낮추기 위해, 테스트하는 객체의 새 기능을 사용했다.

  • 큰 테스트를 공략할 수 없다. 그래서 진전을 나타낼 수 있는 자그마한 테스트를 만들었다.(Divide and qunqer)
  • 뻔뻔스럽게도 중복을 만들고 조금 고쳐서 테스트를 작성했다.
  • +) 모델 코드까지 도매금으로 복사하고 수정해서 테스트를 통과했다. (Dollar -> Fran)
  • 중복이 사라지기 전에는 집에 가지 않겠다고 약속했다.

반응형