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

チームで取り組みテスト改善のあゆみ

31107eb924f0f352bc3dc4916be5ba59?s=47 negiandleek
September 08, 2021

 チームで取り組みテスト改善のあゆみ

31107eb924f0f352bc3dc4916be5ba59?s=128

negiandleek

September 08, 2021
Tweet

Transcript

  1. νʔϜͰऔΓ૊Ήςετվળͷ ͋ΏΈ 2021.09.08 Wed. Midas Tech Study #2 @negiandlee k

    SmartHR ϓϩμΫτΤϯδχΞ
  2. ࠜ؛ ༐໻ SmartHR ϓϩμΫτΤϯδχΞ ʗSmartHR ຊମʗओʹWebϑϩϯτΤϯυʢReact + TypeScriptʣ • 2020೥9݄SmartHRೖࣾ

    • SmartHRຊମͰݱࡏ͸ओʹ༧໿ػೳͷ։ൃΛߦͳ͍ͬͯΔ • ւ͕޷͖ͳͷͰւ͕͍ۙͱ͜ΖʹҾͬӽͨ͠ @negiandleek
  3. None
  4. લఏ

  5. - νʔϜߏ੒ - ΤϯδχΞ5ਓ - ϑϩϯτΤϯυ1ਓ - όοΫΤϯυ4ਓ - QA1ਓ

    - ։ൃ͸LeSS(εΫϥϜͷେ͖͍൛)ͷϑϩʔʹԊͬͯΔ - εϓϦϯτظؒ͸1िؒ ։ൃମ੎ 🏢
  6. Ұिؒͷ͍͍ͩͨͷྲྀΕ 📅 ਫ ໦ ۚ ݄ Ր ޕલ ੒Ռ෺ͷ ϨϏϡʔ

    ࣮૷ ࣮૷2" 2" ޕޙ ܭը 2"
  7. - SmartHRຊମʹϑϩϯτΤϯυͷνʔϜ͕ൃ଍͞Εͨͷ͕໿Ұ೥લ - όοΫΤϯυଆʹϏδωεϩδοΫ͕ଟ͍ - E2E(RSpec ͱCapybaraͰߏ੒͞Ε͍ͯΔςετ)͸ॻ͔Ε͍ͯΔ - όοΫΤϯυଆͷࣗಈςετ(Controller, Model,

    Request౳)͸݁ ߏॻ͔ΕͯΔ ݱঢ়ͷςετ *ϓϥεΞϓϦͰ͸ϑϩϯτΤϯυͷνʔϜ͸΋ͬͱૣ͔͘Β݁੒͞Ε͍ͯ·͢
  8. - ෼ղ͢Δͱ…? ? - ςετ؍఺(ςετέʔε)ͷચ͍ग़͠ - ςετ࣮ࢪ QAͷλεΫΛ੔ཧ͢Δ

  9. ՝୊

  10. ՝୊ ࣮૷ޙͷQAෛՙ͕ߴ͘ͳΓ͕ͪ😭

  11. - QAͷϦιʔε໰୊ - ։ൃऀ:QA=5: 1 - ݄ͱՐʹQAλεΫ͕ଟ͘ൃੜ͢Δ - ςετઓུ͕ͳ͔ͬͨ -

    ࣗಈςετͱϚχϡΞϧςετͰॏෳͯ͠ΔՕॴ͕͋Δ - ࣗಈςετ͕଍Γͯͳ͍͜ͱ΋ଟʑ ՝୊ͷৄࡉ *νʔϜᴈ໌ظͩͬͨͷͰ՝୊͸΄͔ʹ΋΋Ζ΋Ζ͋ͬͨ…
  12. - QAͷϦιʔε໰୊ - QA͕ࣗಈςετͰԿΛ୲อ͍ͯ͠Δͷ͔஌Βͣʹ͍Δ - QAͷλεΫ͸1िؒͷ͏ͪɺޙ൒ʹ͞ΒʹภΔ - ςετઓུ͕ͳ͔ͬͨ ՝୊ͷ෼ੳ

  13. - QAͷϦιʔε໰୊ - QA͕ࣗಈςετͰԿΛ୲อ͍ͯ͠Δͷ͔஌Βͣʹ͍Δͨ Ίɺςετ࣮ࢪͷ࣌ؒͷख͕ؒ૿͍͑ͯΔ - ͦͷͨΊɺQAͷλεΫ͸1िؒͷ͏ͪɺޙ൒ʹ͞ΒʹภΔ - ςετઓུ͕ͳ͔ͬͨ ՝୊ͷ෼ੳ

    QAͱΤϯδχΞͰ ςετ؍఺ʹ͍ͭͯڞ༗ͨ͠ΒղܾͰ͖ͦ͏🤔
  14. ςετ؍఺ͷચ͍ग़͠ΛQAͱΤϯδχΞͰߦ͏ ←ཁૉͱঢ়ଶΛચ͍ग़ͯ͠ɺ ←ͦΕΒΛ૊Έ߹Θͤͯɺςετ؍఺Λग़͢

  15. ࣗಈςετ΁ͷৼΓ෼͚ΛQAͱΤϯδχΞͰߦ͏ ←ࣗಈςετͰ୲อ͢Δ΋ͷͱɺ ←ϚχϡΞϧςετͰߦ͏΋ͷΛ ɹ͸͖ͬΓͤ͞Δ

  16. ݁Ռ🎉 - ϚχϡΞϧςετͷςετ࣮ࢪΛ࠷খݶͰߦ͑Δ - ςετ؍఺ग़͠ΛQAͱΤϯδχΞͰߦ͍ɺࣗಈςετʹৼΓ෼͚ͯ ͍ΔͷͰ৴པੑ͕ΑΓߴ͘ͳΔ - ΤϯδχΞ͚ͩͰߦ͏ΑΓ΋ɺ҆৺ײ͕͋Δ *QAࢹ఺ͷ͓࿩͸ҎԼͷςοΫϒϩάʹৄ͘͠ॻ͍ͯ͋Γ·͢ https://tech.smarthr.jp/entry/2021/08/27/171310

  17. - QAͷϦιʔε໰୊ - ςετઓུ͕ͳ͔ͬͨ - ΤϯδχΞͱQAͰڞ௨ͷೝࣝΛ࣋ͯͯͳ͍ - ϑϩϯτΤϯυͷUIςετ΋ԿΛ΍Δͷ͔ܾ·ͬͯͳ͔ͬͨ ՝୊ͷ෼ੳ

  18. ςετઓུ͕ඞཁͳͷ͔νʔϜͰ࿩͠߹ͬͨ - ϚχϡΞϧςετͱࣗಈςετͷॏෳΛආ͚Δ - ςετ࣮ࢪͷίετΛݮΒͤΔ - ࣗಈςετΛ৴པੑΛΑΓߴ͍΋ͷʹ͍ͯ͘͠ - ςετํ਑͕໌֬Ͱͳ͍ͱɺςετ؍఺(ςετέʔε)͕ϒϨΔ

  19. ςετઓུ͕ඞཁͳͷ͔νʔϜͰ࿩͠߹ͬͨ - ϚχϡΞϧςετͱࣗಈςετͷॏෳΛආ͚Δ - ςετ࣮ࢪͷίετΛݮΒͤΔ - ࣗಈςετΛ৴པੑΛΑΓߴ͍΋ͷʹ͍ͯ͘͠ - ςετํ਑͕໌֬Ͱͳ͍ͱɺςετ؍఺(ςετέʔε)͕ϒϨΔ

  20. ςετઓུ͕ඞཁͳͷ͔νʔϜͰ࿩͠߹ͬͨ - ϚχϡΞϧςετͱࣗಈςετͷॏෳΛආ͚Δ - ςετ࣮ࢪͷίετΛݮΒͤΔ - ࣗಈςετΛ৴པੑΛΑΓߴ͍΋ͷʹ͍ͯ͘͠ - ςετํ਑͕໌֬Ͱͳ͍ͱɺςετ؍఺(ςετέʔε)͕ϒϨΔ

  21. ςετઓུ͕ඞཁͳͷ͔νʔϜͰ࿩͠߹ͬͨ - ϚχϡΞϧςετͱࣗಈςετͷॏෳΛආ͚Δ - ςετ࣮ࢪͷίετΛݮΒͤΔ - ࣗಈςετΛ৴པੑΛΑΓߴ͍΋ͷʹ͍ͯ͘͠ - ςετํ਑͕໌֬Ͱͳ͍ͱɺςετ؍఺(ςετέʔε)͕ϒϨΔ ೦ͷҝ

    ཧ૝ͱݱঢ়ͷΪϟοϓʹؾͮ͘😭
  22. ݱঢ়ͷςετϐϥϛου - ϑϩϯτΤϯυͷUIςετ͸ϚχϡΞϧςετ ͱE2Eςετ - ςετ؍఺ΛࣗಈςετʹৼΓ෼͚ΔΑ͏ʹͳ Γࣗಈςετͷίετ͕૿͑ͨ Ҿ༻:alisterbscott.com

  23. ݱঢ়ͷςετϐϥϛου - ϑϩϯτΤϯυͷUIςετ͸ϚχϡΞϧςετ ͱE2Eςετ - ςετ؍఺ΛࣗಈςετʹৼΓ෼͚ΔΑ͏ʹͳ Γࣗಈςετͷίετ͕૿͑ͨ Ҿ༻:alisterbscott.com

  24. ݱঢ়ͷςετϐϥϛου - ϑϩϯτΤϯυͷUIςετ͸ϚχϡΞϧςετ ͱE2Eςετ - ςετ؍఺ΛࣗಈςετʹৼΓ෼͚ΔΑ͏ʹͳ Γࣗಈςετͷίετ͕૿͑ͨ Ҿ༻:alisterbscott.com

  25. ཧ૝ͷςετϐϥϛουʹ͚ۙͮΔ - E2EͷίετΛԼ͛ΔͨΊʹɺJest Integration Test Λಋೖͨ͠ - ϖʔδΛؙ͝ͱϨϯμϦϯά͢Δςετ - E2EͱॏͳΔ෦෼΋͋ΔͷͰɺϧʔϧΛ໌֬ʹ

    ͠ɺ࢖͍΍͍͢؀ڥʹͨ͠ Ҿ༻:alisterbscott.com Ҿ༻:testingjavascript.com
  26. Jest Integration Testͷ؀ڥ੔උ - JestͱReact Testing Librar y - MSW(Mock

    Service Worker)ͷಋೖ - Browser/Node྆ํͰ࢖͑Δ - APIͷ࣮૷଴ͪ΋ͳ͘ͳΔͳͲͷϝϦοτ΋͋Δ - એݴతʹఆٛͰ͖ΔͷͰ࢖͍΍͍͢
  27. ϑϩϯτΤϯυςετ +FTU*OUFHSBUJPO5FTU ͷ؀ڥ੔උ ←Node؀ڥ ↓Browser؀ڥ

  28. ϑϩϯτΤϯυςετ +FTU*OUFHSBUJPO5FTU ͷ؀ڥ੔උ ↑Mock αϯϓϧˠ

  29. Jest Integration TestͱE2EͱϚχϡΞϧςετͷͲΕͰ୲ อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND )

    - Jest Integration Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - E2 E - ϚχϡΞϧςετ
  30. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - First Fetch(ϖʔδͷॳճදࣔ)Ͱ׬݁͢Δ΋ͷ͸Jest

    Integration Tes t - ύλʔϯ͕ෳ਺͋Δ৔߹͸ɺϋοϐʔύεΛE2EͰߦ͍ɺ࢒ΓͷόϦΤʔγϣϯ͸Jest Ͱ୲อ͢Δ - Ϣʔβʔૢ࡞͕൐͏͕ɺRequest͕ൃੜ͠ͳ͍΋ͷ͸Jest Integration Tes t - όϦσʔγϣϯ΍ϘλϯͷDisabledଐੑ - Jest Integration Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL) - E2 E - ϚχϡΞϧςετ
  31. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - First Fetch(ϖʔδͷॳճදࣔ)Ͱ׬݁͢Δ΋ͷ͸Jest

    Integration Tes t - ύλʔϯ͕ෳ਺͋Δ৔߹͸ɺϋοϐʔύεΛE2EͰߦ͍ɺ࢒ΓͷόϦΤʔγϣϯ͸Jest Ͱ୲อ͢Δ - Ϣʔβʔૢ࡞͕൐͏͕ɺRequest͕ൃੜ͠ͳ͍΋ͷ͸Jest Integration Tes t - όϦσʔγϣϯ΍ϘλϯͷDisabledଐੑ - Jest Integration Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - E2 E - ϚχϡΞϧςετ
  32. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - First Fetch(ϖʔδͷॳճදࣔ)Ͱ׬݁͢Δ΋ͷ͸Jest

    Integration Tes t - ύλʔϯ͕ෳ਺͋Δ৔߹͸ɺϋοϐʔύεΛE2EͰߦ͍ɺ࢒ΓͷόϦΤʔγϣϯ͸Jest Ͱ୲อ͢Δ - Ϣʔβʔૢ࡞͕൐͏͕ɺRequest͕ൃੜ͠ͳ͍΋ͷ͸Jest Integration Tes t - όϦσʔγϣϯ΍ϘλϯͷDisabledଐੑ - Jest Integration Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - E2 E - ϚχϡΞϧςετ
  33. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - First Fetch(ϖʔδͷॳճදࣔ)Ͱ׬݁͢Δ΋ͷ͸Jest

    Integration Tes t
  34. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - Ϣʔβʔૢ࡞͕൐͏͕ɺRequest͕ൃੜ͠ͳ͍΋ͷ͸Jest Integration

    Tes t
  35. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - Jest Integration

    Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - 400ܥ - E2EͰग़དྷͳ͍΋ͷ(ΠϨΪϡϥʔ͕ଟ͍ͷͰյΕͳ͍͜ͱͷ֬ೝ ) - APIΛୟ͍ͨ࣌ͷRequest BodyͳͲͷΞαʔγϣϯ - ϦϑΝΫλϦϯά౳͢ΔͷͰ͋Ε͹͋ͬͨํ͕҆৺ - E2 E - ϚχϡΞϧςετ
  36. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - Jest Integration

    Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - 400ܥ - E2EͰग़དྷͳ͍΋ͷ(ΠϨΪϡϥʔ͕ଟ͍ͷͰյΕͳ͍͜ͱͷ֬ೝ ) - APIΛୟ͍ͨ࣌ͷRequest BodyͳͲͷΞαʔγϣϯ - ϦϑΝΫλϦϯά౳͢ΔͷͰ͋Ε͹͋ͬͨํ͕҆৺ - E2 E - ϚχϡΞϧςετ
  37. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - Jest Integration

    Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - 400ܥ - E2EͰग़དྷͳ͍΋ͷ(ΠϨΪϡϥʔ͕ଟ͍ͷͰյΕͳ͍͜ͱͷ֬ೝ ) - APIΛୟ͍ͨ࣌ͷRequest BodyͳͲͷΞαʔγϣϯ - ϦϑΝΫλϦϯά౳͢ΔͷͰ͋Ε͹͋ͬͨํ͕҆৺ - E2 E - ϚχϡΞϧςετ
  38. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - 400ܥ

  39. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - APIΛୟ͍ͨ࣌ͷRequest Body΍Query

    ParameterͳͲͷΞαʔγϣϯ
  40. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - Jest Integration

    Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - E2 E - ਖ਼ৗܥ - Mutationܥ(Post, Patch, Delete ) - ੍ޚܥ(ݖݶ΍ೝূͳͲ ) - ϚχϡΞϧςετ
  41. +FTU*OUFHSBUJPO5FTUͱ&&ͱϚχϡΞϧςετͷͲΕͰ୲อ͢Δ͔ϧʔϧΛ໌֬ʹ͢Δ - Jest Integration Test Ͱ΍ͬͨํ͕͍͍ςετ(RECOMMEND ) - Jest Integration

    Test Ͱ͋Δͱخ͍͠ςετ(OPTIONAL ) - E2 E - ϚχϡΞϧςετ - Ұ෦ਖ਼ৗܥͱɺσβΠϯपΓ - ΠϨΪϡϥʔܥ(ෳ਺λϒ)΍όοΫάϥ΢ϯυॲཧͷ݁ՌͳͲ
  42. ݁Ռ🎉 - ϑϩϯτΤϯυͷςετΛ௥Ճͯ͠ςετϐϥϛοτͷॏ৺͕Լ͕ Γɺࣗಈςετͷίετ͕গ͠ݮͬͨ - ςετέʔε͕૿͑ͨɺΑΓ৴པੑ͕ߴ·Δ - ෭࣍తʹόοΫΤϯυͷAPI࣮૷଴͕ͪݮͬͨ

  43. ·ͱΊ

  44. ·ͱΊ🎉 - ҆ఆ࣮ͯ͠૷ʙQA·ͰऴΘΔΑ͏ʹͳͬͨ - ࣗಈςετͷ৴པੑ͕ߴ·Γ҆৺ͯ͠ϑϩϯτΤϯυͷ։ൃ΋Ͱ͖Δ - ࣮૷ʙϦϦʔε·Ͱૣ͘ͳͬͨ - QAͷྗ΋େ͖͍ͷͰڠಇ͍ͯ͘͜͠ͱ͕େ੾ -

    ࣗಈςετͷ৴པੑ΋ߴ·ΓɺϚχϡΞϧςετ΋࠷খݶͰߦ͑Δ
  45. ՝୊ɾ΍͍͖͍ͬͯͨ͜ͱ💪 - ςετ؍఺ग़͔͠ΒɺৼΓ෼͚Δ·Ͱ͔ͳΓ͔͔࣌ؒΔ - QAతͳ͜ͱΛΤϯδχΞ΋΍ΔͷͰɺ࡞ۀ࣌ؒݮΔ - Jest Integration Test͕΄ͱΜͲ଍Γͯͳ͍ -

    ΤϯδχΞશମΛר͖ࠐΜͰ͍͘ඞཁ͕͋Δ
  46. 🙏 https://hello-world.smarthr.co.jp / ϑϩϯτΤϯυΤϯδχΞੵۃ࠾༻த…ʂʂ