TDD & BDD

U_Uracil·2024년 1월 17일
1

CS

목록 보기
4/9

TDD (Test Driven Development)


  • 소프트웨어 개발 방법론 중 하나
  • 선 텍스트 후 개발
  • 테스트 작성 → 코드 작성 → 중복 코드 제거, 일반화 등의 리팩토링의 3가지 과정을 반복함

TDD의 두 가지 규칙

  1. 어떤 코드건 작성 전에 실패하는 자동화된 테스트를 작성하라.
  2. 중복을 제거하라.

TDD 사이클


  1. 테스트 케이스 작성 : 요구 사항에 따라 자동화 된 테스트 사례 작성
  2. 모든 테스트 케이스 실행 : 현재 개발된 코드에서 자동화 된 테스트 케이스 실행
  3. 해당 테스트 케이스에 대한 코드 개발 : 테스트 케이스가 실패하면 예상대로 작동하도록 코드 작성
  4. 테스트 케이스 재실행 : 테스트 케이스 재실행 후 개발된 모든 테스트 케이스 구현되었는지 확인
  5. 코드 리팩토링 : 중복 코드 제거, 일반화 등의 리팩토링 진행
  6. 1 ~ 5단계 반복 : 모든 테스트 케이스가 구현될 때까지

TDD 장점


객체 지향적인 코드 개발

  • 코드의 재사용 보장을 명시하므로 기능별로 모듈화
  • 의존성 및 종속성이 낮은 모듈로 이루어진 소프트웨어 개발 가능

설계 수정 시간 단축

  • 개발 전 테스트 코드를 작성하므로 설계 수정 빈도가 낮음
  • 소프트웨어의 구조와 기능 정의를 명확하게 하므로 구조적 문제를 찾기 쉬움

유지보수(리팩토링)의 용이성

  • 문제가 발생했을 때 각각의 모듈별로 테스트 진행하기 쉬움
  • 모듈의 역할이 단순하고 명확하므로 유지보수가 쉬워짐

테스트 문서 대체 가능

  • 테스트 코드 작성 당시 어떤 의도를 가지고 작성했는지, 어떤 결과값을 기대하는지 기술하기 때문에 코드 작성자의 의도를 파악하기 쉬움
  • 테스트 자동화로 인해 정확한 테스트 근거 산출 가능

TDD 단점


단기적 생산성 저하

  • 테스트 코드를 작성하는데 시간이 소요됨
  • TDD에 익숙하지 않은 경우 프로젝트에 적용하기 어려움

100% 안정성을 보장하지 않음

  • TDD는 어디까지나 개발자가 설계한 예상 가능한 예측값과 환경을 기반으로 함
  • 설계한 요소 외에 대한 부분은 리스크를 가질 수 밖에 없음


BDD (Behavior Driven Development)


  • TDD를 근간으로 파생된 개발 방법론
  • 개발자와 비개발자간의 협업 과정을 녹여낸 방법
  • 비즈니스 요구사항에 집중하여 테스트 케이스를 개발하는 방식
  • 테스트 케이스 == 요구사항

BDD 기본 패턴


BDD는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않고 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있는 정도의 레벨을 권장함

  • Feature : 테스트에 대상의 기능/책임을 명시
  • Scenario : 테스트 목적에 대한 상황을 설명
  • Given : 시나리오 진행에 필요한 값을 설정
  • When : 시나리오를 진행하는데 필요한 조건을 명시
  • Then : 시나리오를 완료했을 때 보장해야 하는 결과 명시

TDD와 BDD의 차이

1. 테스트 범위

  • BDD는 TDD 관점에서 보기 어려운 유저 시나리오의 흐름을 확인할 수 있음
  • TDD는 모듈의 동작을 테스트, BDD는 시나리오 주체의 행위를 테스트함
  • BDD의 시나리오 검증 + TDD의 모듈 검증이 필요

2. 기획 수정 시점

  • TDD의 경우

  • BDD의 경우

  • TDD는 기획 누락을 발견하는 시점이 코드 작성 당시일 가능성이 높음
  • BDD는 기획서에 기반하여 테스트 코드를 작성하므로 코드 작성 이전에 기획 누락을 발견할 가능성이 더 높음

차이점 요약

References
https://mingule.tistory.com/43
https://www.devkuma.com/docs/testing/bdd/
https://blog.naver.com/rkdudwl/221973507455
https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=236213
https://thenicesj.tistory.com/143
https://yorr.tistory.com/26
https://velog.io/@sinclebear/TDD-BDD-DDD란
https://cocoder16.tistory.com/77
https://www.incodom.kr/테스트주도개발#h_57f01ec46a19594ba032b174c50596ed

profile
기억은 유한, 기록은 무한

0개의 댓글

관련 채용 정보