늘 겸손하게

CS - Software Engineering - TDD(Test Driven Development) 본문

Computer Science/Software Engineering

CS - Software Engineering - TDD(Test Driven Development)

besforyou999 2022. 11. 2. 14:18

TDD - Test Driven Development

 

"테스트 주도 개발"

 

반복적인 검토와 고쳐쓰기로 소프트웨어를 개발하는 방식

 

우리는 보통 개발할 때, 설계(디자인)를 한 이후 코드 개발과 테스트 과정을 거치게 된다.

 

 

 

하지만 TDD는 기존 방법과는 다르게, 테스트케이스를 먼저 작성한 이후에 실제 코드를 개발하는 리팩토링 절차를 밟는다.

 

 

 

 

반복적인 검토와 고쳐쓰기를 통해 좋은 글이 완성되듯이 반복적인 검토와 고쳐쓰기로 소프트웨어를 개발하는 방식이 TDD

 

 

[ 장점 ]

 

1. 작업과 동시에 테스트를 진행하면서 실시간으로 오류 파악이 가능하다 ( 시스템 결함 방지 )

2. 짧은 개발 주기를 통해 고객의 요구사항 빠르게 수용 가능. 피드백이 가능하고 진행 상황 파악이 쉬움

3. 자동화 도구를 이용한 TDD 테스트케이스를 단위 테스트로 사용이 가능함

(자바 - JUnit, C/C++은 CppUnit 등)

4. 개발자가 기대하는 앱의 동작에 관한 문서를 테스트가 제공해줌

 

[ 단점 ]

 

1. 기존 개발 프로세스에 테스트케이스 설계가 추가되므로 생산 비용 증가

2. 테스트의 방향성, 프로젝트 성격에 따른 테스트 프레임워크 선택 등 추가로 고려할 부분의 증가

 


[ 굳이 필요하나요? ]

 

TDD를 활용하면, 처음 시작하는 단계에서 테스트케이스를 설계하기 위한 초기 비용이 확실히 더 들게 된다. 그래서 굳이 필요한가라는 의문이 들 수 있지만 개발 과정에 있어서 '초기 비용'보다 '유지보수 비용'이 더 클 수 있다는 것을 명심하자.

 

또한 안전성이 필요한 소프트웨어 프로젝트에서는 개발 초기 단계부터 확실하게 다져놓고 가는 것이 중요하다.

 

유지보수 비용이 더 크거나 비행기, 기차에 필요한 소프트웨어 등 안전성이 중요한 프로젝트의 경우 현재 실무에서도 TDD를 활용한 개발이 이루어지고 있다.