> For the complete documentation index, see [llms.txt](https://hjin9445s-organization.gitbook.io/archive/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hjin9445s-organization.gitbook.io/archive/web/di-and-spring_test/tdd.md).

# 4. TDD

* [TDD 란](#tdd-란)
  * [TDD Cycle](#tdd-cycle)

## TDD 란

TDD란 소프트웨어가 완전히 개발되기 전에 소프트웨어 요구 사항을 테스트 케이스로 변환하고, 모든 테스트 케이스에 대해 소프트웨어를 반복적으로 테스트해 개발을 추적하는 소프트웨어 개발 프로세스이다.

개발 순서는 다음과 같다.

1. 테스트를 추가한다.
   * 기능을 추가하기 전에 유스케이스에 대한 분석을 통해 테스트 코드를 먼저 작성하면 개발자가 코드를 작성하기 전에 요구사항에 집중할 수 있다.
2. 모든 테스트를 실행하고 실패해야 한다.
   * 해당 기능을 위해 새로운 코드가 필요하고 테스트 하네스가 잘 작동하고 있음을 확인한다.
3. 테스트를 통과하는 가장 단순한 코드를 짠다
   * 어떤 코드든 통과만 하면 된다.
4. 모든 테스트를 통과해야 한다
5. 필요에 따라 리팩토링 후 테스트를 통해 기능이 유지되는지 확인한다.
   * 유지보수와 가독성을 고려해 리팩토링되어야 한다.

### TDD Cycle

1. Red -> 실패하는 테스트 코드를 작성
2. Green -> 최대한 빨리 테스트를 통과시킴
3. Refactor -> 리팩터링
