테스트 주도/행동 주도/도메인 주도 개발방법론으로 각각은 프로젝트의 성격과 목표에 따라 선택해서 사용하며, 조합해서 사용하기도 한다고 한다.
TDD는 개발 과정에서 테스트를 중심으로 코드를 작성하는 방법론이다. 개발자는 먼저 테스트 케이스를 작성하고, 그 다음에 해당 테스트를 실패하는/통과하는 코드를 작성한다. 이렇게 함으로써 기능을 추가하거나 수정할 때마다 테스트를 실행하여 코드의 안정성과 예상 동작 여부를 검증한다. TDD는 기능이나 모듈 간의 상호 작용보다는 개별 함수나 메서드의 동작을 중심으로 테스트하며, 테스트로는 유닛테스트, 통합테스트를 주로 진행한다.
예시) 실패하는 테스트 코드 작성 -> 통과하는 테스트 코드 작성 -> 코드 리팩터링
BDD는 TDD를 기반으로 한, 개발 프로세스에 사용자의 행위와 시나리오를 중심으로 한 개발 방법론이다. BDD는 테스트 케이스를 스펙과 비슷한 형태로 작성하며, 사람이 이해하기 쉬운 언어로 표현한다. Given-When-Then 형태로 표현하여 주어진 상황에서 어떤 동작을 하고 기대하는 결과가 나오는지를 명시한다. BDD는 비기술적인 스테이크홀더(프로젝트에 관여하는 기술적인 이해가 없는 이해관계자)와 개발자 간의 의사 소통을 촉진하고, 사용자 요구사항을 명확하게 전달하고 구현할 수 있도록 도와준다.
예시)온라인 쇼핑몰 개발을 가정 하면
Given: 사용자가 상품 목록 페이지에 접근한 상태
When: 사용자가 상품을 선택하고 장바구니에 담으려고 한다.
Then: 상품이 장바구니에 추가되어야 한다
이렇게 시나리오 중심으로 테스트케이스를 작성해, 동작에 대해 중점적으로 표현한다.
DDD는 소프트웨어 개발 과정에서 도메인 영역을 중심으로 설계하는 개발 방법론이다. DDD는 소프트웨어의 설계와 구조를 도메인 영역에 맞춰 구축하는 개념으로, 비즈니스 도메인의 복잡성을 이해하고 그에 맞는 모델과 코드를 개발하여 비즈니스 문제를 해결하는 것이 DDD의 핵심이다. 이 때 도메인 모델은 도메인 전문가와 함께 구축하면 비즈니스 로직을 보다 명확하고 유연하게 표현할 수 있도록 도움을 받을 수 있다.
예시)은행 어플리케이션 개발을 가정하면
Customer (고객): 고객은 계좌를 가지며, 입출금과 잔액 조회가 가능하다.
Account (계좌): 계좌는 계좌번호와 잔액 정보를 가지며, 입금과 출금 기능을 제공한다.
Transaction (거래): 거래는 입금 또는 출금을 나타내며, 거래 내역을 기록한다.
이처럼 비즈니스 도메인을 중심으로 모델링하여 실제 비즈니스 도메인을 반영하는 개념적 모델과 코드를 구현합니다.