TDD 와 BDD.
TDD 와 BDD.
TDD와 BDD의 차이점
TDD (Test-Driven Development)
TDD는 테스트 코드를 먼저 작성하고, 그 테스트를 통과하는 실제 코드를 작성하는 개발 방법.
TDD의 철학
- 테스트를 실패하게 한다.
- 테스트를 통과할 최소한의 코드를 작성한다.
- 코드를 개선(리팩토링)한다.
이 과정을 반복하면서 코드의 품질을 높이고, 유지보수를 용이하게 함.
TDD의 핵심 원칙
- 테스트 우선: 코드 작성 전에 테스트를 먼저 작성.
- 작은 단계로 진행: 한 번에 하나의 기능만 테스트.
- 리팩토링: 테스트를 통과한 후 코드를 정리하고 개선.
BDD (Behavior-Driven Development)
BDD는 TDD에서 발전된 방식으로, 사용자 행동(Behavior)에 초점을 맞춘 테스트 주도 개발 방법론.
BDD의 특징
- 테스트와 요구사항을 연결하여 개발을 선 진행.
- 비즈니스 요구를 코드로 전환하는 과정.
- 개발팀, 비즈니스 팀, QA 팀 간의 소통을 강화할 수 있다.
Gherkin 언어 활용 시나리오
BDD에서는 Gherkin 언어를 사용하여 시나리오를 정의함.
- Feature: 기능의 큰 주제 또는 목표
- Scenario: 특정 상황에서 시스템의 동작 정의
- Given: 초기 상태 설명
- When: 행동이나 이벤트 설명
- Then: 기대 결과 설명
- And: 확장하거나 추가적인 조건, 동작, 결과
- But: 부정적인 경우, 예외 상황
📌 시나리오 예시
Feature: 로그인 기능
사용자는 자신의 계정으로 로그인하여 대시보드에 접근할 수 있어야 한다.
Scenario: 유효한 계정으로 로그인 성공
1
2
3
4
5
Given 사용자가 로그인 페이지에 있다
And 사용자에게 유효한 계정이 있다
When 사용자가 올바른 아이디와 비밀번호를 입력한다
Then 사용자는 대시보드로 이동한다
And 환영 메시지를 볼 수 있다
Scenario: 잘못된 비밀번호로 로그인 실패
1
2
3
4
5
Given 사용자가 로그인 페이지에 있다
And 사용자에게 유효한 계정이 있다
When 사용자가 올바른 아이디와 잘못된 비밀번호를 입력한다
Then 잘못된 비밀번호라는 에러 메시지가 표시된다
And 사용자는 로그인 페이지를 수정할 수 있다
Scenario: 계정이 없는 사용자 로그인 시도
1
2
3
4
5
Given 사용자가 로그인 페이지에 있다
When 사용자가 존재하지 않는 아이디를 입력한다
And 임의의 비밀번호를 입력한다
Then "계정이 존재하지 않습니다"라는 에러 메시지가 표시된다
And 회원가입 버튼이 표시된다
📊 TDD와 BDD의 차이점
| 구분 | TDD | BDD |
|---|---|---|
| 초점 | 기술적 요구사항 | 사용자 행동 및 비즈니스 요구 |
| 목적 | 코드가 요구사항을 정확히 만족하도록 보장 | 비즈니스 요구사항과 사용자 행동의 일치 보장 |
| 출발점 | 테스트 케이스 작성 | 사용자 시나리오 작성 (Gherkin 언어 활용) |
| 참여자 | 주로 개발 팀 | 개발자, 비즈니스 팀, QA 팀 간의 협업 |
| 사용 언어 | 프로그래밍 언어로 테스트 코드 작성 | 자연어 기반 (Given, When, Then) |
| 강점 | 코드 품질 향상 및 리팩토링 용이 | 팀 간 협업 강화 및 명확한 요구사항 전달 |
| 적용 대상 | 기술적 구현 및 내부 로직 | 비즈니스 요구사항과 사용자 중심 기능 |
결론
TDD와 BDD는 테스트 주도 개발 방식이지만, TDD는 기술적인 요구사항에 집중하고, BDD는 사용자 행동과 비즈니스 요구사항에 집중한다.
✅ 개발팀 내부의 코드 품질을 향상시키려면 TDD를,
✅ 팀 간 협업을 강화하고 사용자 중심의 기능을 개발하려면 BDD를 활용하는 것이 좋음! 🚀
*번외
### ATDD (Acceptance Test-Driven Development, 인수 테스트 주도 개발)
- 비즈니스 요구사항을 먼저 테스트 코드로 정의하고 개발하는 방식
- 실 사용자가 원하는 반응 및 결과가 나오는지를 기준으로 테스트 진행
This post is licensed under CC BY 4.0 by the author.
