IT 상식

TDD(테스트 주도 개발)의 의미와 의의

mt프로젝트 2016. 10. 11. 20:09
TDD란 Test Driven Development, 즉 테스트 주도 개발의 줄임말이다.
TDD 개발의 단계는 보통 아래와 같다.
1. JUnit을 사용한 테스트케이스 작성
2. 기능개발
3. 테스트케이스 동작하여 기능테스트
4. 3에서 통과 할 때 까지 1부터 반복

 즉 기능개발과정 앞뒤로 테스트케이스 작성 및 실제 테스트 수행 과정이 추가되어야 하며 그에 따라 실제 개발하는데 걸리는 시간이 상당히 늘어난다.
 그리고 테스트케이스는 해당 기능을 개발하는 사람이 직접 작성하게 되는데 그 사람의 역량에 따라 테스트코드가 제대로 나오기도 하고 잘못 나오기도 한다.
 이런 단점들을 보면 TDD는 안그래도 바쁜 프로젝트에시간만 더 잡아먹게 하는 나쁜 기능이다.
 그렇다면 사람들은 요즘 왜 저런 사상에 주목하는것인가? 그 이유는 역설적이게도 비용과 시간이 절약 되기 때문이다.

 처음 서비스를 구축 할 때는 TDD를 위해 테스트 케이스 넣고 개발하고 그러느라 시간을 더 잡아먹지만, 이후 유지보수단계에서, 특히 개발담당자가 변경된 경우에 이 테스트케이스의 위력이 극대화된다.
 신규인력이 어떤 기능에 대해 내부적인 동작을 완벽하게 이해하지 못하고 레거시 코드의 해석이 어려울 때, 그래서 기능추가 및 수정을 한 이후 기존 코드에 미치는 영향이 없을지 걱정될때, 잘 짜야진 테스트 코드만 있다면 걱정 할 필요가 없다.
 레거시에 대한 이해가 없더라도 테스트케이스가 전부 통과하기만 하면 그것으로 OK인 것이다.
 즉 TDD는 개발단계에서 수고로움을 더하는 대신 유지보수 단계에서 고생을 최소화 시켜주는 사상이다.

 뿐만아니라 TDD에 열광하는 이들의 의견에 따르면 TDD를 하면 테스트케이스를 작성하기 편한 코드를 짜게 되고 그렇게 짜여진 코드는 깔끔하게 모듈화도 잘 되어있고 구조도 알아보기 편한 좋은 코드가 된다고 한다.

 이처럼 다양한 장점이 있는 TDD다. 기회가 닿는다면 한번쯤 도입 해 보는 것도 나쁘지 않을 것이다.