アジャイル開発のテスト -自動化でしょうか。いいえ、戦略勝ちです。-

405fe9ab689473f267e2cfbd95f78c75?s=47 kyonmm
September 10, 2016

アジャイル開発のテスト -自動化でしょうか。いいえ、戦略勝ちです。-

Hacker Tackle 2016で講演したアジャイルテストにおけるアンチパターンをまとめたものです。個人の見解です。

405fe9ab689473f267e2cfbd95f78c75?s=128

kyonmm

September 10, 2016
Tweet

Transcript

  1. ΞδϟΠϧ։ൃͷςετ -ࣗಈԽͰ͠ΐ͏͔ɻ͍͍͑ɺઓུউͪͰ͢ɻ- kyon_mm in HACKER TACKLE 2016/09/10

  2. Self Introduction • ͖ΐΜ kyon_mm @ גࣜձࣾΦϯβϩʔυ • ςετΞʔΩςΫτɺεΫϥϜɺڭҭ •

    Groovy, F#, C# • TDD/BDDΤΩεύʔτ
  3. Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA

    / Discussion
  4. kyon_mm ͷഎܠ • डୗΞδϟΠϧ։ൃ 4ਓνʔϜ • .NET ܥͷϑϨʔϜϫʔΫɺϥΠϒϥϦ։ൃ͕ϝΠ ϯɻͨ·ʹWebAPI, WebGUIɻ

    • ςετࣗಈԽͷॻ੶Λڞஶɺ@IT ʹͯTDDهࣄ࿈ࡌ • εΫϥϜΛத৺ʹࠃ಺ΧϯϑΝϨϯεͰࣄྫൃද
  5. Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA

    / Discussion
  6. ςετΞϯνύλʔϯ • Α͔Εͱ͓΋ͬͯ΍͚ͬͨͲɺ͍ͭͷ·ʹ͔ ࠔͬͯ͠·͏ςετʹؔ͢Δύλʔϯ

  7. ςετͷཧ૝ͬͯͳΜ͚ͩͬ? • ςετ͕ͳ͍͜ͱɻςετ͠ͳͯ͘΋ཉ͍͠ ৘ใ͕खʹ͸͍͍ͬͯΔ͜ͱɻ • ຖճςετ࣮ߦͰόάΛΈ͚ͭΒΕΔ͜ͱɻ

  8. ςετΞϯνύλʔϯ • ա৒ࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ࿦

  9. ա৒ࣗಈԽ • ςετʹݶΒͣࣗಈԽ΋౓͕ա͗Ε͹ͭΒ͍ ΋ͷͰ͢ɻ • ͳʹ͕ա৒ͷϥΠϯʹͳΔ͔͸νʔϜ΍ϓϩ μΫτ࣍ୈͰ͢ɻ • ࣗ෼ୡͷ੒௕΋ؚΊͨϦλʔϯΛߟྀͨ͠ROI Λߟ͑·͠ΐ͏ɻ

  10. ա৒ࣗಈԽ ίϯςΩετ • खಈͷGUIૢ࡞΍ίϚϯυૢ࡞͕ଟͯ͘΍ͬͯ ΒΕͳ͍ɻ • खಈͰ͸Ͱ͖ͳ͍͜ͱΛಋೖ͍ͨ͠ɻ • ࡞ۀ඼࣭͕௿͘ਓؒͷखಈΛ৴༻Ͱ͖ͳ͍ɻ •

    ͳΜͲ΋܁Γฦ͢͜ͱ͕͓͓͍ɻ
  11. ա৒ࣗಈԽ ίϯςΩετ • ςετ΍σϓϩΠΛࣗಈԽͨ͠ɻ • GUIͷςετ΋ࣗಈԽͨ͠ɻ • ؀ڥߏங΋ࣗಈԽͨ͠ɻ

  12. ա৒ࣗಈԽ ՝୊ • όάΛະવʹ๷͍ͩΓɺݟ͚ͭͨΓ͢Δ͜ͱ ͕Ͱ͖͍ͯͳ͍ɻ • ϓϩμΫτίʔυͷमਖ਼ʹରͯ͠ςετίʔ υͷमਖ਼ྔ͕ଟ͗ͯ͢ɺ؆୯ʹमਖ਼Ͱ͖ͳ͍ɻ • ࣗಈԽͨ͠΋ͷΛϝϯςͰ͖Δਓ͕͍ͳ͍ɻ

  13. ա৒ࣗಈԽ ݪҼ1 • όάΛະવʹ๷͍ͩΓɺݟ͚ͭͨΓ͢Δ͜ͱ ͕Ͱ͖͍ͯͳ͍ɻ • ໨త͕੔ཧ͞Ε͍ͯͳ͍ɻ • ؆୯ʹͰ͖Δ͜ͱ͚ͩΛେྔʹࣗಈԽͯ͠ ͍Δɻ

  14. ա৒ࣗಈԽ ݪҼ2 • ϓϩμΫτίʔυͷमਖ਼ʹରͯ͠ςετίʔυ ͷमਖ਼ྔ͕ଟ͗ͯ͢ɺ؆୯ʹमਖ਼Ͱ͖ͳ͍ɻ • ݟ͚͍ͭͨόάɺ࢓༷Խ͢΂͖ςετͷॏෳ ͕ଟ͍ɻ • ςετ͸ͳ͍ΑΓ͋ͬͨ΄͏͕͍͍ͱ͍͏ࢥ

    ͍ࠐΈɻ
  15. ա৒ࣗಈԽ ݪҼ3 • ࣗಈԽͨ͠΋ͷΛϝϯςͰ͖Δਓ͕͍ͳ͍ɻ • ࣗಈԽ͢Δ͜ͱ͕໨తʹͳͬͯ͠·͍ͬͯΔɻ • ࠷ॳͷ໨త͔ΒͣΕͨӡ༻Λͯ͠͠·͍ͬͯΔɻ • ࣗಈԽͨ͜͠ͱʹΑࣦͬͯͬͨ΋ͷΛݟΑ͏ͱ

    ͍ͯ͠ͳ͍ɻ
  16. ա৒ࣗಈԽ ݪҼ·ͱΊ • ࣗಈԽΛ͢͢Ί͍ͯ͘ɺࣗಈԽ͞Εͨ΋ͷΛ࢖ͬ ͍ͯ͘ͳ͔Ͱɺࣗ෼ୡͷཁٻ͕มΘ͍ͬͯΔ͜ ͱʹؾ͍͍ͮͯͳ͍ɻ • ࣗ෼ୡͷݱ৔ͳΒͰ͸ͷɺࣗಈԽͷϝϦοτɺ σϝϦοτΛߟ͍͑ͯͳ͍ɻ •

    ͳ͍ΑΓ͋ͬͨ΄͏͕͍͍ɻͱࢥ͍ࠐΜͰ͍Δɻ
  17. ա৒ࣗಈԽ ରࡦ • ࣗಈԽͷཁٻΛϓϩοτ͍ͯ͘͠ɺҰ౓࣮ݱ͚ͨ͠Ͳ ෆཁʹͳͬͨ΋ͷ͸ͲΜͲΜࣺͯͨΓɺมߋ͢Δɻ • ͦͷཁٻΛୡ੒͢Δ͜ͱͰͷϓϥεͷϦλʔϯɺϚΠ φεͷϦλʔϯΛߟ͑Δɻ • ෆ͔҆ͩΒࣗಈԽ͢Δɻ͔ΒҰา౿ΈࠐΜͰɺৗʹʮͳ

    ͥෆ҆ͳͷ͔ʯΛ͖ͭͭΊͯɺຊ౰ʹ΄͍͠΋ͷΛ࣮ ݱ͢Δɻ
  18. ςετΞϯνύλʔϯ • ա৒ࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ࿦

  19. ϞοΫਲ͍ • ϞοΫ : ςετର৅ͷҰ෦Ͱຊ෺Λ࢖Θͣʹ೚ ҙͷಈ࡞ͤ͞Δख๏ɻ • ςετͷϝϯςφϯεΛ͍ͯ͠Δഺ͕ɺϞο Ϋͷϝϯςφϯε͕ϝΠϯʹͳͬͨΓɺϓϩ μΫτίʔυͷίϐϖʹͳͬͨΓɻ

  20. ϞοΫਲ͍ ίϯςΩετ • ςετͷ࣮ߦ͕࣌ؒ஗͍ɻ(DB΍WebAPIΛ ࢖͍ͬͯΔ) • ҟৗͳঢ়ଶΛͭ͘Γ͍ͨɻ

  21. ϞοΫਲ͍ ίϯςΩετ • DB΍WebAPIΛར༻͍ͯ͠Δ෦෼ΛϢχοτ ςετͰ͖ΔΑ͏ʹɺϞοΫΛར༻ͨ͠ɻ • ϞοΫର৅ͷͲͷAPIΛԿճ࣮ߦ͔ͨ͠΋ݕࠪ ͢Δɻ • ߴ଎ͳϢχοτςετΛ࣮ݱͨ͠ɻ

  22. ϞοΫਲ͍ ՝୊ • ϓϩμΫτίʔυ/ςετίʔυΛมߋ͢Δͨ ΊʹେྔͷϞοΫίʔυΛมߋ͠ͳ͚Ε͹͍ ͚ͳ͍ɻ • ϞοΫͱຊ෺͕ဃ཭͍͗ͯͯ͢͠ɺςετ͕ ৴༻Ͱ͖ͳ͍ɻ

  23. ϞοΫਲ͍ ݪҼ1 • ϓϩμΫτίʔυ/ςετίʔυΛมߋ͢Δͨ ΊʹେྔͷϞοΫίʔυΛมߋ͠ͳ͚Ε͹͍ ͚ͳ͍ɻ • ϞοΫίʔυͷॏෳ͕ଟ͍ɻ • ϞοΫ͠ͳͯ͘΋ςετͰ͖Δ΋ͷ·ͰϞο

    Ϋ͍ͯ͠Δɻ
  24. ϞοΫਲ͍ ݪҼ2 • ϞοΫͱຊ෺͕ဃ཭͍͗ͯͯ͢͠ɺςετ͕৴༻ Ͱ͖ͳ͍ɻ • Φʔφʔ͕ҟͳΔϓϩμΫτʹରͯ͠ϞοΫ͠ ͍ͯΔͱɺόʔδϣϯΞοϓʹ͍͍͔ͭͯͳ͍ ͱ͍͚ͳ͍ɻ •

    ϞοΫͱϞοΫର৅͕Ұக͍ͯ͠Δ͔ͷςετ Λ͍ͯ͠ͳ͍ɻ
  25. ϞοΫਲ͍ ݪҼ2 • ςετͷͨΊʹϞοΫΛͭͬͯ͘ɺϞοΫ͕ ͍͋ͬͯΔ͔ͷͨΊʹςετΛͭͬͯ͘ɺɺɺ • ΊΜͲ͍͘͞ɻ

  26. ϞοΫਲ͍ ݪҼ·ͱΊ • ϞοΫͨ͠Β໨ͷલͷςετ͕ਐΉɻ͔Βͱ Γ͋͑ͣϞοΫ࢖ͬͯ͠·͏ͱ͖͕͋Δɻ • ϞοΫͷઃܭΛૄ͔ʹ͕ͪ͠ɻ • ϞοΫ͕ਖ਼͍͔͠Λ֬ೝ͍ͯ͠ͳ͍ɻ

  27. ϞοΫਲ͍ ରࡦ • ϞοΫͰςετߴ଎Խ͢ΔͷͰ͸ͳ͘ɺςε τ؀ڥͷෳ਺ߏஙɺ෼ࢄ࣮ߦʹΑͬͯߴ଎Խ ͢Δ • ϞοΫΛͲͷΑ͏ʹϝϯςφϯε͢Δ͔Λߟ ͑Δ

  28. ςετΞϯνύλʔϯ • ա৒ࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ࿦

  29. TDD(ςετۦಈ։ൃ)ෆཁ࿦ • TDD : ςετίʔυฤू -> ϓϩμΫτίʔυ ฤू -> ϦϑΝΫλϦϯά

    Λ܁Γฦ͢෼ੳɺઃ ܭٕ๏ • TDD΍Δͷ͸ϢχοτςετΛ֮͑ΔͨΊ͘ Β͍ͷ΋ͷͰɺTDD΍ͬͯ΋։ൃ͕Ճ଎ͯ͠ ͍ͳ͍ɻ
  30. TDDෆཁ࿦ ίϯςΩετ • ෳࡶͳγεςϜͳͷͰςετ͕ͳ͍ͱਖ਼͍͠ มߋΛͰ͖ͳ͍ɻ • ͲΜͳಈ͖Λ͢Δͷ͔·ͬͨ͘Θ͔Βͳ͍ɻ • ͦ͜ͰTDDΛ͠ͳ͕ΒɺςετΛ֦ॆ͍ͯ͠ ͘ɻ

  31. TDDෆཁ࿦ ίϯςΩετ • Ϣχοτςετ͸ۃྗTDDͰ΍͕ͬͨςετ ՄೳͳઃܭΛ࠷ॳ͔ΒͰ͖ΔΑ͏ʹͳͬͨͷ Ͱɺ΋͏΍Βͳ͍͍ͯ͘ͱ൑அͨ͠ɻ • ϢχοτςετͷTDDΛ͠ͳͯ͘΋Ϣχοτ ςετ࣌ʹΘ͔Δόά͸Ͱͳ͍͔Βɺ΋͏΍ Βͳ͍͍ͯ͘ͱ൑அͨ͠ɻ

  32. TDDෆཁ࿦ ՝୊ • ͋ͱ͔Β࣮ߦ͢Δςετͷ͓͓͕͘ॏཁͳϢʔ εέʔεΛදݱ͍ͯ͠Δ͚Ͳɺϝϯςφϯε ͠΍͍͢ܗͰͷ͍ͬͯ͜ͳ͍ɻ • ࢖͍͍ͨιϑτ΢ΣΞͰ͋Δ͔?Θ͔Δͷ͕஗ ͍ɻ

  33. TDDෆཁ࿦ ݪҼ1 • ͦͯͦ͠ͷ෦෼͕΋ͬͱ΋ॏཁͳϢʔεέʔεΛ දݱ͍ͯ͠Δ͚Ͳɺϝϯςφϯε͠΍͍͢ܗͰͷ ͍ͬͯ͜ͳ͍ɻ • ࢒͓͍ͯͨ͠΄͏͕͍͍ςετ͔Ͳ͏͔͸ޙʹ ͳΒͳ͍ͱΘ͔Βͳ͍ɻ •

    ׳Ε͍ͯͳ͍ͱͳ͔ͳ͔εΫϦϓςουʹ͢Δ ؾྗ͕Θ͔ͳ͍ɻ
  34. TDDෆཁ࿦ ݪҼ2 • ࢖͍͍ͨιϑτ΢ΣΞͰ͋Δ͔?Θ͔Δͷ͕஗ ͍ɻ • ࣮૷͔ͯ͠Β౷߹ςετɺγεςϜςετɺ ϢʔβϏϦςΟςετͱ͍͏ϓϩηε͕ී ௨ͩͱࢥ͍͜ΜͰ͍Δɻ

  35. TDDෆཁ࿦ ݪҼ·ͱΊ • Test as Documentationͷײ͕֮ͳ͍ɻ • ৗʹΰʔϧΛҙࣝͨ͠։ൃ͕Ͱ͖ͳ͍ɻ • ςετ͸ݏ͚ͩͲɺςετࣗମΛվળ͢Δؾ

    ͕ͳ͍ɻ
  36. TDDෆཁ࿦ ରࡦ • ཁٻ΍࢓༷͸ςετίʔυͱܕͰ΋֬ೝ͢Δɻ • ࠷ॳʹςετͰ͜Μͳ࢖͍ํ͕Ͱ͖Διϑτ΢Σ Ξ͕΄͍͠ͱఆٛ͢Δ΄͏͕ɺظ଴ͱͷζϨΛͳ ͤ͘Δɻ • खಈͰ΋͍͍͔Βɺઌʹ͓͓·͔ͳςετέʔε

    Λͭ͘Γ͸͡ΊͯɺϦϑΝΫλϦϯά͠ͳ͕Βͭ ͘Γ͜Ήɻ
  37. Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA

    / Discussion
  38. ͖ͬ͞·Ͱͷ·ͱΊ • ࣗಈԽΛ͢Ε͹େৎ෉ͳͷͰ͸ͳ͍ͷͰ͢ɻ ॏཁͳͷ͸ɺνʔϜ΍ϓϩμΫτͷ੒௕ʹ͋ ΘͤͨࣗಈԽͰ͢ɻ • ͳΜͱͳ͘ͰࣗಈԽ͢ΔݶΓ͸ͳΜͱͳ͘ͷ ੒Ռ͔͑͠ΒΕͳ͍͠ɺͳΜͱͳ͘ΞδϟΠ ϧ΍͍ͬͯͯɺͳΜͱͳ͘ςετ΍͍ͬͯΔɻͬ ͯͳͬͯ͠·͍·͢ɻ

  39. ͯ͞ɺkyon_mm͸? • ςετΛઃܭ͔ͯ͠Β࣮ࢪ͢Δ·Ͱͷ࣌ؒ 0.1h ͔Β 2.0h • ςετظؒͳ͠ • εϓϦϯτظؒ

    2days • खಈςετ΋ΨγΨγ΍Γ·͢
  40. ͯ͞ɺkyon_mm͸? • ࣗಈςετ͸BDD෩ʹهड़͍ͯ͠·͢ɻ • खಈςετ͸Ignoreͳࣗಈςετͱͯ͠ɺ WikiʹBDD෩ʹهड़͍ͯ͠·͢ɻ • ͦ΋ͦ΋ςετΛݮΒ͢ɻͲ͏͢Ε͹࠷খͷς ετͰϦϦʔεͰ͖Δͷ͔ɻ

  41. Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA

    / Discussion
  42. QA

  43. ·ͱΊ • ཧ૝ʹۙ෇͘ʹ͸౒ྗ͕ඞཁͰ͢ɻ • ໨ͷલͷࣄ৅Λղܾ͢Δ͜ͱ͚ͩʹनΘΕͯ ͸͍͚·ͤΜɻνʔϜͱϓϩμΫτΛͲͷΑ ͏ʹ੒௕͍ͤͯ͘͞ͷ͔ɺৗʹঢ়گʹԠͯ͡ มԽ͢Δ͜ͱ͕େ੾Ͱ͢ɻ • ॱԠ͢Δ͜ͱ͕ΞδϟΠϧͰ͔͢ΒͶɻ