12월 23, 2023

TDD (Test Driven Development), BDD (Behavior Driven Development) 란?

 프로그래밍 개발 프로세스 중 TDD, BDD 라는 말을 들어보았을 것이다. 

간단히 말해서 TDD는 Test Driven Development의 약자, BDD는 Behavior Driven Development의 약자이다.  

오늘은 각각의 정의와 특징에 대하여 알아보도록 하겠다. 


1. TDD (Test Driven Development)

Full name이 의미하는 것처럼 TDD는 테스트 주도 개발이다. 코드를 작성하기 전 테스트를 먼저 작성해야 한다. TDD는 아주 짧은 개발 서클의 반복에 의존한다고 볼 수 있다. 

TDD에서 개발자는 요구되는 기능에 대한 테스트 케이스를 작성하고 해당 테스트 케이스를 통과하는 짧으면서도 가독성 좋은 코드를 작성하는 것이다. 즉 테스트를 먼저 작성하고 그 테스트를 통과하기 위한 코드를 이후에 작성하는 것이다. 코드를 작성한 뒤에 필요에 따라 리팩토링(Refactoring) 하는 과정을 거칠 수 있다. 

* Test Code 작성 => Production Code 작성 => 리팩토링


[TDD 장점]

위 프로세스처럼 코드를 작성하면 깔끔하게 코드를 작성할 수 있고 리팩토링을 통해서 코드의 퀄리티를 높일 수 있다. 


[TDD 단점] 

하지만 단점도 존재한다. 

일단 테스트코드를 작성하면서 절대적인 코드량이 늘어나고 테스트케이스에 대한 고민이 있을 수 있다. 어디서부터 어디까지 테스트를 해야 할지, 어디부터 테스트를 해야 할지에 대한 고민이 필요하다. 일정이 빡빡한 프로젝트에서는 적용하기 어려울 수 있는 개발 프로세스이다. 


2. BDD (Behavior Driven Development)

BDD는 TDD와 완전 다른 개념은 아니고 TDD를 base로 하여 파생된 프로그래밍 개발 프로세스이다. TDD에서는 테스트 통과를 위한 코드를 작성했다면, BDD에서는 그 개념에서 더 나아가 테스트 케이스 자체가 코드의 요구사항이 되도록 하는 방식이라고 생각하면 된다.

TDD에서 각 테스트 케이스에 대한 유닛테스트를 진행했다면, BDD에서는 통합 테스트와 시나리오 테스트까지 확장해서 진행한다. 


즉 BDD를 사용하면 TDD에서 논의된 단점을 커버할 수 있다. 

어디서부터 테스트를 진행할지, 어떤 기능은 테스트하고 어떤 것은 하지 않을지 등의 고민을 해결할 수 있다.