【びへいびあくどうせっけい】

ビヘイビア駆動設計(BDD) とは?

💡 「Given-When-Then」で誰でも読めるテストを書こう
📌 このページのポイント
BDD: Given-When-Then 形式 Given 前提条件 〜の状態のとき When 操作・アクション 〜をしたら Then 期待する結果 〜になるべき 記述例(ECサイト) Given カートに商品が3つ入っている When 購入ボタンを押す Then 注文確認画面が表示される PO ビジネス Dev 開発者 QA テスト 共通言語 共通言語
BDDのGiven-When-Then形式のイメージ
ひよこ ひよこ

BDDって、すでにbddという用語があるけど何が違うの?

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

bdd(振る舞い駆動開発)は開発プロセス全体の考え方で、ビヘイビア駆動設計は特にGiven-When-Then形式の仕様記述と設計にフォーカスしたものだよ。実務ではほぼ同じ文脈で使われることも多いんだ

ひよこ ひよこ

Given-When-Thenって具体的にどう書くの?

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

たとえばECサイトなら「Given: カートに商品が3つ入っている、When: 購入ボタンを押す、Then: 注文確認画面が表示される」という感じだよ。日本語でも英語でも書けるんだ

ひよこ ひよこ

この文章がそのままテストになるの?

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

そう、Cucumberなどのツールを使うと、Given-When-Thenの各行にプログラムコードを紐付けられるんだよ。仕様書がそのままテストコードになるから、ドキュメントとテストが乖離しないんだ

ひよこ ひよこ

TDDとの違いがまだよく分からないんだけど…

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

TDDは開発者が技術的なテストコードを先に書くけど、BDDはビジネス要件を自然言語で先に書くんだよ。つまりBDDのほうが非エンジニアも参加できるんだ。プロダクトオーナーと開発者が同じ仕様書を見て会話できるのが強みだね

ひよこ ひよこ

実際の現場では全部の機能にBDDを使うの?

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

すべてに使うと記述量が膨大になるから、ビジネスロジックが複雑な部分や認識のズレが起きやすい部分に絞って使うのが現実的だよ。UIの細かい挙動まで全部BDDで書くと保守コストが高くなりすぎるんだ。メリハリが大事だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
BDD」って出てきたら「自然言語で書いた仕様がそのままテストになる開発手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Behavior-Driven Design / Development」 = 振る舞い駆動設計 / 開発
💬 ダン・ノースが2003年頃に提唱した手法で、TDDの「テスト」という言葉が開発者以外に馴染みにくい問題を解決するために「振る舞い(Behavior)」という表現を採用したんだよ
← 用語集にもどる