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

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)」に焦点を当てた表現に改めた
← 用語集にもどる