💻Computer Science/📔ETC

[개발방법] TDD (Test Driven Development) 기반 개발이란?

Written by Donghak Park

TDD란 무엇인가 ? 

 

TDD란 Test Driven Development의 약자로 한국말로 번역하면 "테스트 주도 개발"이라는 의미이다. 작은 단위의 테스트 케이스를 먼저 작성하고, 이를 통과하는 코드를 추가적으로 계속해서 반복하면서 구현하는 개발 방법을 이야기 한다.

 

짧은 개발 주기의 반복에 의존하는 개발 프로세스이고, 애자일 기법 중에서 eXtream Programming이라는 XP의 Test - First 개념에 기반을 둔 단순한 설계를 중심으로 한다.

 

eXtream Programming : 지속적으로 프로토타입을 완성하는 애자일 방법론 중 하나로 추가 요구사항에 유연하게 대처할 수 잇다.

 

단위 테스트 (Unit Test) : 한 단위를 테스트하는 것 자바나 파이썬의 Class 같이 하나의 기능을 테스트하는 것으로 볼 수 있다.

 

즉 정리하자면 테스트 코드를 미리 작성하고, 그 테스트 케이스를 통과하도록 개발을 계속해서 진행한다는 것이다.


TDD 개발 주기

 

 

Write Failing Test : 실패하는 케이스의 테스트 케이스를 먼저 작성한다.

 

Make Test Pass : 테스트 케이스를 통과할 수 있는 실제 코드를 작성한다.

 

Refactor : 중복 코드 제거, 일반화, 최적화 등의 리팩토링을 수행한다. 

 

이를 계속해서 반복적으로 수행하는 것이 TDD의 개발 방식이며 위의 그림이 그 개발 주기를 표현한 것이다.

 


TDD 개발의 장점

 

1. 객체 지향적인 코드 생산

 

TDD는 코드의 재사용 보장을 명시하므로 TDD를 통한 소프트웨어 개발 시 기능 별 철저한 모듈화가 이루어진다. 이는 종속성과 의존성이 낮은 모듈로 조합된 소프트웨어 개발을 가능하게 하며 필요에 따라 모듈을 추가하거나 제거해도 소프트웨어 전체 구조에 영향을 미치지 않게 된다.

 

2. 재설계 시간의 단축

 

테스트 코드를 먼저 작성했기 때문에 개발자는 자신의 목표가 무엇인지 확실하게 알고 개발을 할 수 있다. 또한 테스트 케이스를 분석하면서 다양한 예외 처리를 할 수 있기 때문에 우연하게 개발을 진행하기 때문에 전반적인 재설계를 예방할 수 있다.

 

3. 디버깅 시간의 단축

 

자동화된 유닛 테스트를 이용하는 경우가 많기 때문에 디버깅을 할 때 특정기능을 검사하고 넘어가기 때문에 복잡한 디버깅을 할 확률이 줄어든다.

 

4. 추가 구현의 용이함

 

테스트를 기반으로 하기 때문에 새로운 기능이 추가되었을 때 발생할 수 있는 문제점을 빠르게 찾을 수 있고, 추가 기능을 적용할 수 있다.

 


TDD의 단점

 

많은 장점에도 불구하고 항상 TDD를 사용하지 않는 이유는 무엇일까 ? 

 

1. 개발 속도가 느리다. ( 생산성이 낮다. )

 

TDD는 유닛 테스트를 위한 테스트 코드를 작성하고, 실패 케이스에 대해서 고민하면서 계속해서 테스트를 진행해야 하기 때문에 개발 속도가 늦다. 이러한 문제는 마감일이 있는 프로젝트에서 큰 단점으로 작용할 수 있다.

 

2. 처음부터 잘 적용하기 힘들다.

 

기존의 개발자들이 진행하던 방식에서 변경해야 하기 때문에 익숙하게 사용하기가 어렵다.

 

 

### References

더보기