TDD, BDD, DDD 본문

백앤드 개발일지

TDD, BDD, DDD

giron 2021. 7. 4. 23:36
728x90

 

TDD(Test Driven Development): 테스트 주도 개발

  • 짧은 개발 서클을 반복하는 SW 개발 프로세스 중 하나이다. 
  • 자동화된 테스트 케이스를 먼저 작성한 후, 테스트 케이스를 통과하기 위한 최소한의 코드를 작성, 그 후 코드에 대한 리펙토링을 진행한다.
  • 즉, 테스트 코드 작성-> 테스트 코드를 성공시키기 위한 최소한의 코드 구현-> 코드 리팩토링

특징

  • 코드량이 많아지면 기능 별로 함수를 나누게 되는데 그 과정에서 테스트 코드가 중심을 잡아줄 수 있다.
  • 개발하다 에러가 나도 테스트를 함으로써 금방 복구가 가능하다.

BDD(Behavior-Driven Development): 행동 주도 개발

  • TDD에서 파생된 개념으로 BDD는 테스트 케이스 자체가 요구 사양이 되도록 개발하는 것이다.
  • TDD와 BDD는 구분하기 모호한데, TDD는 테스트 케이스를 만드는 것에 집중한다면
  • BDD는 비즈니스 요구사항에 집중을 한다.

DDD(Domian-Driven Development): 도메인 주도 개발

  • 순수한 도메인의 모델과 로직에 집중한 개발방식
  • 보편적인 언어의 사용을 추구하며 모든 사람이 이해할 수 있게 문서와 코드가 동일한 표현과 단어로 구성되게 만드는 것을 말한다.
  • 분석 작업과 설계 그리고 구현까지 통일된 방식으로 도메인 모델부터 코드에 이르는 단계가 통일된 규칙을 이룬다.

이러한 개발을 하다 보면 넓은 의미에서 크게 2가지 유형의 버그가 있다.

  1. 시스템 충돌을 일으키는 원인
  2. 잘못된 결과를 보여주는 것

TDD가 첫 번째 유형의 버그를 완화하고 방지하는데 도움이 되고,

BDD 및 DDD를 사용하면 후자를 방지할 수 있다.

 

  • TDD 예시

Test 예시이다. 원래 안 적으려고 했는데, 정말 바보 같은 삽질로 인해 혹시나 해서 적어둔다. 

노트북이 작아서 캡처에는 잘렸는데 Test를 위해선 Junit4에서는 테스트 러너(Runner)를 확장하는 방법 중 하나로 @RunWith 애노테이션에 커스텀 테스트 러너를 설정해주는 방법이 있다. 하지만 Junit5가 되면서 @ExtendWith를 SpringBootTest 어노테이션이 안에서 이미 갖고 있기 때문에 따로 추가할 필요가 없다.

아 그리고 https://mvnrepository.com/artifact/junit/junit/4.12 메이븐 레포지에서 Junit 라이브러리를 추가하면 더 좋다!

전구에 가려진 ExtendWith

 

Reference

 

The Value at the Intersection of TDD, DDD, and BDD

Software development is saturated with frameworks, methodologies, and processes; most of which come with the promise of better development…

medium.datadriveninvestor.com

 

테스트 주도 개발 TDD, BDD, DDD

테스트 주도 개발 TDD(Test Driven Development) 최근에는 빠르게 프로덕션을 하고 빨리 빨리 제품을 개발해서 그 과정에서 실패하면 버리고 바로 다음 프로덕션을 진행하는 시장 동향이다. 때문에 과거

ebbnflow.tistory.com

 

728x90

'백앤드 개발일지' 카테고리의 다른 글

Swagger2  (0) 2021.07.19
GitLab 버전 관리와 협업 하면서 막혔던 부분 기록 일지  (0) 2021.07.12
클린 코드란?  (0) 2021.06.29
CI와 CD 그리고 Jenkins? 어디서 들어는 봤는데...  (0) 2021.04.25
DTO? DAO?  (0) 2021.03.10
Comments