DonHurry

[TDD] 프로세스 본문

TDD

[TDD] 프로세스

_도녁 2024. 1. 12. 01:50

새로운 사이드 프로젝트를 시작하면서, 테스트 주도 개발(Test-Driven Development) 방식을 적용해보고 싶어 "클린 코드를 위한 테스트 주도 개발"이라는 교재를 샀다. 번역본이 2015년에 나온 책이라, 버전이나 문법 문제가 매우 많지만 파이썬과 Django를 이용한 TDD 교재가 없어 아쉬운 대로 구매했다. 지금은 Django 버전이 5.0까지 나왔는데, 해당 책은 1.7이다... 그렇지만 버전으로 인한 문법 변화와 다양한 에러를 마주하고, 해결하는 것도 개발 실력에 도움이 된다고 생각해서 괜찮다.

 

가장 먼저 마주치는 것은 단위 테스트와 기능 테스트이다. 기능 테스트는 사용자 관점에서 애플리케이션 외부를 테스트하는 것이고, 단위 테스트는 프로그래머 관점에서 그 내부를 테스트한다는 것에 의미가 있다. 책에서 주로 지향하는 작업 순서는 다음과 같다.

 

  1. 기능 테스트를 작성해서 사용자 관점의 새로운 기능성을 정의하는 것부터 시작한다.
  2. 기능 테스트가 실패하고 나면 어떻게 코드를 작성해야 테스트를 통과할지 생각해본다. 이 시점에서 하나 또는 그 이상의 단위 테스트를 이용해서 어떻게 코드가 동작해야 하는지 정의한다.
  3. 단위 테스트가 실패하고 나면 단위 테스트를 통과할 수 있을 정도의 최소한의 코드만 작성한다. 기능 테스트가 완전해질 때까지 과정 2와 3을 반복한다.
  4. 기능 테스트를 재실행해서 통과하는지 또는 제대로 동작하는지 확인한다. 이 과정에서 새로운 단위 테스트를 작성해야 할 수도 있다.

위의 과정을 보면 기능 테스트는 상위 레벨, 단위 테스트는 하위 레벨을 주도하게 된다.

 

 

위의 이미지가 기능 테스트와 단위 테스트로 구성되는 TDD 프로세스이다.

  • 기능 테스트 (Functional tests)
  • 단위 테스트 (Unit tests)
  • 단위 테스트-코드 주기 (Unit test-code cycle)
  • 리팩터링 (Refactoring)

 

책의 초기 부분임에도 불구하고 코드와 방법을 따라가다보면 많은 인내심이 필요하단 걸 알 수 있다. 코드 개발 과정도 글로 정리해볼까 했지만, 워낙 세부적으로 테스트하고 코드를 수정하는 것이 반복되다보니 커밋만 해두는 것으로 결정했다. 평소에는 테스트 코드의 중요성을 알고 있으면서도, 개발이 완성되면 귀차니즘에 빠져 작성하지 않는 경우가 다반사였다. TDD 방법을 따라가면 사소한 오류나 생각하지 못한 에러를 마주할 확률이 낮아지고, 애초에 테스트 코드를 먼저 작성해야하기 때문에 꼼꼼하게 개발할 수 있다. 물론 주객이 전도되는 상황은 피해야겠지만, 지금은 그저 천천히 따라가며 TDD를 체화해봐야겠다.

 

 

Reference

클린 코드를 위한 테스트 주도 개발 (비제이퍼블릭, 2015)

https://github.com/hjwp/Book-TDD-Web-Dev-Python

'TDD' 카테고리의 다른 글

[TDD] 유용한 개념들  (0) 2024.01.15