[BDD] Behavior Driven Development

y001·2025년 1월 19일
post-thumbnail

1. BDD (Behavior Driven Development)

BDD(Behavior Driven Development)는 TDD(Test Driven Development)에서 발전된 개발 방식으로, 기술적인 단위 테스트 대신 사용자 행동과 비즈니스 로직 중심의 테스트에 초점을 맞춥니다.

BDD는 테스트 케이스(TC) 자체에 집중하여, 개발자뿐만 아니라 비기술적인 이해관계자도 이해할 수 있는 시나리오 기반 테스트를 작성합니다. 이를 통해 요구사항을 명확히 하고, 팀 간 협업을 강화하는 것이 BDD의 핵심 목표입니다.


2. BDD의 핵심 문법: Given/When/Then

BDD에서는 Given/When/Then 문법을 사용하여 시나리오를 정의합니다. 이 문법은 테스트를 구조화하고, 명확하게 표현하는 데 유용합니다.

Given (준비):

  • 시나리오 진행에 필요한 모든 준비 과정(객체, 값, 상태 등).
  • 예: "주차장이 초기화되고, 차량 ABC-1234가 등록됨."

When (행동):

  • 시나리오의 주요 행동(사용자가 수행하는 동작).
  • 예: "차량이 주차됨."

Then (결과):

  • 행동이 완료된 후의 결과를 명시하고 검증.
  • 예: "주차 티켓이 정상적으로 발급됨."

3. TDD와 BDD 비교

TDD (Test Driven Development)

  • 정의: 코드 구현 전에 테스트를 먼저 작성하고 이를 기반으로 코드를 개발하는 방식.
  • 초점: 함수나 메서드와 같은 코드 단위 테스트.
  • 목적: 기술적 정확성을 검증하고, 코드 품질과 안정성을 높이는 데 중점.

BDD (Behavior Driven Development)

  • 정의: 사용자 행동과 비즈니스 요구사항을 중심으로 테스트를 작성하는 방식.
  • 초점: 사용자 관점에서의 행동 시나리오 및 요구사항 충족 여부.
  • 목적: 요구사항의 가시성과 협업을 강화하여, 비기술적인 이해관계자도 참여할 수 있는 테스트 작성.

TDD와 BDD의 비교

항목TDDBDD
초점코드와 구현 중심사용자 행동과 비즈니스 로직 중심
단위함수 및 메서드 테스트시나리오와 기능 테스트
언어기술적 언어(Java, Kotlin 등)비기술적 언어(Gherkin 등)
의사소통기술적인 검증비기술자와의 협업 가능
결과물코드의 기술적 정확성 검증요구사항 충족 및 시스템 의도 확인

4. BDD 실습 - 주차장에서 차량 주차 및 티켓 발급

  • 사용자가 주차 시스템에서 차량을 등록한 후, 주차 티켓을 정상적으로 발급받음.
@Test
@DisplayName("차량이 정상적으로 주차되고 티켓이 발급된다")
void parkVehicleAndIssueTicket() {
    // Given
    ParkingLotSystem parkingLotSystem = new ParkingLotSystem();
    Vehicle vehicle = new Vehicle("XYZ-5678");

    // When
    ParkingTicket ticket = parkingLotSystem.issueTicket(vehicle);

    // Then
    assertThat(ticket).isNotNull(); // 티켓이 정상적으로 발급되었는지 확인
    assertThat(ticket.getLicensePlate()).isEqualTo("XYZ-5678"); // 차량 번호 검증
}

📌 이 글은 TDD 강의를 학습한 내용을 바탕으로 재구성하였습니다. 문제가 되는 부분이 있다면 수정하겠습니다.

0개의 댓글