TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 합니다. 반복 테스트를 이용한 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다.
TDD는 다음의 세단계를 반복하면서 개발합니다.
1. 실패하는 테스트 코드를 작성
2. 작성한 테스트를 통과할 정도 만큼의 코드를 작성
3. 동작(behavior)를 변경하지 않고 코드를 개선
테스트 코드를 먼저 작성한다는 것은 전체 어플리케이션에 비해 작은 부분이기 때문에 고치기 쉽고 설계 개선이 쉽다. 나중에 커진 어플리케이션에서 설계를 개선하고 수정해야 하는 어려움을 작은 단위에서 최대한 해결하는 것에 의의가 있습니다.
TDD에서 겪을 수 있는 어려움은 단위테스트에 집중하기 때문에 통합시 문제가 발생할 가능성이 높다는 점입니다.
BDD는 Behavior Driven Development의 약자로 '행위 주도 개발'이라고 합니다. 기본적으로 TDD에 기반을 두고 있지만 BDD는 요구사항 자체가 테스트 케이스가 되도록 합니다.
예를 들어, 계산기 애플리케이션을 개발할 때 add(1, 1)의 결과가 2인지 확인하는 것은 TDD,
사용자가 = 을 눌렀을 때 2가 출력되는지 확인하는것이 BDD라고 볼 수 있습니다.
BDD는 TDD와 달리 함수 단위의 테스트보다는 시나리오 형태의 케이스를 작성하는 것을 권장합니다. 시나리오는 Given, When, Then 구조를 가지는 것을 기본 패턴으로 합니다.
Given: 시나리오 진행에 필요한 값을 설정합니다.
When: 시나리오 진행에 필요한 조건을 명시합니다.
Then: 시나리오를 완료했을 때 보장해야하는 결과를 명시합니다.
DDD는 Domain Driven Design의 약자로 '도메인 주도 개발'이라고 합니다.
도메인이란 소프트웨어에서 요구사항을 해결하기 위해 정의된 기능입니다.
DDD는 데이터베이스 스키마가 먼저 설계되고 이에 맞춰 대부분의 로직이 결정되는 기존 개발절차를 타파하고자 등장했습니다. 도메인 모델의 적용범위를 구현까지 확장하여 도메인 지식이 코드에 적용되는 것을 목표로 합니다.