Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テストと仲良くなりたい、 なりたくない? -why test

テストと仲良くなりたい、 なりたくない? -why test

社内勉強会での発表ネタです

C90bac78c0fb61105cfd8239767f903d?s=128

hideki kinjyo
PRO

April 16, 2021
Tweet

Transcript

  1. ςετͱ஥ྑ͘ͳΓ͍ͨɺ
 ͳΓͨ͘ͳ͍ʁ σϒϥΠϒʂ`21 / 2021.04.16 BY Hideki Kinjyo

  2. ࣗݾ঺հ • ۚ৓लथ / ͖Μ͡ΐ͏ͻͰ͖ • GitHub: @o0h / Twitter:

    @o0h_ • ޷͖ͳFW͸CakePHP • ΞΠίϯ͸
 ඒຯ͍͠ࡪ਌ࢠကͷࣸਅͰ͢
  3. ࣗݾ঺հͷ঺հ ࣗ ݾ ঺ հ ͸ 
 ࢖ ͍ ·

    Θ ͠ ͯ · ͢ Α ʂ
  4. ࠓ೔ͷ͓୊

  5. ൃදλΠτϧݟͯҾ͍ͯ·ͤΜʁʁ

  6. େৎ෉Ͱ͔͢ʁʁʁ

  7. ͜ͷൃදΛฉ͖ऴΘͬͨ࣌ʹɺ ʮςετ͍͍ͬͯΑͶɺେ޷͖ʯͱ͍͏ؾ࣋ͪʹ গ͠Ͱ΋ͳͬͯ͘ΕͨΒخ͍͠Ͱ͢

  8. ͓͠ͳ͕͖ 1.ςετͱ͸Ͳ͏͍͏΋ͷ͔ 2.ςετ͸ԿΛ΋ͨΒ͔͢ɾԿ͕ඞཁ͔ 3.ςετͷྑ͞Λ࣮ײ͢Δ 4.Ͳ͏΍ͬͨΒςετΛॻ͘΍͘͢ͳΔ͔

  9. #1 ςετͱ͸Ͳ͏͍͏΋ͷ͔

  10. ʮιϑτ΢ΣΞςετʯΛఆٛ͢Δͱͨ͠Β ͳΜͱઆ໌͠·͔͢ʁ

  11. ςετͱ͸ɼΤϥʔ͕ͳ͍͜ͱΛ͠Ί͍ͯ͘͠աఔͰ͋Δ ςετͷ໨త͸ɼϓϩάϥϜ͕ҙਤ͞ΕͨػೳͲ͓Γʹਖ਼͘͠ ಈ͍ͯ͘ΕΔ͜ͱΛ͠Ί͢͜ͱͰ͋Δ ςετͱ͸ɼϓϩάϥϜ͕ࢥ͍Ͳ͓Γʹಈ͘͜ͱͷ֬৴Λ࡞ͬ ͍ͯ͘աఔͰ͋Δ ࡾ୒ΫΠζʂ

  12. ͜ΕΒͷఆٛ͸ɼ
 ςετʹ͍ͭͯͷਖ਼൓ରͷఆٛͩͱ
 ͍ͬͯ΋͍͍.

  13. ςετͷՁ஋ ʮԿ͔Λ͢Δʯͷ͸ ʮԿΒ͔ͷՁ஋Λ΋ͨΒ͢ʯ ͜ͱ͕໨త • ςετʹΑͬͯ΋ͨΒ͞ΕΔՁ஋: =ϓϩάϥϜͷ ඼࣭ɾ৴པੑΛ޲্ͤ͞Δ͜ͱ • ϓϩάϥϜͷ৴པੑΛ޲্ͤ͞Δͱ͸?

    =ΤϥʔΛΈ͚ͭɼͦΕΛͱΓͷͧ͘͜ͱ • Ձ஋ͷߴ͍ςετ: = ΑΓଟ͘ͷΤϥʔΛΈ͚ͭͯ͘ΕΔςετ
  14. ςετͷఆٛ: ςετͱ͸ɼΤϥʔΛΈ͚ͭΔͭ΋ΓͰ ϓϩάϥϜΛ࣮ߦ͢ΔաఔͰ͋Δ.

  15. Կ͕ҧ͏ͷʁ • લఏͱͯ͠ɺ ʮϓϩάϥϜ͸ΤϥʔΛ;͘ΜͰ͍Δʯͱ͍͏Ծఆͷ΋ͱ Ͱ։ൃ΍ςετʹऔΓ૊ΜͰ͍͘ • ͳͷͰʮಈ͘͜ͱΛอূ͢Δʯ͜ͱΑΓ΋ɺ ʮΤϥʔΛݟ͚ͭΔʯ͜ͱʹॏ͖Λஔ͘

  16. ࢀߟ • ʰιϑτ΢ΣΞςετͷٕ๏ ୈ2൛ʱ ୈ2ষ ϓϩάϥϜɾςετͷ৺ཧֶͱܦࡁֶ

  17. #2 ςετ͸ԿΛ΋ͨΒ͔͢ɾԿ͕ඞཁ͔

  18. ςετͷʮίεύʯ • ςετͷ໨త = ʮΤϥʔΛূ໌͢Δʯ • Ͳ͏΍Δ͔ʁ • खಈͰ΍Δ •

    ࣗಈͰ΍Δ
  19. ςετͷʮίεύʯ • ʮ΍Δͷ͕େมʯͩͱ ʮΤϥʔΛূ໌͢Δίετʯ͕ߴ͘ͳΔ • →ࣗಈԽ͠Α͏ͥʂʂ • ʮ࡞Δͷ͕େมʯͩͱ ʮςετΛ༻ҙ͢Δίετʯ͕ߴ͘ͳΔ •

    → खಈͰ΍Ζ͏ͤʂʂ
  20. ςετϐϥϛου https://martinfowler.com/articles/practical-test-pyramid.html

  21. • https://alisterbscott.com/kb/testing-pyramids/ • https://twitter.com/t_wada/status/361796460725018624

  22. ʮΞΠεΫϦʔϜʯͷ໰୊͸ʁ 㱻ʮࣗಈԽςετʯͷࢿ࢈ੑͱ͸ʁ

  23. ࣗಈԽςετ • ୯ମςετͱ͔݁߹ςετɺE2EςετͳͲͷ ʮϘλϯԡͨ͠Βউखʹςετͯ͘͠ΕΔͷ͓͓͒ʯܥ • ࣗಈԽͷར఺ • ಉ͡࡞ۀΛ࣮ߦͰ͖Δ(ػց͕ಘҙͳ΍ͭʂʂ) • ʮίʔυԽʯʹΑͬͯɺखॱͷมߋɾಡղ͕Ͱ͖Δ

  24. ࣗಈԽςετͱίετ • ॳظֶशίετ͔͔ΔΑͶ • ςετϑϨʔϜϫʔΫͷDSL֮͑ͨΓ • CIͰ૊ΜͩΓ • ϝϯςίετ͔͔ΔΑͶ •

    มߋՕॴ͕૿͑ͨΓೖΓ૊ΜͩΓ • ϥϯχϯάඅ༻(࣮ߦ࣌ؒɺCIඅ༻)΋
  25. ܦࡁతͳࣗಈԽςετ ͏·͍ͬͨ͘৔߹ • த൫ʹίετ͸͔͔Δ͕ • ͦ͜Λൈ͚ͯ΋ ίετ͕ʮංେԽ͠ͳ ͍ʯ • ʮςετʹΑͬͯԼ͕Δί

    ετʯ͕େ͖͘ͳ͍ͬͯ͘ http://xunitpatterns.com/Goals%20of%20Test%20Automation.html
  26. ෆܦࡁతͳࣗಈԽςετ ͏·͍͍ͬͯ͘ͳ͍৔߹ • த൫Λൈ͚ͯ΋ ίετ͕ʮංେԽ͠ଓ͚ Δʯ • ʮςετʹΑͬͯԼ͕Δ ίετʯ͕ۃΊͯখ͍͞ http://xunitpatterns.com/Goals%20of%20Test%20Automation.html

  27. ςετ΋ʮ඼࣭ʯ͕େࣄ͡ΌΜʂʂʂʂ

  28. ςετͷ඼࣭ͬͯͳΜͩʁ

  29. ࣗಈԽςετͷʮΰʔϧʯ

  30. ޮՌᶃ ඼࣭Λ޲্ͤ͞Δ • Bug Repellent • ʮόά͕ࠞೖ͢ΔʯͷΛ๷͙ɺ๷஬ωοτతͳ໾ׂ • Defect Localization

    • ʮ1ͭͷৼΔ෣͍ͷݕࠪʯΛ૊Έ߹Θ͍ͤͯ͘ࣄ͕େࣄ • ͦΕʹΑͬͯɺʮͲ͕͜յΕ͍ͯΔ͔ʁʯΛ ໖ີʹɾہॴԽͯ͠ڭ͑ͯ͘ΕΔ
  31. ޮՌᶄ γεςϜཧղΛॿ͚Δ • Tests as Documentation • ςετ͕͋Δ͜ͱͰʮ࣮ࡍʹͦͷΫϥεΛ࢖ͬͯΈΔʯ ʮಈ͔ͯ͠ΈΔʯ͜ͱ͕Ͱ͖Δ •

    લఏ৚݅ͷຬͨ͠ํɾࣄޙ৚݅ͷ಺༰ʹ͍ͭͯɺ ໨ͱखͰ֬ೝ͢Δ͜ͱ͕༰қʹͳΔ
  32. ޮՌᶅ ϦεΫΛݮΒ͢ • Tests as Safety net • ʮ࠷ѱɺͳΜ͔͋ͬͨΒςετͰ෼͔Δʂʂʯͱ͍͏ ηʔϑςΟωοτతͳ໾ׂ

    • ςετͷෆ଍͸ʮͰ͜΅ͨ͜͠؛ʯͷΑ͏ͳ΋ͷɻ ͓͔ͬͳͼͬ͘ΓਐΜͰಥ೗υΧʔϯʂͬͯͳΔ
  33. BOENPSF ※ ੲͷར༻Α͔ͬͨΒͲ͏ͧʂ https://speakerdeck.com/o0h/she-nei-lt20170810

  34. ࢀߟ • ʰxUnit Test Patternsʱ Chapter 3. Goals of Test

    Automation
  35. #3 ςετͷྑ͞Λ࣮ײ͢Δ

  36. ʮςετ͸໾ʹཱͭʯͱ͍͏ˠΘ͔Δ ʮςετ΍Ζ͏ͥʂʂʯˠΊΜͲ͍

  37. (͜Μͳਓ͍·ͤΜ͔ʁ)

  38. ʮςετͰศརʯͬͯͷ͕
 ࣮ײͰ͖Ε͹Α͍ͷ͔ͳʁ

  39. ʮςετศརʯͷͨΊʹ • ʮ໨తʯ͕ମײͰ͖ΔͱOK: “ΤϥʔΛΈ͚ͭΔͭ΋ΓͰॻ͘΋ͷ” • Test as Specification: ʮ͜ͷϝιου௨͢ͷ໘౗͍͘͞ΜͩΑͶʙʯ →ςετॻ͍ͯݸผʹͦͷϝιου࣮ߦʂʂ

    • Bug Repellent, Defect Localization ʮͪΐͬͱ͍ͬͨ͡ΒյΕͨɺԿͰʁʁʯ → ہॴԽͨ͠ݕࠪΛͨ͘͞Μ૊߹Θ͓͚ͯ͹ʮͳͥʯΛςετ͕ड़΂ͯ͘ ΕΔʂʂ
  40. ·ͣ͸TDD΍ͬͯΈΔͱྑ͍ʙ • TDD: ςετͷʮྑ͞ʯΛ։ൃʹ׆͔͢΋ͷ • ϓϩάϥϚͷෆ҆Λίϯτϩʔϧ͢Δ • υΩϡϝϯτ୅ΘΓʹ͢Δ • ʮมͩΑʯʮେৎ෉ͩΑʯΛϑΟʔυόοΫ͢Δ

  41. ʮෆ҆Λίϯτϩʔϧʯͬͯʁ • ։ൃதͷෆ҆ • Ҿ਺Λ͜͏ͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ྫ֎͕ൃੜͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ͳΜͱͳ͘࢓༷ΠϝʔδͰ͖ͯΔ͚Ͳɺ͋ͬͯΔʁ •

    Ͳ͔͜Β࡞Ε͹Α͍ͷ͔ͳɾɾʁͳʹ͕࢒ͬͯΔ͚ͬɾɾʁ • 1ൃͰಈ͍ͨɾɾɾʁ
  42. ʮෆ҆Λίϯτϩʔϧʯͬͯʁ • ։ൃதͷෆ҆ • Ҿ਺Λ͜͏ͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ྫ֎͕ൃੜͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ͳΜͱͳ͘࢓༷ΠϝʔδͰ͖ͯΔ͚Ͳɺ͋ͬͯΔʁ •

    Ͳ͔͜Β࡞Ε͹Α͍ͷ͔ͳɾɾʁ ͳʹ͕࢒ͬͯΔ͚ͬɾɾʁ ͍ͭ͜ΒΛʮςετͰอূ͍ͯ͠Δ͔ΒOKʯʹ͢Δͷ͕
 ʮෆ҆Λίϯτϩʔϧʯ͢Δͱ͍͏͜ͱʂ
  43. TDDͷਐΊํ 1.·ͣ͸ʮ͜͏΍ͬͨΒʯʮ͜͏ͳΔ(΂͖)ʂʯΛॻ͘ • =ʮ΍Δ͜ͱϦετʯʮToDoϦετʯͷ ʮ߲໨ʯΛʮ1ςετέʔεʯͱͯ͠දݱ͍ͯ͘͠ 2.ʮ΍Δ͜ͱʯΛຬͨ͢Α͏ʹ(SUTͷ)ίʔυΛࡶʹॻ͘ 3.ʮ΍Δ͜ͱʯ͕ຬͨ͞Εͨঢ়ଶ(=΋͏ಈ͘ʂOKʂʂ)Ͱ ஸೡʹਗ਼ॻΛ͢Δ

  44. ͦΕͰͲ͏ͳΔͷʁ • ʮͲ͜·ͰOKͰɺͲ͕͜ඍົ͔ʯΛ ઌʹʮ൑அՄೳʯʹ͓͚ͯ͠Δʂʂ • ʮͲ͜·ͰOKʁຊ౰ʹʁʁʯ͕෼͔Δͱ ʮෆ҆ʯ͕ݮΔʂ҆৺Ͱ͖Δʂʂ • ʮͪΐͬͱ࿔Γ͍ͨ(ϦϑΝΫλ͍ͨ͠)ʯͱࢥͬͨ࣌ʹ طʹʮ໋ߝʯ͕͋Δʂʂʂ

    • ͜ͷลΓ͕ʮࣗಈԽςετͷՁ஋ʯʹ௚݁͢ΔΑʙʙͬͯ࿩
  45. ʮTDDࣗମͰςετ ≠ ࠷ऴతͳςετʯ
 Ͱ͸͋Δ͚ΕͲɺ
 ʮࣗಈԽςετͰಘΒΕΔԸܙʯ
 ͸ମײͰ͖Δ͸ͣ

  46. TDDͲ͔͜Β࢝ΊΕ͹ʁ Ͳ͔͜ΒͰ΋OK!! • ϘτϜΞοϓςετ: Ϋϥε΍ϝιου͕൑໌͍ͯ͠ΔͳΒɺ 1൪খ͞ͳʮ෦඼ʯ͔ΒςετԽΛ࢝ΊΒΕΔ • τοϓμ΢ϯςετ: ৄࡉͳઃܭ͸΍Γͳ͕Βߟ͍͑ͨɾɾ࣌ʹ͸ ΑΓେ͖ͳߏ଄͔Β΍ΓΌ͑͑ͷΑ

  47. TDDͲ͔͜Β࢝ΊΕ͹ʁ • ͍ͣΕͷΞϓϩʔνͰ΋ ʮςετ͕͋Ε͹ɺมߋ΋ා͘ͳ͘ͳΔʂʂʯ ͱ͍͏ԸܙΛ͏͚ΒΕΔΑ͏ʹͳΔ • ʮࠓΘ͔͍ͬͯΔ͜ͱʯͱʮ·ͩ෼͔͍ͬͯͳ͍͜ͱʯΛ ʮςετέʔεʯͰදݱ͍ͯ͘͠ʙͱ͍͏܁Γฦ͠ • ઈରʹશͯTDDͰ΍Δʂʂͱ͍͏ඞཁ͸ͳ͍ɺ

    ʮෆ͕҆ڧ͍ͱ͜Ζʯʮೖྗɾ݁Ռ͕ݻ·͍ͬͯΔͱ͜Ζʯ͚ͩʙͰ΋
  48. ࢀߟ • ʰςετۦಈ։ൃʱ • ·ͣجૅతͳTDDʹ͍ͭͯ͸ͪ͜ΒͰ • ʰ ςετίʔυͷϦϑΝΫλϦϯά͕໨ࢦ͢΋ͷʱ https://dxd2021.cto-a.org/program/time-table/a-1

  49. ࢀߟ • ʰ࣮ફςετۦಈ։ൃ ςετʹಋ͔ΕͯΦϒδΣΫτࢦ޲ ιϑτ΢ΣΞΛҭͯΔʱ • ൃలͨ͠Ϩϕϧ ʮτοϓμ΢ϯʯͷTDDͷݟຊ

  50. #4 Ͳ͏΍ͬͨΒςετΛॻ͘΍͘͢ͳΔ͔

  51. ςετ͕ʮྑ͍ʯ͸෼͔ͬͨɺ
 ॻ͘ͷ͕೉͘͠ͳ͍ɾɾʁ

  52. (Θ͔Δ)

  53. Ͳʙʙ΍ͬͯҭ͍͔ͬͯ͘ʂʁ • ʮςετͷ໨తɾޮՌʯΛཧղ͢Δ • ۩ମతͳtipsΛ஌Δ

  54. ࿩͍ͯ͠Δ࣌ؒͳ͍ͳɾɾɾʁ

  55. ʮ͜ΕΛҙࣝͯ͠ʯॻ͘ʂ • ෼ذ͕͋ͬͨΒɺͲͬͪ΋௨ΕΔΑ͏ʹҙࣝ͢Δ • σʔλ͕ͳ͍(ۭ഑ྻͱ͔)ɺڥք஋·ΘΓͷ஋ΛಥͬࠐΉ • ʮ1ߦ͍ͬͨ͡Β1ՕॴյΕΔʯΑ͏ʹ͢Δ

  56. Ͳ͏΍ֶͬͯͿ͔ʁ • ຊΛಡ΋͏ʙʙʙʂ • ྫ͑͹ɺʮιϑτ΢ΣΞςετͷٕ๏ʯͰ ղઆ͞Ε͍ͯΔtipsͨͪˠ • ීஈ࢖͍ͬͯΔϥΠϒϥϦͳͲͷ ςετίʔυΛಡΜͰݟΔ

  57. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠🎉
 neͷςετͷʮࢿ࢈ੑ޲্ʯ΍͍͖͍ͬͯͨɾɾʂ
 ͬͯਓ͍ͨͪͨΒࡶஊ͠·͠ΐʂʂʂ