#book #wip ![image](https://gyazo.com/db70d19315603c7daa2a84fe980a5e21/thumb/1000) [https://leanpub.com/bddbooks-formulation-jp](https://leanpub.com/bddbooks-formulation-jp) # なぜこの本を読んだか 3部作の2作目 (1作目は [[The BDD Books - Discovery]]) なので読んだ # 何が書かれている本か [[The BDD Books - Discovery]] とは打って変わって? Gherkin記法 の具体的なシナリオについての話がメインとなっていた。 ただし最初にあったシナリオをちょっとずつステップごとに直していく形の展開は著者らしい感じになっている。 (特に 2章 の「古いシナリオを) 個人的には、JUnit などのテストコードについても Gherkin記法で書くことはやや可読性を犠牲にしているようには感じていて、ある程度の結合状態でのシナリオテストなどに使うなど用途についてはうまく設計する必要があると感じている。 例えば、Kotlin での例 [https://cucumber.io/docs/guides/10-minute-tutorial/?lang=kotlin](https://cucumber.io/docs/guides/10-minute-tutorial/?lang=kotlin) がしかしこの本でシナリオを直していく過程には、 BRIEF原則も含めて非常に意義があるし、 JUnit などで普段から書いているテストについて指針となる考え方を新たに手にいれることができると思う。 # メモ ![image](https://gyazo.com/4234245a4c5b4aa4f7637ae98fddc678/thumb/1000) > BDD は要件、ドキュメント、テストを結びつけることで、コラボレーションの側面を強調しているソフトウェア開発のアプローチです。 - 実例的なシナリオ (illustrative scenarios ) - > 単一のルールの説明に焦点を絞っているため、明確な具体例から作成されたシナリオは非常にきめ細かくなります。これらを実例的なシナリオ (illustrative scenarios ) と呼びます。 - ジャーニーシナリオ - > ただし、実例的なシナリオは、ビジネス上のプロセスがどのように機能するかについての幅広いエンドツーエンドの視点を提供しません。これを実現するためには、完全なユーザージャーニーを説明するより長いシナリオが必要です。これをジャーニーシナリオを呼びます。 Gherkin について - ブロック - Feature - Background - Rule - Scenario - Scenario Outline - Examples - ステップ - Given - When - Then - And - But 本書の3章以降については Gherkin記法についての説明が多く紹介されており公式なドキュメントを見るよりも意図などが掴みやすくなっているように感じる。(多すぎるのでここでの紹介は割愛) ## 実際に修正していくシナリオ BRIEF を適用してケースをリファクタリングしていくという話 - Business language (ビジネス言語) - Real data (実際のデータ) - Intention revealing (意図の明確化) - Essential (必須) - Focused (焦点を絞る) - Brief (簡潔にする) before txt ``` 1: Scenario: 注文テスト 2: Given 時刻は"11:00"です 3: Given お客様は"http://test.wimp.com/"にアクセスします 4: And 彼らは"SearchText"に"マルゲリータ"と入力します 5: When 彼らは"検索"を押します 6: Then "SearchResults"内に"マルゲリータ"が表示されるはずです 7: And 彼らは"サイズ"から"中"を選択します 8: When 彼らは"買い物カゴに追加"を押します 9: Then "BasketItemCount"の中に"1品"と表示されるべきです。 10: When 彼らは"チェックアウト"をクリックします 11: And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します 12: And 彼らは"PaymentOption"から"受け取り時の支払い"を選択します 13: And 彼らは"OrderName"に"Marvin"と入力します 14: And 彼らは"ContactPhoneNumber"に"12334456"と入力します 15: When 彼らは"注文を送信"を押します 16: Then "SuccessMessage"が表示されるはずです 17: Then "ErrorMessage"は表示されないはずです 18: And "SuccessMessage"内に"ご注文ありがとうございます! "と表示されるはずです 19: And "CollectionTime"内に"11:20"が表示されるはずです 20: And "TotalAmount"内に"$14"が表示されるはずです ``` 例えば、以下のようなことをしたシナリオを大きく変更しました - シナリオ名が適切ではないので ビジネス言語を使うようにしたり - ルールが複数含まれているので単一のルールに焦点を絞ったり - 意図を明確化するための言葉を利用するようにしたり - 重要ではない実際のデータを削除したり - 実際のデータを利用することは大事だがそれ以上に意図の明確化が重要でそれを阻害していないかを確認する after txt ``` 1: Scenario: お客様が受け取り時に支払うことを選択した 2: Given お客様は店頭受け取りでの注文を選択した 3: And 彼らは商品の店頭受け取りを選択しました 4: When 彼らは支払い指示に進みます 5: Then 彼らは受け取り時の支払いを選択できるはずです ``` 本には、全部で 6回に分けて修正をしていくステップを見ることができるので詳細は本書を参照してください # 感想 - Gherkin記法 自体は自分は考え方