[테스트 주도 개발] 17장_Money 회고

1. 다음에 할 일은 무엇인가

Sum.plus() 와 Money.plus() 사이에 중복이 남았다. Expressoin 을 인터페이스가 아니라 클래스가 바꾼다면 공통 코드를 담아낼 적절한 곳이 될 것이다.
작업을 끝낸 후에 SmallLint 같은 코드 감정 프로그램을 실행해보면 좋다.
“다음에 할일은 무엇인가” 에 관련된 또 다른 질문은 “어떤 테스트들이 추가로 필요할까” 이다.
할일 목록이 빌 때가 그때까지 설계한 것을 검토하기에 적절한 시기이다. 말과 개념이 잘 통하는가 ? 현재의 설꼐로 제거하기 힘든 중복이 있는가 ?

2. 메타포

“통화가 다른 여러 금전” 에 대해 사용한 메타포는 벡터였다. 그 전엔, MoneySum 을 사용하다가 적절하고 물리전인 MoneyBag 으로 바꿨다. 그리고 마지막에는 많은 사람에게 익숙한 Wallet 으로 바꿧다. 이 모든 메타포는 Money 의 집합이 딱 떨어지는숫자로 된다는 것을 암시하다. 즉, 같은 통화의 값은 합칠 수 있다. (2USD + 3USD + 5CHF = 5USD + 5CHF)
Expression 메타포는 중복되는 통화를 합치는 세세한 일단의 문제에서 해방시켰다. 코드도 그 어느 때보다 명확하다.

3. 코드 메트릭스

  1. 코드와 테스트 사이에 대략 비슷한 양의 함수와 줄이 있다.
  2. 테스트 코드에 분기나 반복문이 없기 때문에 테스트 복잡도는 1 이다. 명시적인 흐름 제어 대신에 다형성을 사용해서 실제 코드의 복잡도 역시 낮다.

4. 프로세스

TDD 의 주기는,

  1. 작은 테스트 추가
  2. 모든 테스트 실행, 실패 하는 것 확인
  3. 코드에 변화
  4. 모든 테스트 실행, 성공 하는 것 확인
  5. 중복 제거 위해 리펙토링

5. 테스트의 질

TDD 의 부산불로 생기는 테스트들은 다음과 같은 종류의 테스트를 대체할 수는 없다.

  1. 성능 테스트
  2. 스트레스 테스트
  3. 사용성 테스트

이 테스트에 사용하는 지표로는 다음이 있다.

  1. 명령문 커버리지
    테스트의 질에 대한 충분한 평가 기준이 될수 없지만, 테스트의 시작점이다.

  2. 결함 삽입
    테스트의 질을 평가하는 또 다른 방법이다. 코드의 의미를 바꾼 후에 테스트가 실패하는지 보는 것이다. 수동으로 할 수 있지만, Jester 같은 툴을 사용할 수 있다.

테스트 커버리지를 향상 시키는 방법으로는,

  1. 더 많은 테스트를 작성.
  2. 테스트의 수는 그대로 두면서, 프로그램의 로직을 단순화. 리펙토링 단계가 이런 효과를 종종 가져온다.

6. 최종 검토

  1. 테스트를 확실히 돌아가게 만드는 세 가지 접근법
    가짜로 구현, 삼각 측량법, 명백하게 구현
  2. 설계를 주도하기 위한 방법으로 테스트 코드와 실제 코드 사이의 중복 제거하기
  3. 길이 미끄러우면 속도를 줄이고, 상황이 좋으면 속도를 높여라. 테스트 사이의 간격을 조절해라

테스트 주도 개발 <켄트 벡>

Comments