TDD, BDD, DDD

Kyoungchan Cho·2022년 11월 26일
0
post-thumbnail

TDD

(Test-Driven Development, 테스트 주도 개발)
테스트 코드를 먼저 만들고, 실제 프로덕션 코드를 나중에 만드는 개발 방법이다.

TDD 개발 순서

  1. 실패하는 테스트 코드 작성
  2. 테스트가 통과할 수 있도록 프로덕션 코드 작성
  3. 리팩토링

TDD 특징

  • 디버깅 시간을 줄여준다.
  • 동작하는 문서 역할을 한다.
  • 오버엔지니어링을 방지할 수 있다.
  • 설계에 대한 피드백이 빠르다.

BDD

(Behavior-Driven-Development, 행동 주도 개발)
TDD에서 테스트코드를 먼저 작성하는데 다소 막막함이 있기에 코드를 작성하기 전에 테스트 코드 대신 코드가 수행할 행위(Behavior)에 대한 명세를 먼저 작성한다.
TDD의 테스트코드는 기대값(expected value)을 비교하는 코드를 구현했다면 BDD에서는 실제값이어야 하는(should be) 기대값과 같은 형태로 스토리를 작성한다.
TDD는 테스트 자체에 집중하여 개발하는 반면, BDD는 코드 동작, 즉 비즈니스 요구사항에 집중하여 테스트 케이스를 개발한다.

BDD 특징

  • 테스트코드 자체가 요구사항인 개발 방법론이다.
  • TDD에서 파생된 개발 방법론이다.

TDD, BDD의 차이

TDD,BDD 모두 테스트 프레임워크를 사용하여 테스트 코드를 작성지만 TDD는 개발 코드의 완성이 목적이고 BDD는 개발 결과의 검증이 목적이다.
TDD는 코드 자체에 집중한 테스트 코드를 작성하고 BDD는 시나리오를 패턴화해서 여러 국성원들이 테스트 코드를 검증할 수 있도록하여 비즈니스 요구 사항에 더욱 집중할 수 있다.

DDD

(Domain-Driven Development, 도메인 주도 개발)
도메인이란 사용자가 사용하는 것, 소프트웨어로 해결하고자는 문제 영역, 즉 비즈니스 영역을 의미하고 개발자의 입장에선 개발 대상의 영역으로 볼 수 있다.
도메인 주도 개발은 복잡한 도메인을 해결하는 것을 높은 우선순위로 생각하고 그 복잡성을 해결하며 서비스를 개발하는 방법이다.

DDD 특징

  • 유비쿼터스 랭귀지(보편언어)
    도메인 전문가, 모델 전문가, 실제 구현 담당자 등 각 분야의 전문가들의 협업을 수월하기 위해 보편언어를 사용한다. 도메인과 구현 사이의 불일치를 해소할 수 있게 한다.

  • 모델 주도 설계
    분석/설계/구현의 모든 단계를 관통하는 하나의 모델을 유지한다.
    모델링을 통해 가져올 수 있는 통찰을 코드에도 적용할 수 있다.

summary

TDD는 테스트 주도 개발로 테스트 코드를 먼저 작성하고, 실제 프로덕션 코드는 실패하는 테스트 코드의 구현을 위해 작성한다. 이후 리팩토링을 통해 코드를 완성시킨다. TDD는 디버깅 시간이 빠르고 오버 엔지니어링을 방지할 수 있으며 피드백이 빠르기 떄문에 개발 시간이 짧을 떄 유용하다.
BDD는 행동 주도 개발로 TDD에서 뻗어나온 개발 방법론이다. TDD에서처럼 테스트코드를 작성하는 대신에 코드 동작에 대한 명세를 먼저 작성하고 비즈니스 요구사항에 중심을 두고 개발한다.
DDD는 도메인 주도 개발로 복잡한 도메인을 해결하는데 우선 순위를 두고 개발하는 방법론이다. 유비쿼터스 언어를 통해 도메인 전문가, 모델링 전문가, 실제 구현 담당자 등의 전문가의 소통을 수월하게 하고 도메인의 개념, 통찰을 담은 잘 만들어진 모델을 통해 실제 기능 구현을 개발한다.

참고)
https://zdnet.co.kr/view/?no=00000039170216
https://www.youtube.com/@tech2889

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글