CS

TDD와 단위테스트

Rosie_dev 2021. 11. 24. 00:52

TDD

 

 

테스트 주도 개발. Test-Driven Development.

테스트 코드를 작성하고 코드를 개발하는 것을 말한다. TDD를 불확실성이 높은 프로젝트일수록 그리고 피드백이 많이 필요한 개발에 유용한 방식이다. 테스트 코드에서 패스한 코드만을 실제 코드로 작성하므로서, 버그를 줄이고 코드를 간결하게 할 수 있다. 재설계 시간도 감소하게 된다.

 

기존의 개발 프로세스에서는 설계 다음 개발이 이뤄지고, 테스트를 진행해서 설계를 수정하는 방식이었다면, 설계 다음 바로 테스트를 진행해서 설계를 수정할 수 있도록 하는 방법론이다.

 

TDD의 중요성이 대두되는 이유

먼저, 객체지향적인 코드 개발에 있다. 좀 더 명확하고 각각의 메서드 기능을 구조화시킬 수 있다는 장점이 있다. 코드의 재사용성을 기반으로 하기 때문에 객체지향적인 코드가 되는 것이다.

그리고 미리 테스트 시나리오를 작성하므로서 코드 개발 전 기능을 구현하기 위한 예외 상황들을 미리 확인해보고 조사하게 되는 효과가 발생하여 예외 코드를 작성하기 쉬워진다. 즉, 설계 수정시간이 줄어들고 디버깅 시간도 줄어든다.

뿐만 아니라 테스트 지향적인 개발은 좀 더 사용자관점에서 진행되는 개발이므로 입출력에 대한 구조나 소스에 대한 파악이 쉬워진다. 기술중심적으로 보는 것이 아니라서 유지보수의 용이하다.

 

TDD에 대한 부정적 인식

개발시간의 증가한다는 생각 때문이다. 실제로 TDD 도입 소프트웨어는 15~35% 정도의 개발시간 증가, 결함률(버그)은 약 40~90% 정도 줄어들었다고 한다(Microsoft, IBM).

 

TDD는 어떻게 진행되는가

먼저 테스트를 추가한다. 작성한 시나리오들을 실행시켜서 실패(RED)하는 것이 있는지 확인한다. 실패한 코드를 수정해서 업데이트한다. 그리고 다시 실행해서 테스트가 통과하는 프로덕션 코드(GREEN)를 작성한다. 테스트가 통과하면 이 프로덕션 코드를 리펙토링(REFACTOR)한다.

 

 

 


 

단위테스트

 

TDD와 달리 일반적으로 한 단위만을 테스트하는 것이다. 밥의 단위테스트 규칙(FIRST)에 따르면 단위테스트는 빨라야 하고, 독립적으로 작성되어야 한다. 그리고 어느 환경에서든 반복 가능해야 하며, 자체 검증이 되어야 한다. 

 

 


테스트 주도 개발 - 위키백과, 우리 모두의 백과사전

Test Driven Development (TDD) Tools and Agile Process

선택이 아닌 필수 TDD – Ahea Team Study Blog

[기술면접] TDD(Test-Driven-Development) 방법론에 대해서

CLIPSOFT

"TDD 실천법과 도구" 책 전체를 PDF 공개합니다.

 

 

 

댓글