Slide 1

Slide 1 text

BDD について調べてみた

Slide 2

Slide 2 text

BDD とは 振る舞い駆動開発(Behaviour Driven Development ) Dan North によって2006.9.20 に原文公開 TDD を言い換えたもの TDD を実践する上でより振る舞いを意識する

Slide 3

Slide 3 text

Dan North さん について BDD の発明者 JBehave の開発 The RSpec Book の共著者 プログラマが知るべき97 の こと "Code in the Language of the Domain" by Dan North

Slide 4

Slide 4 text

Introducing BDD を読み解いていく BDD が生まれたきっかけ

Slide 5

Slide 5 text

Dan North が感じた TDD の課題 どこから始めれば良いか 何をテストすれば良いか 何をテストする必要がないのか 何をテストする必要がないのか テストをなんと呼べばいいのか etc. TDD に深く入り込むほどに行き詰まりの連続

Slide 6

Slide 6 text

テストメソッドは文章にせよ テストケースから自動でドキュメントを生成するagiledox ツールを 用いていた ドメインの言語でテストを書くことで、ドキュメントをビジネスユ ーザ、アナリスト、テスタが理解できる

Slide 7

Slide 7 text

should 構文の誕生 そのクラスが何かをするべきだという文章テンプレートを作成 文章が書きづらい場合、振る舞いが属するのは別の場所 あるクラスが2 つ以上のことをしている場合、他のクラスを導入す る指標となる モックの活用・DI に触れている

Slide 8

Slide 8 text

表現力のあるテスト名は失敗した時に 役に立つ 振る舞いが正しい ⇨ バグ 振る舞いが他の場所に移動した ⇨ 移動・変更 振る舞いが正しくない ⇨ 削除 振る舞いが正しくないテストの削除 ⇨ 品質は低下しない

Slide 9

Slide 9 text

「テスト」を「振る舞い」に言い換え る テストをなんと呼ぶべきか ⇨ 振る舞いを記述する どの単位でテストをしたら良いか ⇨ 1 つの文章で記述できる限度

Slide 10

Slide 10 text

ビジネス的価値について考える テストをどこから始めれば良いか ビジネス的価値に基づいた優先順位を決める

Slide 11

Slide 11 text

要件も振る舞いである 振る舞い駆動の考えを要件定義に適用し始めた ビジネス側の人との会話で曖昧さや誤解を取り除く 同時期にDDD が出版される

Slide 12

Slide 12 text

JBehave による BDD の普及 JUnit に変わるテストフレームワーク 振る舞い(ストーリー)ドキュメントがそのままテストケースにな るよう紐付ける

Slide 13

Slide 13 text

BDD におけるストーリーテンプレート

Slide 14

Slide 14 text

ストーリーの叙述 ストーリー ユースケース ストーリーの冒頭に記述する As a [ ロール] I want [ 機能] so that [ 価値] ≃

Slide 15

Slide 15 text

ストーリーのシナリオ ストーリーは複数のシナリオを持つ Given :最初の文脈(前提)があって、 When :イベントが発生した場合、 then :なんらかのアウトプットを保証する。 Examples: シナリオにおける値の例

Slide 16

Slide 16 text

ストーリー:口座所持者が現金を引き出す。 As a :口座所持者の立場で I want :ATM から現金を引き出したい So that :銀行が閉まっている時でも現金が得られるように シナリオ1:口座に十分な残高がある Given :口座残高が$100 で And :カードが有効であり And :機械に十分な現金が入っていれば When :口座所持者が$20 要求した場合に Then :ATM は$20 を支払い And :口座残高は$80 になり And :カードは返却されなければならない。 シナリオ2:口座に十分な残高がない Given :口座残高が$10 で And :カードが有効であり And :機械に十分な現金が入っていれば When :口座所持者が$20 要求した場合に Then :ATM は一切現金を支払わず And :ATM は残高が足りないと言い And :口座残高は$20 のまま And :カードは返却されなければならない。 BDD を Scalebase 開発にどう役立てるか

Slide 17

Slide 17 text

ユースケースシナリオとの比較 概要と詳細 ロール・機能・価値のようなテンプレートを持つ? 価値についてPRD と紐づけられそう 主シナリオ・副シナリオ BDD におけるシナリオは主・副が同列の扱い 副シナリオの方がビジネス的インパクトが多い場合も Example の考え方 レビューのやり取りで説明の例を用いることが多い

Slide 18

Slide 18 text

BDD と DDD

Slide 19

Slide 19 text

Dan North の主張 DDD とは、ステークホルダが用いているドメイン・モデルをどう調 査するかに関するもの BDD とは、ソフトウェアを作るためにユビキタス・ランゲージを用 いて行う会話に関するもの BDD は、 DDD を行うために必要な会話を構築する助けとなる

Slide 20

Slide 20 text

批判的な意見も ...?

Slide 21

Slide 21 text

Greg Young の主張 BDD と共通言語

Slide 22

Slide 22 text

その他個人的に考えたこと BDD はTDD における暗黙知を形式知として表現したもの ATDD (受け入れテスト駆動開発)はBDD におけるロールがシステ ムのユーザーの場合 ロールをクラスの利用者(実装者)とすればユニットテストにも 活用できそう テストと仕様を結びつけるため、まずは哲学として身につけておき たい

Slide 23

Slide 23 text

参考リンク BDD の導入 - Dan North ストーリーについて - Dan North BDD とDDD - Dan North BDD と共通言語 - Greg Young いまさら聞けないTDD/BDD 超入門 - IT media

Slide 24

Slide 24 text

Next