Slide 1

Slide 1 text

TODOリストの 整理を通じて 実行すべきテストを 考える ブロッコリー (@nihonbuson)

Slide 2

Slide 2 text

自己紹介 ● ブロッコリー ● 職業 ○ テストエンジニア ● 社外活動 ○ JaSST Review実行委員長 ○ WACATE実行委員 ○ 書籍『Agile Testing Condensed』 翻訳

Slide 3

Slide 3 text

本発表の題材

Slide 4

Slide 4 text

題材 ● 自動販売機 (設計進化重視バージョン) ● お題は事前に与えられていた ○ お題1. ボタンを押すとコーラが出る ■ ボタンを押すとコーラが出ます。 ○ お題2. お金を払う ■ 100円硬貨を投入してから ボタンを押すとコーラが出ます。 ■ 100円硬貨以外は投入できません。 ● どのような会話をして取り組んだか紹介します。

Slide 5

Slide 5 text

お題1. ボタンを押すとコーラが出る

Slide 6

Slide 6 text

お題1. ボタンを押すとコーラが出る public String buy() { return "コーラを購入しました"; }

Slide 7

Slide 7 text

お題1. ボタンを押すとコーラが出る public String buy() { return "コーラを購入しました"; } 「購入する」って なんですかね? お金を入れて商品を 手に入れたあと、 お釣りを もらうことかな 相手 私

Slide 8

Slide 8 text

お題1. ボタンを押すとコーラが出る public String buy() { return "コーラを購入しました"; } このコード内の 「購入する」は 今回のお題に比べて 色々なことを 含んでそう 私 ああ、確かに そうですねー。 それなら… 相手

Slide 9

Slide 9 text

お題1. ボタンを押すとコーラが出る public String pushButton() { return "コーラ"; } 私 ああ、確かに そうですねー。 それなら… 相手 このコード内の 「購入する」は 今回のお題に比べて 色々なことを 含んでそう

Slide 10

Slide 10 text

お題2. お金を払う

Slide 11

Slide 11 text

お題2. お金を払う 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 (TODOリスト) (私の発言) 私 (相手の発言) 相手

Slide 12

Slide 12 text

お題2. お金を払う 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 どんなテストが ありますかね? 私 まず、100円硬貨を 投入するとボタンが 有効になるかですかね 相手

Slide 13

Slide 13 text

お題2. お金を払う ● 100円硬貨を 入れるとボタンが有効 どんなテストが ありますかね? 私 まず、100円硬貨を 投入するとボタンが 有効になるかですかね 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 14

Slide 14 text

お題2. お金を払う ● 100円硬貨を 入れるとボタンが有効 ● 100円以外の硬貨を 入れるとボタンが無効 なるほど。 他にはどんなテスト がありますか? 私 えっと、100円以外の 硬貨を投入したら、 ボタンが有効に ならない場合ですかね 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 15

Slide 15 text

お題2. お金を払う ● 100円硬貨を 入れるとボタンが有効 ● 100円以外の硬貨を 入れるとボタンが無効 ○ 10円硬貨 なるほど。 『100円以外』とは具 体的にはどんな値が 考えられますか? 私 例えば、 10円硬貨ですかね。 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 16

Slide 16 text

お題2. お金を払う ● 100円硬貨を 入れるとボタンが有効 ● 100円以外の硬貨を 入れるとボタンが無効 ○ 10円硬貨 なるほどー。 ちなみに、これらは ボタンが有効になる 条件を考えてますね 私 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 そうですねー 相手

Slide 17

Slide 17 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 なるほどー。 ちなみに、これらは ボタンが有効になる 条件を考えてますね 私 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 そうですねー 相手

Slide 18

Slide 18 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 他にはどんなテスト をしたいですかね? 私 ボタンを押した結果の テストをしたいです 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 19

Slide 19 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 ● ボタンを押した結果 他にはどんなテスト をしたいですかね? 私 ボタンを押した結果の テストをしたいです 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 20

Slide 20 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 ● ボタンを押した結果 ○ ボタンが有効ならボタンを 押すとコーラが出る ボタンを押した結果 のテストって、 具体的にはどんなこ とを考えてますか? 私 ボタンが有効な場合に 限り、ボタンを押すと コーラが出るとか… 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 21

Slide 21 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 ● ボタンを押した結果 ○ ボタンが有効ならボタンを 押すとコーラが出る ○ ボタンが無効ならボタンを 押しても何も出ない 確かにそうですね。 それ以外だと どうですか? 私 ボタンが無効な場合、 ボタンを押すと 何も出ないことを テストしたいですね。 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。

Slide 22

Slide 22 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 ● ボタンを押した結果 ○ ボタンが有効ならボタンを 押すとコーラが出る ○ ボタンが無効ならボタンを 押しても何も出ない 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 会話を進めていくことで、 お題を分解した形で TODOを作成できた!

Slide 23

Slide 23 text

お題2. お金を払う ● ボタンが有効になる条件 ○ 100円硬貨を 入れるとボタンが有効 ○ 100円以外の硬貨を 入れるとボタンが無効 ■ 10円硬貨 ● ボタンを押した結果 ○ ボタンが有効ならボタンを 押すとコーラが出る ○ ボタンが無効ならボタンを 押しても何も出ない 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 会話を進めていくことで、 お題を分解した形で TODOを作成できた! 必要なスキル ● 抽象化/具体化能力 ● チームで納得して 進める力

Slide 24

Slide 24 text

TDDサイクルで 忘れがちな部分

Slide 25

Slide 25 text

TDDのサイクルで忘れがちな部分 https://speakerdeck.com/twada/tdd-live-and-workshop-2019-spring?slide=12

Slide 26

Slide 26 text

TDDのサイクルで忘れがちな部分 https://speakerdeck.com/twada/tdd-live-and-workshop-2019-spring?slide=12

Slide 27

Slide 27 text

TDDのサイクルで忘れがちな部分 https://speakerdeck.com/twada/clean-code-that-works-seleniumconf-tokyo-2019?slide=45

Slide 28

Slide 28 text

TDDのサイクルで忘れがちな部分 https://speakerdeck.com/twada/clean-code-that-works-seleniumconf-tokyo-2019?slide=46

Slide 29

Slide 29 text

TDDのサイクルで忘れがちな部分 https://speakerdeck.com/twada/tdd-live-and-workshop-2019-spring?slide=12

Slide 30

Slide 30 text

TDDのサイクルで忘れがちな部分 https://speakerdeck.com/twada/tdd-live-and-workshop-2019-spring?slide=12 「設計をしない」 という誤解がある

Slide 31

Slide 31 text

TDDはテストによって運転されるもの テストは一度作って終わりではなく、 常に調整し続けるもの! 「運転というのはね、車を正しい方向に走らせることじゃない の。常に注意を払って、こっちに行ったら少し戻して、あっち に行ったら少し戻して、そうやって軌道修正していくものよ」 これがXPのパラダイムだ。注意して、適応して、変更する。 書籍『エクストリームプログラミング』第2章より

Slide 32

Slide 32 text

まとめ

Slide 33

Slide 33 text

まとめ ● TDDBCの参加者の頃に体験した会話を再現した ● 具体的な例と抽象化を用いることで、 より明確なTODOリストを作成することができた ● 以下の2つの活動はTDDサイクルをする上で 忘れがちになるが、とても大切 ○ Refactoring ○ 次の目標を考える

Slide 34

Slide 34 text

参考文献 ● テストエンジニアがTDDブートキャンプに参加してきました #TDDBC ○ https://nihonbuson.hatenadiary.jp/entry/2018/10/05/090000 ● 見てわかるテスト駆動開発 / TDD Live and Workshop 2019 Spring ○ https://speakerdeck.com/twada/tdd-live-and-workshop-2019-spring ● 動作するきれいなコード / Clean code that works - SeleniumConf Tokyo 2019 ○ https://speakerdeck.com/twada/clean-code-that-works-seleniumconf-tokyo-2019 ● 「テスト駆動開発の『駆動』は誤訳なんじゃないか」と言われて改めて 考えた話 ○ https://nihonbuson.hatenadiary.jp/entry/2020/07/07/183000 ● Agile Testingのエッセンス #scrumosaka / Agile Testing Essence ○ https://speakerdeck.com/nihonbuson/agile-testing-essence