TODOリストの整理を通じて実行すべきテストを考える #tddbc / TDDBC 2020 Online LT

706ff501573a736401aa4de5adc88e05?s=47 nihonbuson
August 01, 2020

TODOリストの整理を通じて実行すべきテストを考える #tddbc / TDDBC 2020 Online LT

以下のイベントの投影資料です。
https://tddbc.connpass.com/event/181973/

【発表資料中のURL】
P2 Agile Testing Condensed Japanese Edition
https://leanpub.com/agiletesting-condensed-japanese-edition

P4 プログラミングのお題: 自動販売機 (設計進化重視バージョン)
https://gist.github.com/yattom/884741ecbd3c660fb393b2d7b116b4b2

P25 見てわかるテスト駆動開発 / TDD Live and Workshop 2019 Spring
https://speakerdeck.com/twada/tdd-live-and-workshop-2019-spring?slide=12

P27 動作するきれいなコード / Clean code that works - SeleniumConf Tokyo 2019
https://speakerdeck.com/twada/clean-code-that-works-seleniumconf-tokyo-2019?slide=45

P31 書籍『エクストリームプログラミング』
https://www.ohmsha.co.jp/book/9784274217623/

P34 テストエンジニアがTDDブートキャンプに参加してきました #TDDBC
https://nihonbuson.hatenadiary.jp/entry/2018/10/05/090000

P34 「テスト駆動開発の『駆動』は誤訳なんじゃないか」と言われて改めて考えた話
https://nihonbuson.hatenadiary.jp/entry/2020/07/07/183000

P34 Agile Testingのエッセンス #scrumosaka / Agile Testing Essence
https://speakerdeck.com/nihonbuson/agile-testing-essence

706ff501573a736401aa4de5adc88e05?s=128

nihonbuson

August 01, 2020
Tweet

Transcript

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

  2. 自己紹介 • ブロッコリー • 職業 ◦ テストエンジニア • 社外活動 ◦

    JaSST Review実行委員長 ◦ WACATE実行委員 ◦ 書籍『Agile Testing Condensed』 翻訳
  3. 本発表の題材

  4. 題材 • 自動販売機 (設計進化重視バージョン) • お題は事前に与えられていた ◦ お題1. ボタンを押すとコーラが出る ▪

    ボタンを押すとコーラが出ます。 ◦ お題2. お金を払う ▪ 100円硬貨を投入してから ボタンを押すとコーラが出ます。 ▪ 100円硬貨以外は投入できません。 • どのような会話をして取り組んだか紹介します。
  5. お題1. ボタンを押すとコーラが出る

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

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

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

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

    ああ、確かに そうですねー。 それなら… 相手 このコード内の 「購入する」は 今回のお題に比べて 色々なことを 含んでそう
  10. お題2. お金を払う

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

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

    相手
  13. お題2. お金を払う • 100円硬貨を 入れるとボタンが有効 どんなテストが ありますかね? 私 まず、100円硬貨を 投入するとボタンが

    有効になるかですかね 相手 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。
  14. お題2. お金を払う • 100円硬貨を 入れるとボタンが有効 • 100円以外の硬貨を 入れるとボタンが無効 なるほど。 他にはどんなテスト

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

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

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

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

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

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

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

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

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

    ▪ 10円硬貨 • ボタンを押した結果 ◦ ボタンが有効ならボタンを 押すとコーラが出る ◦ ボタンが無効ならボタンを 押しても何も出ない 100円硬貨を投入してからボタンを押すとコーラが出ます。 100円硬貨以外は投入できません。 会話を進めていくことで、 お題を分解した形で TODOを作成できた! 必要なスキル • 抽象化/具体化能力 • チームで納得して 進める力
  24. TDDサイクルで 忘れがちな部分

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

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

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

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

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

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

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

  32. まとめ

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

    Refactoring ◦ 次の目標を考える
  34. 参考文献 • テストエンジニアが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