Slide 1

Slide 1 text

振る舞い駆動開発(BDD) における、 テスト自動化の前に 大切にしていること ブロッコリー (@nihonbuson)

Slide 2

Slide 2 text

振る舞い駆動開発(BDD) における、 テスト自動化の前に 大切にしていること ブロッコリー (@nihonbuson)

Slide 3

Slide 3 text

自己紹介 ● 風間裕也(ブロッコリー) ● 株式会社10X 品質管理チーム ● 副業…B-Testing(個人事業主)として ○ 株式会社MonotaRO(テストコンサルタント) ○ グロース・アーキテクチャ&チームス株式会社 ○ 他数社でお手伝い ● 社外活動 ○ JaSST Review実行委員長 ■ ソフトウェアレビューシンポジウム ○ WACATE実行委員長 ■ ソフトウェアテストの 合宿型ワークショップ形式勉強会 ○ Developers Summit 2025 コンテンツ委員 SNS上の アイコン

Slide 4

Slide 4 text

翻訳書籍

Slide 5

Slide 5 text

連載記事 連載第1回:https://sqripts.com/2023/07/03/54058/

Slide 6

Slide 6 text

連載記事

Slide 7

Slide 7 text

アジェンダ ● BDDとは何か ● Discovery(発見) ● Formulation(定式化)

Slide 8

Slide 8 text

BDDとは何か

Slide 9

Slide 9 text

BDDとは何か ● 振る舞い駆動開発 (Behaviour-Driven Development, BDD) ● Dan Northが提唱した考え方 ○ 原典:Introducing BDD ○ 日本語訳:BDDの導入 - Dan North ● 記述方法としてGherkinを用いられることが多い ○ 次ページで説明 ● CucumberコミュニティがBDDに関する 一連のドキュメントを管理している

Slide 10

Slide 10 text

Gherkinとは何か Given/When/Thenなどのキーワードを用いて、 実行可能な仕様を自然言語で表現する手法 Feature: 自動販売機 Scenario: 飲み物を買うと、飲み物代を引いた金額のお釣りが出る Given 自動販売機がある When 550 円を入れる And 120 円の "コーラ" を選択する Then "コーラ" が出てくる And 430 円が出てくる

Slide 11

Slide 11 text

BDDとは何か  BDDはTDDの一流派ともいえますが、TDDに対し以下の 実現のための原則や工夫が加えられています。 ● テストを「振る舞い」(機能的な外部仕様)の記述に 特化させる ● ユーザーの要求やアーキテクチャの設計仕様といっ た、より上位のインプットとTDDのテストにつながり を持たせる 引用:テスト駆動開発/振る舞い駆動開発を始めるための基礎知識

Slide 12

Slide 12 text

BDDとは何か https://cucumber.io/docs/bdd/ に記載の図を発表者が日本語に翻訳 Cucumber 公式ドキュメント

Slide 13

Slide 13 text

BDDを構成する3つの要素

Slide 14

Slide 14 text

BDDで重要なのは「協調」 私はビジネスチームが参加しない形の「BDD」を 実施しているチームをたくさん見てきました。 私たちはそれらを「開発者専用」または「テスター専用」 のBDDとして寛大な形で説明しましたが、 個人としては基本的には それらはBDDにまったく従っていないと考えています。 (中略) BDDは協調に関するものです。BDDツールを使用したり、 Given/When/Thenを使用してテストを自動化しても、 開発アプローチは少しもBDDにはなりません。

Slide 15

Slide 15 text

Discovery(発見)

Slide 16

Slide 16 text

Discovery(発見)とは何か これは、明確な具体例の使用による 構造化された協調作業です。 これにより、従来のソフトウェアプロジェクトで 躓いてきたあいまいさや誤解を明らかにできます。

Slide 17

Slide 17 text

Three Amigosを用いた協調作業 3つの立場の人が集まり協調的に要件を確認する People vector created by stories - www.freepik.com QA(Tester) 開発者 PO

Slide 18

Slide 18 text

明確な具体例と協調作業についての動画 (省略)

Slide 19

Slide 19 text

今回紹介した動画について ● 今回の紹介した動画は、 Cucumber School(e-learningサイト)から紹介 ● Cucumber Schoolの冒頭部分の動画は YouTube上に公開済み ○ https://youtu.be/PR7WIS8JYyY ○ 動画時間は8分弱 ○ 英語の動画だが、 自動生成による日本語字幕を選択可能 ○ 6年前の動画なので、 現在のCucumber Schoolとは内容が一部異なる Cucumber School

Slide 20

Slide 20 text

実例マッピング ● Matt Wynneが考案 ● ユーザーストーリーが どのようなルールの元に 成り立つか炙り出す方法 ○ Unknown unknownsを Known unknownsにする ● 詳しくはこちら ○ 記事の日本語訳 ○ 日本語の解説スライド ○ 『The BDD Books - Discovery』 Cucumber.io ブログ

Slide 21

Slide 21 text

ラムズフェルド行列 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端 Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns (知らないことを分かっている) どのような内容なのか分かっていないが、 「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。

Slide 22

Slide 22 text

発見を通じて明らかにしていること Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns (知らないことを分かっている) どのような内容なのか分かっていないが、 「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端 疑 問 点   具体例

Slide 23

Slide 23 text

最初は「発見」から入る 多くの開発チームは、テスト自動化を改善したい という願望からBDDにやって来ます。 テスト自動化の改善は、BDDのアプローチに従うことの 重要な成果の1つですが、それは下流の成果です。 発見、定式化、自動化の順でプラクティスを 採用しない限り、期待されるメリットは得られません。 (中略) チームをまたいだ協調作業が得意になるまでは、 自動化ツールに焦点を合わせないほうが良いでしょう。

Slide 24

Slide 24 text

Formulation(定式化)

Slide 25

Slide 25 text

Formulation(定式化)とは何か これは、発見のプラクティスで作成した 明確な具体例を、ビジネスチームのメンバーが 読みやすいシナリオに変える創造的なプロセスです。 その後に行うシナリオのレビューにより、 ビジネスが求めているものを チームが本当に理解しているという確信を得ます。

Slide 26

Slide 26 text

BRIEFの原則 ● Gherkin記法などで書かれたテストシナリオを 保守性の高い状態で記述するために役立つ原則 ○ Business language(ビジネス言語) ○ Real data(実際のデータ) ○ Intention revealing(意図を明らかにする) ○ Essential(必須) ○ Focused(焦点を絞る) ○ Brief(簡潔である) ● 詳しくはこちら ○ 記事の日本語訳 Cucumber.io ブログ

Slide 27

Slide 27 text

BRIEFの原則を用いた改善例 Scenario: 注文テスト Given 時刻は"11:00"です Given お客様は"http://test.wimp.com/"にアクセスします And 彼らは"SearchText"に"マルゲリータ"と入力します When 彼らは"検索"を押します Then "SearchResults"内に"マルゲリータ"が表示されるはずです And 彼らは"サイズ"から"中"を選択します When 彼らは"買い物カゴに追加"を押します Then "BasketItemCount"の中に"1品"と表示されるべきです。 When 彼らは"チェックアウト"をクリックします And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します And 彼らは"PaymentOption"から"受け取り時の支払い"を選択します And 彼らは"OrderName"に"Marvin"と入力します And 彼らは"ContactPhoneNumber"に"12334456"と入力します When 彼らは"注文を送信"を押します Then "SuccessMessage"が表示されるはずです Then "ErrorMessage"は表示されないはずです And "SuccessMessage"内に"ご注文ありがとうございます! "と表示されるはずです And "CollectionTime"内に"11:20"が表示されるはずです And "TotalAmount"内に"$14"が表示されるはずです 題材: 宅配ピザの 注文サイト

Slide 28

Slide 28 text

BRIEFの原則を用いた改善例 Scenario: 注文テスト Given 時刻は"11:00"です Given お客様は"http://test.wimp.com/"にアクセスします And 彼らは"SearchText"に"マルゲリータ"と入力します When 彼らは"検索"を押します Then "SearchResults"内に"マルゲリータ"が表示されるはずです And 彼らは"サイズ"から"中"を選択します When 彼らは"買い物カゴに追加"を押します Then "BasketItemCount"の中に"1品"と表示されるべきです。 When 彼らは"チェックアウト"をクリックします And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します And 彼らは"PaymentOption"から"受け取り時の支払い"を選択します And 彼らは"OrderName"に"Marvin"と入力します And 彼らは"ContactPhoneNumber"に"12334456"と入力します When 彼らは"注文を送信"を押します Then "SuccessMessage"が表示されるはずです Then "ErrorMessage"は表示されないはずです And "SuccessMessage"内に"ご注文ありがとうございます! "と表示されるはずです And "CollectionTime"内に"11:20"が表示されるはずです And "TotalAmount"内に"$14"が表示されるはずです Scenario: 注文テスト Scenario: 未認証のお客様が受け取り時に支払うことを選択できる ビジネス言語 (Business language) 意図の明確化 (Intention revealing) 焦点を絞る (Focused)

Slide 29

Slide 29 text

BRIEFの原則を用いた改善例 Scenario: 未認証のお客様が受け取り時に支払うことを選択できる Given 時刻は"11:00"です Given お客様は"http://test.wimp.com/"にアクセスします And 彼らは"SearchText"に"マルゲリータ"と入力します When 彼らは"検索"を押します Then "SearchResults"内に"マルゲリータ"が表示されるはずです And 彼らは"サイズ"から"中"を選択します When 彼らは"買い物カゴに追加"を押します Then "BasketItemCount"の中に"1品"と表示されるべきです。 When 彼らは"チェックアウト"をクリックします And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します Then 彼らは"PaymentOption"から"受け取り時の支払い"を選択しますできるはずです And 彼らは"OrderName"に"Marvin"と入力します And 彼らは"ContactPhoneNumber"に"12334456"と入力します When 彼らは"注文を送信"を押します Then "SuccessMessage"が表示されるはずです Then "ErrorMessage"は表示されないはずです And "SuccessMessage"内に"ご注文ありがとうございます! "と表示されるはずです And "CollectionTime"内に"11:20"が表示されるはずです And "TotalAmount"内に"$14"が表示されるはずです ビジネス言語 (Business language) 意図の明確化 (Intention revealing) 焦点を絞る (Focused)

Slide 30

Slide 30 text

BRIEFの原則を用いた改善例 Scenario: 未認証のお客様が受け取り時に支払うことを選択できる Given 時刻は"11:00"です Given お客様は"http://test.wimp.com/"にアクセスします And 彼らは"SearchText"に"マルゲリータ"と入力します When 彼らは"検索"を押します Then "SearchResults"内に"マルゲリータ"が表示されるはずです And 彼らは"サイズ"から"中"を選択します When 彼らは"買い物カゴに追加"を押します Then "BasketItemCount"の中に"1品"と表示されるべきです。 Given お客様は"BasketItemCount"の中に"1品"持っています When 彼らは"チェックアウト"をクリックします And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します Then 彼らは"PaymentOption"から"受け取り時の支払い"を選択できるはずです 必須 (Essential) 簡潔にする (Brief)

Slide 31

Slide 31 text

BRIEFの原則を用いた改善例 Scenario: 未認証のお客様が受け取り時に支払うことを選択できる Given お客様は"BasketItemCount"の中に"1品"持っています Given お客様は買い物カゴの中に1つの商品を入れています When 彼らは"チェックアウト"をクリックします And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します And 彼らは商品の店頭受け取りを選択しました When 彼らは支払い指示に進みます Then 彼らは"PaymentOption"から"受け取り時の支払い"を選択できるはずです Then 彼らは受け取り時の支払いを選択できるはずです ビジネス言語 (Business language) 意図の明確化 (Intention revealing)

Slide 32

Slide 32 text

改善結果 Scenario: 未認証のお客様が受け取り時に支払うことを選択できる Given お客様は買い物カゴの中に1つの商品を入れています And 彼らは商品の店頭受け取りを選択しました When 彼らは支払い指示に進みます Then 彼らは受け取り時の支払いを選択できるはずです

Slide 33

Slide 33 text

改善結果(改善前) Scenario: 注文テスト Given 時刻は"11:00"です Given お客様は"http://test.wimp.com/"にアクセスします And 彼らは"SearchText"に"マルゲリータ"と入力します When 彼らは"検索"を押します Then "SearchResults"内に"マルゲリータ"が表示されるはずです And 彼らは"サイズ"から"中"を選択します When 彼らは"買い物カゴに追加"を押します Then "BasketItemCount"の中に"1品"と表示されるべきです。 When 彼らは"チェックアウト"をクリックします And 彼らは"DeliveryInstructions"から"店頭受け取り"を選択します And 彼らは"PaymentOption"から"受け取り時の支払い"を選択します And 彼らは"OrderName"に"Marvin"と入力します And 彼らは"ContactPhoneNumber"に"12334456"と入力します When 彼らは"注文を送信"を押します Then "SuccessMessage"が表示されるはずです Then "ErrorMessage"は表示されないはずです And "SuccessMessage"内に"ご注文ありがとうございます! "と表示されるはずです And "CollectionTime"内に"11:20"が表示されるはずです And "TotalAmount"内に"$14"が表示されるはずです

Slide 34

Slide 34 text

改善中の会話は書籍に記載 これは開発者、PO、QAの三者の会話によって 改善が行われます。 どのような会話があるのかについては、 書籍『The BDD Books - Formulation』を 読んでください。

Slide 35

Slide 35 text

改善中の会話は書籍に記載 これは開発者、PO、QAの三者の会話によって 改善が行われます。 どのような会話があるのかについては、 書籍『The BDD Books - Formulation』を 読んでください。

Slide 36

Slide 36 text

おわりに

Slide 37

Slide 37 text

まとめ ● BDDはDiscovery(発見)、Formulation(定式化)、 Automation(自動化)という3つの要素からなる ○ 記載順で実施することが大事 ● Discoveryでは明確な具体例を用いて協調作業をする ● FormulationではBRIEFの原則などを用いて より読みやすいシナリオに改善していく

Slide 38

Slide 38 text

おしまい