TDD - Test-Driven Development vs BDD

코드 작성 전에 테스트를 먼저 작성하는 소프트웨어 개발 프로세스입니다.

 TDD - Test-Driven DevelopmentBDD
DefinitionTDD, 또는 Test-Driven Development는 테스트를 먼저 작성하고, 그 테스트를 통과할 수 있는 코드를 작성하는 소프트웨어 개발 프로세스입니다.BDD(Behavior Driven Development, 행동 주도 개발) 는 소프트웨어의 예상 동작을 자연어로 정의하고, 이를 기반으로 개발과 테스트를 진행하는 소프트웨어 개발 방법론입니다. 2003년 Dan North가 TDD(Test Driven Development)의 한계를 보완하기 위해 제안했습니다. BDD의 핵심은 비즈니스 요구사항을 모든 팀원이 이해할 수 있는 언어로 작성하는 것입니다. 개발자, Product Owner, QA, 비즈니스 분석가가 동일한 언어로 소통하여 오해를 줄이고, 사용자에게 진정한 가치를 전달하는 소프트웨어를 만듭니다.
CategoriesTDD, software developmentbdd, collaboration, dev, gherkin, it, software development, testing

TDD - Test-Driven Development란 무엇인가요?

코드 작성 전에 테스트를 먼저 작성하는 소프트웨어 개발 프로세스입니다.

📝

정의

TDD, 또는 Test-Driven Development는 테스트를 먼저 작성하고, 그 테스트를 통과할 수 있는 코드를 작성하는 소프트웨어 개발 프로세스입니다.

🔍

목적

이 방법은 소프트웨어 개발에서 결함을 줄이고 코드 품질을 개선하기 위해 설계되었습니다.

🔄

반복

TDD는 작성한 테스트에 통과할 때까지 코드를 개선하는 반복적인 과정을 포함합니다.

🎯

효과

이 방식을 통해 개발자는 더 깨끗하고 효율적인 코드를 작성할 수 있으며, 유지보수가 용이하고 확장성이 높은 소프트웨어를 만들 수 있습니다.

TDD - Test-Driven Development란 무엇인가요? →

BDD(행동 주도 개발)란 무엇인가요?

BDD는 Behavior Driven Development의 약어로, 사용자 행동 기반의 테스트와 개발 방법론입니다. Gherkin 문법과 실전 적용법을 알아보세요.

BDD(행동 주도 개발)란?

BDD(Behavior Driven Development, 행동 주도 개발) 는 소프트웨어의 예상 동작을 자연어로 정의하고, 이를 기반으로 개발과 테스트를 진행하는 소프트웨어 개발 방법론입니다. 2003년 Dan North가 TDD(Test Driven Development)의 한계를 보완하기 위해 제안했습니다.

BDD의 핵심은 비즈니스 요구사항을 모든 팀원이 이해할 수 있는 언어로 작성하는 것입니다. 개발자, Product Owner, QA, 비즈니스 분석가가 동일한 언어로 소통하여 오해를 줄이고, 사용자에게 진정한 가치를 전달하는 소프트웨어를 만듭니다.

BDD vs TDD

TDD (테스트 주도 개발)

TDD는 코드 수준에서 테스트를 먼저 작성하고, 테스트를 통과하는 코드를 구현합니다:

Red → Green → Refactor (테스트 실패 → 테스트 통과 → 리팩토링)

BDD (행동 주도 개발)

BDD는 TDD를 한 단계 높여, 비즈니스 행동 관점에서 테스트를 정의합니다:

시나리오 정의 → 자동화 테스트 → 구현 → 검증

주요 차이점

특성 TDD BDD
관점 개발자 중심 비즈니스/사용자 중심
언어 프로그래밍 언어 자연어 (Given-When-Then)
참여자 주로 개발자 개발자 + PO + QA
초점 코드 정확성 비즈니스 가치
범위 단위 테스트 인수 테스트

Gherkin 언어

Gherkin이란?

Gherkin은 BDD에서 사용하는 구조화된 자연어 문법입니다. 비기술적 이해관계자도 읽고 이해할 수 있으며, 동시에 자동화 테스트로 변환할 수 있습니다.

Given-When-Then 구조

BDD의 핵심 패턴은 Given(전제 조건) - When(행동) - Then(예상 결과) 입니다:

Feature: 카카오톡 메시지 전송 Scenario: 친구에게 텍스트 메시지 보내기 Given 사용자가 카카오톡에 로그인되어 있다 And 채팅 목록에 "홍길동" 친구가 있다 When 사용자가 "홍길동"과의 채팅방을 연다 And "안녕하세요"라는 메시지를 입력한다 And 전송 버튼을 누른다 Then 메시지가 성공적으로 전송된다 And 채팅 목록에서 "홍길동" 채팅방이 최상단으로 이동한다

Gherkin 키워드

키워드 의미 한국어
Feature 기능 기능
Scenario 시나리오 시나리오
Given 전제 조건 주어진 상황
When 행동/이벤트 ~할 때
Then 예상 결과 그러면
And 추가 조건 그리고
But 예외 조건 하지만
Background 공통 전제 배경
Scenario Outline 시나리오 템플릿 시나리오 개요
Examples 데이터 테이블 예시

Scenario Outline 활용

여러 데이터 셋으로 동일한 시나리오를 테스트할 때 사용합니다:

Feature: 네이버 쇼핑 상품 검색 Scenario Outline: 카테고리별 상품 검색 Given 사용자가 네이버 쇼핑 페이지에 있다 When "<카테고리>"를 선택한다 And "<검색어>"를 입력하여 검색한다 Then 검색 결과에 "<기대 결과>" 상품이 표시된다 And 결과 수가 <최소 수량>개 이상이다 Examples: | 카테고리 | 검색어 | 기대 결과 | 최소 수량 | | 전자기기 | 갤럭시 S24 | 삼성 갤럭시 | 10 | | 도서 | 클린 코드 | Clean Code | 5 | | 패션의류 | 겨울 코트 | 코트 | 20 |

BDD 도구

Cucumber

가장 널리 사용되는 BDD 프레임워크로, Gherkin 문법을 지원합니다:

  • Cucumber-JVM: Java 환경 (삼성, LG의 많은 팀에서 사용)
  • Cucumber-JS: JavaScript/TypeScript 환경
  • Cucumber-Ruby: Ruby 환경 (원조 구현체)

기타 BDD 프레임워크

  • SpecFlow: .NET 환경의 BDD 프레임워크
  • Behave: Python 환경의 BDD 프레임워크
  • Jest (describe/it): JavaScript의 BDD 스타일 테스트
  • RSpec: Ruby의 BDD 테스트 프레임워크
  • Jasmine: JavaScript BDD 프레임워크

JavaScript/TypeScript 예시

// Cucumber-JS Step Definitions import { Given, When, Then } from '@cucumber/cucumber'; Given('사용자가 로그인 페이지에 있다', async function() { await this.page.goto('/login'); }); When('이메일 {string}과 비밀번호 {string}을 입력한다', async function(email: string, password: string) { await this.page.fill('#email', email); await this.page.fill('#password', password); } ); Then('메인 페이지로 이동한다', async function() { await expect(this.page).toHaveURL('/dashboard'); });

3

BDD의 가지 실천 (Three Amigos)

Discovery (발견)

Three Amigos 세션에서 Product Owner, 개발자, QA가 함께 요구사항을 탐색합니다:

  • 사용자 스토리의 행동을 구체적 예시로 정의
  • 엣지 케이스와 예외 상황 발굴
  • 비즈니스 규칙 명확화

Formulation (공식화)

발견된 예시를 Gherkin 시나리오로 문서화합니다:

  • Given-When-Then 형식으로 구조화
  • 모든 참여자가 이해할 수 있는 언어 사용
  • 비즈니스 도메인 용어 통일

Automation (자동화)

시나리오를 자동화된 테스트로 변환합니다:

  • Step Definition 구현
  • CI/CD 파이프라인에 통합
  • 테스트 결과 리포팅

BDD의 장점

비즈니스 정렬

  • 비즈니스 요구사항과 테스트의 직접적 연결
  • 이해관계자가 테스트 시나리오를 이해하고 검증 가능
  • 요구사항 누락 감소

살아있는 문서 (Living Documentation)

  • Gherkin 시나리오가 항상 최신 상태의 요구사항 문서 역할
  • 코드와 문서가 동기화
  • 새 팀원의 온보딩 가속화

품질 향상

  • 개발 전 시나리오 정의로 결함 조기 발견
  • 인수 기준의 명확화
  • 회귀 테스트 자동화

팀 협업 강화

  • 공통 언어로 의사소통
  • 역할 간 사일로(Silo) 해소
  • 집단적 요구사항 이해

BDD 도입 시 주의사항

일반적인 실수

  1. 도구 중심 접근: BDD는 도구가 아닌 협업 방법론입니다. Cucumber를 설치하는 것만으로 BDD가 아닙니다.

  2. 개발자만의 BDD: 개발자만 시나리오를 작성하면 BDD의 핵심 가치인 협업이 실현되지 않습니다.

  3. 과도한 시나리오: 모든 기능을 BDD로 작성하려 하면 유지보수 비용이 급증합니다. 비즈니스 핵심 흐름에 집중하세요.

  4. UI 종속적 시나리오: "버튼을 클릭한다"보다 "주문을 확정한다"처럼 행동 중심으로 작성하세요.

한국 기업에서의 BDD 도입 현황

한국의 주요 IT 기업에서 BDD 도입이 확산되고 있습니다:

  • 네이버: 네이버 쇼핑, 네이버 페이 등의 핵심 결제 흐름에 BDD 적용
  • 카카오: 카카오톡 비즈니스 기능의 인수 테스트에 BDD 활용
  • 삼성 SDS: 엔터프라이즈 프로젝트의 요구사항 관리에 BDD 도입
  • 라인(LINE): 메시지 플랫폼의 국제화 테스트에 BDD 활용

BDD와 애자일

BDD는 애자일 방법론과 자연스럽게 결합됩니다:

자주 묻는 질문

BDD와 ATDD(Acceptance Test Driven Development)의 차이는 무엇인가요?

ATDD는 인수 테스트를 먼저 작성하는 개발 방법이고, BDD는 ATDD에 행동 중심의 언어와 협업 프로세스를 추가한 것입니다. BDD는 ATDD의 발전된 형태라고 볼 수 있습니다.

BDD를 소규모 팀에서도 적용할 수 있나요?

네. 오히려 소규모 팀에서 BDD의 효과가 더 빠르게 나타날 수 있습니다. 3명만 있어도(개발자, 기획자, QA) Three Amigos 세션을 진행할 수 있습니다.

모든 테스트를 BDD로 작성해야 하나요?

아닙니다. BDD는 비즈니스 핵심 흐름과 인수 기준에 집중하세요. 단위 테스트나 기술적 테스트는 일반적인 TDD 방식이 더 효율적일 수 있습니다.

Gherkin을 한국어로 작성해도 되나요?

네. Cucumber를 비롯한 주요 BDD 프레임워크는 한국어 키워드를 지원합니다. "주어진(Given)", "만일(When)", "그러면(Then)" 등의 한국어 키워드를 사용할 수 있습니다.

관련 용어

BDD(행동 주도 개발)란 무엇인가요? →