テスト手法

BDD(振る舞い駆動開発) びーでぃーでぃー

BDD振る舞い駆動開発GherkinCucumberシナリオテストGiven-When-Then
BDDとTDDって何が違うの?

簡単に言うとこんな感じ!

TDDは「コードが正しく動くか」をテストで確認するけど、BDDは「ビジネスの要件通りに振る舞うか」をシナリオで記述するんだ!「ユーザーがログインしたら、マイページが表示される」という自然言語に近い形でテストを書くから、非エンジニアのステークホルダーとも共有しやすいよ。


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フレームワーク

フレームワーク言語特徴
CucumberJava/Ruby/JS等最も普及したGherkinベースのBDDツール
RSpecRubyRubyのデファクトBDDテストフレームワーク
BehavePythonPythonのGherkinベースBDDツール
Playwright + BDDJS/TSE2EテストとBDDを組み合わせ

TDDとの違い

観点TDDBDD
フォーカス実装の正しさビジネスの振る舞い
記述言語コード自然言語(Gherkin等)
参加者エンジニアエンジニア + ビジネス + QA
粒度ユニット単位フィーチャー・シナリオ単位

歴史と背景

  • 2006年:Dan NorthがBDDを提唱、TDDの課題(テスト名の曖昧さ等)を解決
  • 2008年:Cucumberがリリースされ普及が加速
  • 現在アジャイル開発での受け入れテスト(ATDD)と統合されることが多い

関連用語