Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BDDについて調べてみた

 BDDについて調べてみた

2e0cd730106894978bab84142f69b6c3?s=128

Kushiro Taichi

August 27, 2021
Tweet

Transcript

  1. BDD について調べてみた

  2. BDD とは 振る舞い駆動開発(Behaviour Driven Development ) Dan North によって2006.9.20 に原文公開

    TDD を言い換えたもの TDD を実践する上でより振る舞いを意識する
  3. Dan North さん について BDD の発明者 JBehave の開発 The RSpec

    Book の共著者 プログラマが知るべき97 の こと "Code in the Language of the Domain" by Dan North
  4. Introducing BDD を読み解いていく BDD が生まれたきっかけ

  5. Dan North が感じた TDD の課題 どこから始めれば良いか 何をテストすれば良いか 何をテストする必要がないのか 何をテストする必要がないのか テストをなんと呼べばいいのか

    etc. TDD に深く入り込むほどに行き詰まりの連続
  6. テストメソッドは文章にせよ テストケースから自動でドキュメントを生成するagiledox ツールを 用いていた ドメインの言語でテストを書くことで、ドキュメントをビジネスユ ーザ、アナリスト、テスタが理解できる

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

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

    削除 振る舞いが正しくないテストの削除 ⇨ 品質は低下しない
  9. 「テスト」を「振る舞い」に言い換え る テストをなんと呼ぶべきか ⇨ 振る舞いを記述する どの単位でテストをしたら良いか ⇨ 1 つの文章で記述できる限度

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

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

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

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

  14. ストーリーの叙述 ストーリー ユースケース ストーリーの冒頭に記述する As a [ ロール] I want

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

  16. ストーリー:口座所持者が現金を引き出す。 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 開発にどう役立てるか
  17. ユースケースシナリオとの比較 概要と詳細 ロール・機能・価値のようなテンプレートを持つ? 価値についてPRD と紐づけられそう 主シナリオ・副シナリオ BDD におけるシナリオは主・副が同列の扱い 副シナリオの方がビジネス的インパクトが多い場合も Example

    の考え方 レビューのやり取りで説明の例を用いることが多い
  18. BDD と DDD

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

    は、 DDD を行うために必要な会話を構築する助けとなる
  20. 批判的な意見も ...?

  21. Greg Young の主張 BDD と共通言語

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

    テストと仕様を結びつけるため、まずは哲学として身につけておき たい
  23. 参考リンク BDD の導入 - Dan North ストーリーについて - Dan North

    BDD とDDD - Dan North BDD と共通言語 - Greg Young いまさら聞けないTDD/BDD 超入門 - IT media
  24. Next