테스트 주도 개발

Table of Contents

TDD란 무엇인가?

그림1은 TFD(Test First Design) 단계를 UML Activity Diagram으로 표현한 것이다.

  1. 잽싸게 테스트를 추가한다(실패해도 좋아).
  2. 그 테스트를 실행한다. 종종 완전한 테스트suite라도 속도 때문에 서브셋만 실행하는 결정을 내리지만 새로운 테스트는 사실상 실패한다.
  3. 새로운 테스트를 통과시키기 위해 코드를 수정한다.
  4. 다시 테스트를 실행한다.
  5. 만약 실패하면 다시 코드를 수정하고 테스트를 실행한다.
  6. 테스트를 통과하면 리팩토링한다.
    TDD = TFD + refactoring

그림1. The steps of test-first design(TFD)

그림2. Testing via the xUnit Framework

TDD예제

테스트주도개발패턴

테스트(명사)

  • 스트레스를 많이 받으면 테스트는 점점 더 뜸하게 한다
  • 테스트를 뜸하게 하면 에러는 점점 많아질 것이다
  • 에러가 많아지면 더 많은 스트레스를 받게 된다.

어떻게 하면 이 고리를 빠져 나올 수 있을까?

  • 새로운 요소를 도입하거나
  • 기존 요소와 바꿔치기 하거나
  • 화살표를 바꾸면 된다.
  • 이 경우 '테스트'를 'Automated Test(자동화된 테스트)'로 치환하면 된다.

자동화된 테스트가 있다면 스트레스를 받기 시작할 때 테스트를 실행할 것이다.

격리된 테스트

테스트를 실행하는 것이 서로에게 아무 영향이 없어야 한다.

  • 테스트는 전체 애플리케이션을 대상으로 하는 것보다 작은 단위로 하는 게 좋다.
  • 격리된 테스트가 갖는 묵시적 의미
    1. 실행 순서에 독립적이다.
    2. 주어진 문제를 작은 단위로 분리하기 위해 노력해서 각 테스트를 실행하기 위한 환경을 쉽고 빠르게 설정할 수 있게 해야 한다는 것이다.

시스템이 응집도는 높고 결합도는 낮은 객체의 모음으로 구성되도록 해야 한다.

테스트 목록

빨간막대패턴

리팩토링

Tool

참고문헌