[방법론] 테스트 주도 개발 TDD
이 포스트는 TDD 를 공부하기 위해 작성된 글로 잘못된 내용이 있으면 댓글 부탁드립니다.
TDD 개념 잡기
TDD 는 Test Driven Development 의 약자로 테스트 주도 개발 이라고 합니다.
반복적으로 테스트를 진행해서 프로그램을 완성하는 소프트웨어 개발 방법론 중 하나로
작은 단위 테스트들을 작성해 이를 통과한 코드만 추가하는 단계를 반복합니다.
TDD 개발 주기
TDD 는 위 그림의 3가지 단계를 반복적으로 수행해 진행됩니다.
RED, GREEN, BLUE 단계를 각각 살펴보겠습니다.
단계 | 설명 |
---|---|
RED | 실패하는 테스트 코드 를 먼저 작성해야 합니다. |
GREEN | 테스트 코드를 성공 시키기 위한 실제 코드 를 작성합니다. |
BLUE | 작성된 코드에서 중복 코드 제거, 일반화 등 리팩토링 을 진행합니다. |
TDD 를 진행하면서 중요한 것은 아래 2가지와 같습니다.
- 실패 하는 테스트 코드를 작성할 때까지 실제 코드를 작성하지 않는 것
- 실패하는 테스트를 통과할 정도의 최소 코드 작성 을 해야하는 것
TDD 를 통해서, 실제 코드에 기대되는 바를 보다 명확하게 정의함으로서
불필요한 설계를 피할 수 있고, 정확한 요구 사항 에 집중할 수 있습니다.
일반적인 개발 방법
TDD 가 아닌 일반적인 개발 방법의 순서는 요구사항 분석, 설계, 개발, 테스트, 배포 의 순서로 개발됩니다.
그러나 이러한 순서는 소프트웨어 개발을 느리게 하는 잠재적인 위험이 존재합니다.
- 소비자의 요구사항이 처음부터 명확하지 않아 처음부터 완벽한 설계가 어렵습니다.
- 자체 버그 검출 능력 저하 또는 소스 코드가 품질 저하 될 수 있습니다.
- 자체 테스트 비용이 증가할 수 있습니다.
이 위험들이 발생하는 이유는 초기 설계부터 완벽하게 설계할 수 없기 때문입니다.
프로젝트를 진행하면서 여러 조건에 의해 재설계하며 점진적으로 완벽한 설계 에 도달합니다.
하지만 재설계 또한 코드를 수정하면서 불필요할 코드가 남아 여전히 위험성을 갖고 있습니다.
TDD 개발
TDD 개발의 가장 큰 특징은 테스트 코드를 작성한 뒤에 실제 코드를 작성 한다는 것 입니다.
설계 단계에서 프로그래밍의 목적을 미리 정의하고
무엇을 테스트 할지 미리 정의해야 합니다.
- 테스트 코드 작성 중 발생하는 예외 사항(오류, 수정사항)들은 테스트 케이스에 추가하고 설계를 개선
- 테스트가 통과된 코드만을 개발 단계에서 실제 코드로 작성
이 과정을 반복적으로 진행하면서 자연스럽게 코드의 버그가 줄고 코드가 간결해집니다.
또한 테스트 케이스 작성으로 인해 설계가 개선됨으로 재설계 시간을 절감할 수 있습니다.
출처
인파님 블로그 [TDD 방법론]
페스트 캠퍼스 [TDD란?]
하나몬님 블로그 [TDD란? 테스트 주도 개발]