Study

TDD, BDD, DDD

gilssang97 2021. 10. 1. 23:03

TDD (Test Driven Development)

TDD를 직역하면 테스트 주도 개발이다.

TDD는 매우 짧은 개발 서클의 반복에 의존하는 소프트웨어 개발 프로세스이다.

새로운 기능에 대해 자동화된 테스트 케이스를 먼저 작성하고 테스트 케이스를 통과하는 최소한의 코드를 작성한다.

그 이후, 코드에 대한 리팩토링을 진행한다.

우리가 흔히 새로운 기능에 대한 코드를 짠 후, Test 코드를 짜는 것과 대비되는 모습을 보여준다.

TDD는 "테스트 케이스 작성 -> 기능 구현 -> 리팩토링"의 단계를 반복하여 좋은 코드를 작성하기에 유리하다.

각 기능마다 테스트를 통해 기능의 안정성을 보장할 수 있다.

하지만, 테스트 케이스를 작성해야한다는 점으로 인해 절대적인 코드량이 늘어날 수 밖에 없어 프로젝트 개발의 시간이 증가할 수 밖에 없다.

또한, 테스트 케이스를 작성하는데 있어 높은 이해도가 필요하여 진입장벽이 높은 편이다.

BDD (Behavior Driven Development)

BDD를 직역하면 행위 주도 개발이다.

TDD을 기반으로 파생된 개념으로 테스트 케이스 자체가 요구사양이 되도록 개발하는 것이다.

TDD는 테스트 자체에 집중해 개발하지만, BDD는 비지니스 요구사항에 집중하여 테스트 케이스를 개발한다.

BDD는 결합 테스트와 시나리오 테스트까지 확장한다.

DDD (Domain Driven Design)

DDD는 직역하면 도메인 주도 디자인이다.

DDD는 데이터 중심의 접근법을 탈피하여 순순한 Domain모델과 로직에 집중한다.

DDD의 핵심 목표는 모듈간의 의존성은 최소화(Loosly Coupling)하고, 응집성은 최대화(High Cohesion)한다는 것이다.

도메인의 요소로는 Entity, Value, Aggregate, Repository, Service가 존재한다.

(추가 공부 요망..)