【びへいびあくどうかいはつ】

BDD(ビヘイビア駆動開発) とは?

💡 「ユーザー目線のシナリオ」がそのままテストになる開発手法
📌 このページのポイント
BDD(振る舞い駆動開発)の流れ Given(前提) ユーザーがログイン済み When(操作) 商品をカートに入れる Then(結果) カートに商品が表示される 自動テスト化 describe("カート機能", () => {'{'} it("商品をカートに追加できる", () => {'{'} given(ログイン済み).when(カート追加).then(表示確認) {'}'}); テスト成功 テスト失敗 → 修正 ビジネス要件をGiven-When-Then形式で記述し、そのまま自動テストとして実行する。
BDDの流れ
ひよこ ひよこ

TDDと何が違うの?

ペンギン先生 ペンギン先生

TDDは「関数にこの入力を渡したらこの出力が返る」というコードレベルのテストを先に書く。BDDは「ユーザーがログインボタンを押したらダッシュボードが表示される」というユーザー目線のシナリオを先に書く。視点の高さが違うんだ。

ひよこ ひよこ

Given・When・Thenって何?

ペンギン先生 ペンギン先生

BDDのシナリオを書くフォーマット。Given(〇〇という状態で)、When(△△をしたら)、Then(□□になる)の3行で1つの振る舞いを表現する。例えば「Given: ログイン済みのユーザーが、When: カートに商品を追加したら、Then: カートの個数が1増える」みたいに書く。

ひよこ ひよこ

おもしろい!自然言語で書けるって、プログラマじゃなくても書けるの?

ペンギン先生 ペンギン先生

そこがBDDの狙い。企画担当やビジネス側の人がシナリオを書いて、エンジニアがそれを実行可能なテストコードに落とし込む。Cucumberなどのツールは「日本語のシナリオ」をそのままテストとして実行できる仕組みを持っている。

ひよこ ひよこ

じゃあBDDを使えばバグはゼロになる?

ペンギン先生 ペンギン先生

ゼロにはならない。BDDが防げるのは「仕様の認識違い」によるバグ。書かれたシナリオ以外のケースや、パフォーマンスの問題までは防げない。ただ「そもそも何を作るべきか」のズレが減るだけで手戻りは大幅に減る。

ひよこ ひよこ

BDDのテストが大量になると管理が大変そうだけど…

ペンギン先生 ペンギン先生

実際そこは課題。シナリオが増えると実行時間も長くなるし、仕様変更のたびにシナリオの書き直しが発生する。だから現場ではBDDは重要なユースケースに絞って使い、細かいロジックの検証はユニットテストに任せる「テストピラミッド」の考え方と組み合わせることが多いよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
BDDって出てきたら「ユーザーの振る舞いを自然言語風に書いてテストする開発手法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Behavior-Driven Development」 = 振る舞いに駆動(先導)される開発
💬 Dan Northが2006年頃に提唱。TDDの「テスト」という言葉が誤解を招きやすいことから、「振る舞い(Behavior)」に焦点を当てた表現に改めた
← 用語集にもどる