[architecture Series Ddd] 06.01.tdd
March 1, 2025
TDD와 관계
DDD
- 비즈니스 도메인을 깊이 이해하여 소프트웨어 시스템을 설계하는 데 중점을 두는 아키텍쳐 접근 방식
- 도메인 전문가와 소프트웨어 개발자 간 협업을 강조
- 복잡한 비즈니스 요구 사항에 대한 공동의 이해를 창출
- 비즈니스 도메인의 개념, 언어 및 프로세스를 기반으로 소프트웨어 시스템을 모델링하는 것을 옹호
TDD
- 프로덕션 코드 작성 전 자동화된 테스트를 작성하는 것을 지지하는 소프트웨어 개발 관행
- Red-Green-Refactoring 주기를 따르며, 처음에 원하는 기능을 정의하기 위해서 실패한 테스트 케이스를 작성
- 그 다음 테스트를 통과할 수 있을 만큼만 구현
- 마지막으로 코드, 테스트를 리팩토링해서 모든 테스트를 통과하면서 품질을 개선
시너지
- 공유된 이해
- 둘 다 이해 관계자, 도메인 전문가, 개발자 간의 협업과 커뮤니케이션을 장려
- TDD는 개발자가 도메인 전문가가 이해할 수 있는 언어로 테스트를 작성하도록 정려
- 점진적 개발
- 개발자가 관리하기 쉬운 작은 단위로 테스트와 코드를 작성하는 점진적 개발을 장려
- 이러한 흐름은 반복 개발과 도메인 전문가의 지속적인 피드백을 강조하는 DDD와 궤를 같이함
- 문서로서의 테스트
- TDD에서 테스트는 실행 가능한 문서의 한 형태
- 테스트는 시스템의 예상 동작과 기능을 설명
- 구현 검증과 코드베이스가 도메인 모델 및 요구 사항과 일치하도록 보장하는 살아있는 문서
- 품질 보증
- TDD는 초기 회귀와 버그를 잡아낼 수 있는 안전망을 제공
- 이는 비즈니스 목표에 부합하는 고품질 소프트웨어를 제공한다는 DDD의 목표와 일치
- 리팩토링 및 유연성 유지
- 둘 다 설계와 유지보수성을 개선하기 위해서 리팩토링을 권장
- TDD의 리팩토링 단계를 통해 건설적인 방향으로 코드베이스를 발전시킬 수 있다. DDD가 도메인에 대한 진화하는 이해를 바탕으로 리팩토링하고 개선하기 위한 접근을 하는 것과 뜻을 같이한다.