[TIL] TDD with django

ddwwmm_1·2022년 12월 8일
0

TDD란?

TDD

Test-Driven-Development 의 약자로 "테스트 주도 개발" 을 뜻한다.
에자일 개발 방법론중 하나인 eXtream Programming(XP)의 주요 실천방법중 하나이며 반복 테스트를 이용한 소프트웨어 개발 방법론이다.

보통 코드를 우선 작성하고 테스트를 해보곤 하는데 TDD의 경우 테스트코드를 우선적으로 작성하고 이를 통과하기 위한 코드를 작성한다고 볼 수 있다.

아래 그림은 TDD의 계념을 잘 나타내고 있다.

  1. 요구사항 분석후 테스트코드를 작성한다.(실패하는 테스트)
  2. 테스트코드를 통과하도록 기능을 구현한다.
  3. 통과한 코드를 리펙토링한다.(중복 제거, compose method 패턴 등)

위의 순서와 같이 1 -> 2 -> 3의 순서로 진행후 완료되면 다시 1로 돌아가 테스트코드를 작성하고 진행하게 된다.

그렇다면 현실적으로 어떻게 개발해야 TDD스럽다 라고 말할수 있을까?

우선 알아둬야할 계념은 기능 테스트(Funtional Test)단위 테스트(Unit Test)다.

기능 테스트

  • 사용자 관점에서의 app 외부 테스트
  • ex) 사용자가 해당 웹 페이지에 접속하려고 한다. 이 동작을 수행할 수 있는가?

단위 테스트

  • 개발자 관점에서의 내부 테스트
  • ex)
    • 해당 페이지가 존재하는가?(urls.py에 매핑되어 있는가?)
    • views.py에 함수, 클래스로 요청에 대한 처리가 정의되어 있는가?
    • 접속 요청에 대한 응답이 html 형식인가?

이처럼 기능 테스트는 단위테스트 보다 좀더 상위의 계념으로 볼 수 있다.
이제 TDD 개발과정으로 넘어가보자.

아래 그림은 TDD개발의 기본 프로세스이다.

위의 절차대로 테스트 작성 후 실행을 위한 최소코드를 작성해 통과할때 까지 반복하는 과정이 필요한것을 볼수 있다.

여기서 위의 프로세스를 단위테스트로 보았을때 해당 상위 기능테스트를 만족하기 위해 이런 프로세스가 여러번 반복될 것이다.

아래 그림은 기능테스트와 단위테스트의 관계를 잘 보여준다.

여기서 두 테스트의 차이점은 기능테스트의 리팩토링은 application 단에서 이뤄지는것이고 단위테스트(내부 프로세스)의 리팩토링은 실행되는 코드(함수, 클래스)영역에서 실행되는것을 볼수있다.

이처럼 TDD의 전체적인 흐름은 기능테스트의 테스트 코드 작성(1), 단위테스트의 테스트 코드 작성(2), 단위 테스트 통과 및 리팩토링(3), 기능테스트 통과 및 리팩토링(4) 의 순서로 진행된다고 말할수 있다.

참고자료
https://nesoy.github.io/articles/2017-01/TDD
https://www.youtube.com/watch?v=dGrrbspxfqk&list=PL7Jt0R1Ai2ynwIP9MwI0-zmlBh_YtoiiG&index=10

0개의 댓글