테스트 주도 개발(TDD)

테스트 주도 개발(TDD)

TDD란 Test Driven Development의 약자로 테스트 주도 개발이라고 한다. 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.

TDD와 일반적인 개발 방식의 가장 큰 차이점은 테스트 코드를 작성한 뒤에 실제 코드를 작성한다는 점이다.

디자인(설계) 단계에서 프로그래밍 목적을 반드시 미리 정의해야만 하고, 또 무엇을 테스트해야 할지 미리 정의(테스트 케이스 작성)해야만 한다.

테스트 코드를 작성하는 도중에 발생하는 예외 사항(버그, 수정사항)들은 테스트 케이스에 추가하고 설계를 개선한다. 이후 테스트가 통과된 코드만을 코드 개발 단계에서 실제 코드로 작성한다.

이러한 반복적인 단계가 진행되면서 자연스럽게 코드의 버그가 줄어들고, 소스코드는 간결해진다. 또한, 테스트 케이스 작성으로 인해 자연스럽게 설계가 개선됨으로 재설계 시간이 절감된다.

JUnit (TDD의 대표적인 Tool)

JUnit은 현재 전 세계적으로 가장 널리 사용되는 'Java 단위 테스트 프레임워크' 이다.

디버깅 시간을 단축 할 수 있다.

이는 유닛 테스팅을 하는 이점이기도 하다. 예를 들면 사용자의 데이터가 잘못 나온다면 DB의 문제인지, 비즈니스 레이어의 문제인지 UI의 문제인지 실제 모든 레이러들을 전부 디버깅 해야하지만, TDD의 경우 자동화 된 유닛테스팅을 전재하므로 특정 버그를 손 쉽게 찾아낼 수 있다.

Given-When-Then Pattern

준비

테스트를 위해 검증하는 과정.
테스트에 사용하는 변수나 입력값을 정의

실행

실제로 액션을 하는 테스트를 실행하는 과정
하나의 메서드만 실행하는 것이 바람직하므로 테스트 코드중에 가장 심플한 구문이다.

검증

테스트를 검증하는 과정이다.
예상한 값, 실제 실행을 통해서 나온 값을 검증한다.