BDD(振る舞い駆動開発) びーでぃーでぃー
BDD振る舞い駆動開発GherkinCucumberシナリオテストGiven-When-Then
BDDとTDDって何が違うの?
BDD(振る舞い駆動開発)とは
BDD(Behaviour-Driven Development:振る舞い駆動開発) とは、ソフトウェアのビジネス上の振る舞いをシナリオとして記述し、それを実行可能なテストとして扱う開発手法です。
2006年にDan Northが提唱し、TDDを発展させた概念です。エンジニア・QA・ビジネス担当者が共通の言語(ユビキタス言語)でシナリオを記述し、システムへの共通理解を深めることが目的です。
Given-When-Thenの構文
BDDシナリオはGiven-When-Thenの形式で記述します。
Feature: ユーザーログイン
Scenario: 正しい認証情報でログインできる
Given ユーザーが登録済みであること
When ユーザーがメールアドレス "user@example.com" とパスワードを入力する
Then マイページにリダイレクトされること
And "ようこそ" メッセージが表示されること
Scenario: 誤ったパスワードでログインに失敗する
Given ユーザーが登録済みであること
When ユーザーが誤ったパスワードを入力する
Then エラーメッセージ "パスワードが正しくありません" が表示されること
主なBDDフレームワーク
| フレームワーク | 言語 | 特徴 |
|---|---|---|
| Cucumber | Java/Ruby/JS等 | 最も普及したGherkinベースのBDDツール |
| RSpec | Ruby | RubyのデファクトBDDテストフレームワーク |
| Behave | Python | PythonのGherkinベースBDDツール |
| Playwright + BDD | JS/TS | E2EテストとBDDを組み合わせ |
TDDとの違い
| 観点 | TDD | BDD |
|---|---|---|
| フォーカス | 実装の正しさ | ビジネスの振る舞い |
| 記述言語 | コード | 自然言語(Gherkin等) |
| 参加者 | エンジニア | エンジニア + ビジネス + QA |
| 粒度 | ユニット単位 | フィーチャー・シナリオ単位 |
歴史と背景
- 2006年:Dan NorthがBDDを提唱、TDDの課題(テスト名の曖昧さ等)を解決
- 2008年:Cucumberがリリースされ普及が加速
- 現在:アジャイル開発での受け入れテスト(ATDD)と統合されることが多い
関連用語
- TDD(テスト駆動開発) — BDDの前身となる開発手法
- E2Eテスト — BDDシナリオをE2Eで実行するケースが多い
- ユーザーストーリー — BDDシナリオの元になる要件
- 受け入れテスト — BDDは受け入れテストの記述にも使われる
- ドメイン駆動設計 — ユビキタス言語の共有という目的を共有