TDD | Test Code
- TDD 란?
- TDD(Test Driven Development) 즉, 테스트 주도 개발이다. 테스트가 개발을 이끌어가는 방법론이다.
- 테스트가 개발보다 선행하게 된다.
- 개발해야 하는 사항을 미리 정의하고, 각 기능의 입/출력을 미리 정한 뒤, 기능을 구현하는 프로세스는 아주 일반적인 개발 과정이다.
- 이때 TDD 방식으로 개발하게 된다면, 테스트 코드를 먼저 작성함으로써 개발사항과 각 기능의 입/출력 요구사항을 코드로 문서화한 후 기능을 개발하게 된다.
이를 통해, 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다.

- 테스트를 먼저 작성한다.
- 테스트할 대상은 아직 구현되지 않았으므로, 테스트는 실패한다.(실패는 보통 빨간색으로 표현된다.)
- 테스트가 통과되도록 코드를 작성한다.
- 구현이 완료되면 테스트는 성공한다.(성공은 보통 초록색으로 표현된다.)
- 기존 코드를 필요에 따라 리팩토링한다.
- 리팩토링은 기존 동작에 영향을 주면 안 된다. 다시 말하면, 입/출력은 변하지 않고, 내부적인 동작만 바꾸어야한다.
- 리팩토링은 종종 사이드이펙트를 불러오기도 한다.
- 하지만 테스트 코드로 이런 사이드 이펙트를 확인할 수 있다. 리팩토링하다가 동작에 문제가 생긴다면, 테스트는 실패할 것이다.
- 한편, 리팩토링을 성공적으로 했다면 기존 테스트 역시 성공한다.
👉 이처럼 TDD를 하게 되면 실패 → 성공 → 리팩토링의 순환을 가지는 “레드-그린-리팩토링” 순서로 개발을 진행하게 된다.
- Test Code 작성 이유
보통 본인이 만든 프로젝트를 테스트할때엔 임의의 데이터로 계속해서 테스트 하게 되는데, 이렇게 되면 일일히 모든 정보를 입력해야 되는건 물론 데이터베이스에 아무 의미 없는 데이터들이 쌓인다는 문제가 생긴다.
따라서, 테스트 코드를 이용해 프로젝트를 테스트 하게 되면 임의의 데이터를 생성해 테스트 후 데이터 베이스가 초기화 되기 때문에 일일히 데이터를 만들어서 테스트 할 필요도 없고, 임의의 데이터가 쌓이는 문제도 해결 할 수 있게 된다.
- Test Code 장점
- 재사용성
- 디버깅 시간 단축
- 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있다. (에러를 클라이언트 보다 빨리 발견 할 수 있다.)
- 작성한 코드가 의도한 대로 작동하는지 검증할 수 있다.
- 코드 변경에 대한 사이드 이펙트를 줄이는 예방책이다.
- 코드 수정이 필요한 상황에서 유연하고 안정적인 대응을 할 수 있게해준다.
- 코드 변경 시, 변경 부분으로 인한 영향도를 쉽게 파악할 수 있다.
- 코드 리팩토링 시 기능 구현이 동일하게 되었다는 판단을 내릴 수 있다.(예를 들어 버전업을 하면서 현재 구현된 기능이 제대로 버전업에서도 동일하게 구현되게 한다.)
- 테스트 코드를 통해 동작하는 방식 및 결과 확인이 가능하다.
[참고 링크]
https://6mini.github.io/test%20code/2022/11/01/tdd/
[테스트 코드] TDD의 기본 개념
[견고한 서비스를 위한 테스트 코드 작성] 테스트가 개벌을 이끌어가는 방법론인 TDD의 기본 개념
6mini.github.io
https://hanamon.kr/테스트-코드-작성의-중요성/
테스트 코드 작성의 중요성 - 하나몬
❗️개요 ❗️테스트란? 기능을 개발했는데 잘 구현되었는지 어떻게 확인할 수 있을까? 바로 테스트! 기능을 개발한 후 잘 구현되었는지 테스트 코드를 작성하고 리팩토링을 통해 향상시킬 수
hanamon.kr
'woncoding > TIL' 카테고리의 다른 글
| TIL | 2.10.금 [CI/CD] (0) | 2023.02.13 |
|---|---|
| TIL | 2.9.목 [Django User Model vs DRF Custom User Model] (0) | 2023.02.09 |
| TIL | 2.7.화 [Rest API / Fast API] (0) | 2023.02.09 |
| TIL | 2.6.월 [CS 기초지식 | JWT] (0) | 2023.02.07 |
| TIL | 2.3.금 [CS 기초지식 | Django ORM] (0) | 2023.02.06 |