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

3年間考え続けてきたWebアプリケーションにおけるテストの話

5335315769ef28d5b1b2ddbd776cef2d?s=47 ayato
February 15, 2018

 3年間考え続けてきたWebアプリケーションにおけるテストの話

5335315769ef28d5b1b2ddbd776cef2d?s=128

ayato

February 15, 2018
Tweet

Transcript

  1. ೥ؒߟ͑ଓ͚͖ͯͨ 8FCΞϓϦέʔγϣϯ ʹ͓͚Δςετͷ࿩

  2. ͋΍ͽʔ $ZCP[V4UBSUVQT JOD $MPKVSFྺ೥ झຯ&NBDT ݈߁

  3. ࠓ೔ͷ࿩

  4. ͜Μͳ͜ͱ࿩͢Α എܠ ೥ؒ8FCΞϓϦέʔγϣϯΛ࡞͍ͬͯΔ ͦΕͳΓʹࣦഊΛܦݧͨ͠ ಺༰ ೉͍͠Α͘෼͔Βͳ͍ͱࢥͬͨͱ͜Ζͷղܾ ࡦΛڞ༗͍ͨ͠

  5. ஫ҙ ඞͣ͠΋͜Ε͕ϕετͱ͸ࢥ͍ͬͯͳ͍ Իָੑͷҧ͍ͱ͔͋Δͱࢥ͏ 5%%ʹϑΥʔΧεͨ͠࿩͸͠·ͤΜ Ͱ͖ͳ͍  ࢀߟఔ౓ʹฉ͍ͯͶ

  6. $MPKVSF͸ ؔ਺ϓϩάϥϛϯά ͔ͩΒςετ؆୯ͩΑʂ

  7. ςετॻ͘ͷ؆୯ͩΑͶʁ ࢀরಁաੑ΍ෆมੑʹΑΓςετ͕༰қ ७ਮͳؔ਺Λॻ͘ͷͰςετ͕༰қ

  8. (require '[clojure.test :as t]) (defn f [x y] (+ x

    y)) (t/deftest f-test (t/is (= (f 1 2) 3))
  9. (require '[clojure.test :as t]) (defn f [x y] (+ x

    y)) (t/deftest f-test (t/is (= (f 1 2) 3))
  10. ࣮ࡍ͸ʜ ݱ࣮ͷੈքͰ͸֎෦ͷγεςϜͱ࿈ܞ͢Δ ։ൃ࣌ʹςετ͕ಉ͡3&1-ͷ্Ͱ࣮ߦ͞ΕͯࠔΔ 03.͕ͳ͍͔ΒΠϯϝϞϦ%#͸࢖͑ͳ͍ ؔ਺Λࠩ͠ସ͑Α͏ͱ͢Δͱฒྻ࣮ߦͰ͖ͳ͍ ڊେͳσʔλߏ଄ͷൺֱͰۤ࿑͢Δ ೚ҙͷؔ਺͕ظ଴ͨ͠௨Γʹ࣮૷͞Ε͍ͯΔ͔෼͔Βͳ͍ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹ࢖ͬͯۤ࿑͢Δ 3JOHϋϯυϥͷςετ೉͍͠

  11. ࣮ࡍ͸ʜ ݱ࣮ͷੈքͰ͸֎෦ͷγεςϜͱ࿈ܞ͢Δ ։ൃ࣌ʹςετ͕ಉ͡3&1-ͷ্Ͱ࣮ߦ͞ΕͯࠔΔ 03.͕ͳ͍͔ΒΠϯϝϞϦ%#͸࢖͑ͳ͍ ؔ਺Λࠩ͠ସ͑Α͏ͱ͢Δͱฒྻ࣮ߦͰ͖ͳ͍ ڊେͳσʔλߏ଄ͷൺֱͰۤ࿑͢Δ ೚ҙͷؔ਺͕ظ଴ͨ͠௨Γʹ࣮૷͞Ε͍ͯΔ͔෼͔Βͳ͍ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹ࢖ͬͯۤ࿑͢Δ 3JOHϋϯυϥͷςετ೉͍͠ ࢥͬͨΑΓ

    ςετ͸೉͍͠
  12. جຊํ਑

  13. جຊํ਑ DMPKVSFUFTUΛجຊʹߟ͑Δ ϞοΫΑΓϦΞϧؔ਺ ฒྻԽͰ͖ΔΑ͏ʹ࣮૷͢Δ

  14. DMPKVSFUFTUΛجຊʹߟ͑Δ DMPKVSFUFTUͷ্ʹ࡞ΒΕ֦ͨு΍ϓϥάΠϯΛ ར༻͢ΔͨΊ DMPKVSFTQFDͷDMPKVSFUFTUDIFDLͱͷ౷߹ ಠࣗͷςεςΟϯάϑϨʔϜϫʔΫ͸ରԠ଴ ͪʹͳΓ͕ͪ

  15. ϞοΫΑΓϦΞϧؔ਺ ϞοΫΛద੾ʹར༻͢Δͷ͸೉͍͠ ԿΛςετ͍ͨ͠ͷ͔Α͘෼͔Βͳ͍ϞοΫ Λར༻ͨ͠ςετ͕ॻ͔ΕΔ

  16. ฒྻԽͰ͖ΔΑ͏ʹ࣮૷͢Δ ςετ͸Ͳ͏΍ͬͯ΋਺͕૿͑ͯ͘Δ ಈతܕ෇͚ݴޠ͸ςετ͕࣌ؒ໰୊ʹͳΔ
 ܏޲͕͋Δҹ৅ ฒྻԽ͢Δ͔Ͳ͏͔͸ͱ΋͔͘ɺςετͷ࣮ߦ ॱং΍λΠϛϯάͳͲʹΑͬͯյΕͳ͍Α͏ͳ ಠཱͨ͠ςετΛॻ͚ΔΑ͏ʹ͢Δ

  17. ࣮ફฤ

  18. ݱ࣮ੈքʹ͓͚Δ՝୊ ݱ࣮ͷੈքͰ͸֎෦ͷγεςϜͱ࿈ܞ͢Δ ։ൃ࣌ʹςετ͕ಉ͡3&1-ͷ্Ͱ࣮ߦ͞ΕͯࠔΔ 03.͕ͳ͍͔ΒΠϯϝϞϦ%#͸࢖͑ͳ͍ ؔ਺Λࠩ͠ସ͑Α͏ͱ͢Δͱฒྻ࣮ߦͰ͖ͳ͍ ڊେͳσʔλߏ଄ͷൺֱͰۤ࿑͢Δ ೚ҙͷؔ਺͕ظ଴ͨ͠௨Γʹ࣮૷͞Ε͍ͯΔ͔෼͔Βͳ͍ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹ࢖ͬͯۤ࿑͢Δ 3JOHϋϯυϥͷςετ೉͍͠

  19. ݱ࣮ͷੈքͰ͸֎෦ͷ γεςϜͱ࿈ܞ͢Δ

  20. ՝୊ ֎෦γεςϜ͸ςετ࣌ʹ઀ଓͰ͖ͳ͍ͨ͘͠ ͳ͍͜ͱ͕͋Δ ςετͷ౓ʹϝʔϧඈΜͰ͘Δͱ͔ݏͩ ֎෦γεςϜͳͷͰɺ΂͖౳ʹ͢Δͷ͕೉͍͠ ֎෦γεςϜ͕࢖͑ͳ͍ͱ͖ʹςετ͚͜Δͷ ͸ͪΐͬͱʜ

  21. ղܾࡦ $PNQPOFOU΍*OUFHSBOUͱ͍͏ϥΠϑαΠΫϧ ؅ཧ༻ͷϚΠΫϩϑϨʔϜϫʔΫΛར༻͢Δ ޙ͔ΒಥͬࠐΉͷେมͳͷͰɺ࠷ॳ͔Β࢖ͬ ͓͖ͯ·͠ΐ͏ ֎෦γεςϜΛίϯϙʔωϯτԽͯ͠ɺςετ ༻ίϯϙʔωϯτʹࠩ͠ସ͑Δ

  22. ։ൃ࣌ʹςετ͕
 ಉ͡3&1-ͷ্Ͱ
 ࣮ߦ͞ΕͯࠔΔ

  23. ՝୊ ଟ͘ͷϓϩάϥϛϯάݴޠͰ͸ςετ͸
 ผϓϩηεͰ࣮ߦ͞ΕΔ͜ͱ͕ଟ͍ ։ൃதʹςετΛ࣮ߦ͢Δ৔߹ʹ3&1-͔Β
 ςετΛ࣮ߦ͢Δ͜ͱ͕͋Δ 3&1-˺ಉҰ+7.Πϯελϯε ӌᮣʹBMUFSWBSSPPUͱ͔Ͱ͖ͳ͍ ։ൃͱςετͰϦιʔεΛ࢖͍෼͚͍ͨ

  24. ղܾࡦ BMUFSWBSSPPUΛ௚઀࢖Θͳ͍ XJUISFEFGTͳͲΛར༻͢ΔͱͱΓ͋͑ͣ٢ ωʔϜεϖʔεʹϕλͰϦιʔεΛఆٛ͠ͳ͍ $PNQPOFOU΍*OUFHSBOUΛར༻͢Δ͜ͱ NPVOUMJUF͸XJUITFTTJPOͱ͍͏࢓૊Έ༗Γ

  25. 03.͕ͳ͍͔Β ΠϯϝϞϦ%#͸ ࢖͑ͳ͍

  26. ՝୊ 42-Λ௚઀ॻ͔͘ɺΫΤϦϏϧμͰ૊ΈཱͯΔ ςετ࣌ʹΠϯϝϞϦ%#Λར༻͢Δͷ͕೉͍͠ %#ݻ༗ͷػೳͱ͔࢖͍͕ͪ03.͕ٵऩͯ͠ ͘ΕΔࠩҟ͕ٵऩ͞Εͳ͍ ࣮ߦ଎౓͕ؾʹͳΔ͚ͲɺϞοΫͨ͘͠ͳ͍

  27. ղܾࡦ ଎౓͸ฒྻԽͰଟগΧόʔͰ͖Δ ͋Δ͍͸42-ඪ४͚ͩͰ͢΂ͯॻ͘ ͭΒ͍

  28. ؔ਺Λࠩ͠ସ͑Α͏ ͱ͢Δͱ ฒྻ࣮ߦͰ͖ͳ͍

  29. ՝୊ ͍ΘΏΔϞοΫ͍ͨ͠γʔϯ BMUFSWBSSPPU΍XJUISFEFGTΛ࢖͏ͱฒྻͰ ࣮ߦͰ͖ͳ͍

  30. ղܾࡦ 1SPUPDPMΛ࢖࣮ͬͯ૷͓ͯ͘͠ SFJGZΛ࢖࣮ͬͯ૷Λࠩ͠ସ͑ͨΓ͢Δ %VDUͷ#PVOEBSZͷߟ͑ํ TISVCCFSZͱ͍͏ϥΠϒϥϦ͕ྑ͍

  31. ڊେͳσʔλߏ଄ͷ ൺֱͰۤ࿑͢Δ

  32. ՝୊ ಛผͳΫϥεͰ͸ͳ͘Ϛοϓ΍ϕΫλ͚ͩͰ
 σʔλΛදݱ͢Δ Ͳ͏ͯ͠΋ωετͨ͠Γɺཁૉ͕ଟ͘ͳͬͨΓ ͢Δͱൺֱ͕೉͘͠ͳΔ ؔ৺͕͋Δཁૉ͸;ͨͭɺΈͬͭఔ౓ Ͳͷཁૉ͕ҧͬͨͷ͔෼͔Βͳ͍

  33. ղܾࡦ ڵຯ͕͋ΔൣғͷൺֱΛߦ͍͍ͨ GVEKFͱ͍͏ϥΠϒϥϦΛ࢖͏ͱDPNQBUJCMFͱ ͍͏දݱ͕࢖͑Δ σʔλߏ଄ͷͲ͕͜ҧ͔ͬͨ஌Γ͍ͨ GMBSFͱ͍͏ϥΠϒϥϦΛ࢖͏ͱৄ͍͠EJGG͕ ΈΕΔ

  34. ೚ҙͷؔ਺͕ظ଴ͨ͠
 ௨Γʹ࣮૷͞Ε͍ͯΔ͔
 ෼͔Βͳ͍

  35. ՝୊ ΨϕʔδΠϯΨϕʔδΞ΢τʹͳΓ΍͍͢ ೚ҙͷؔ਺Λςετ͍ͯ͠Δͱ͜ΖͰ͸ɺ·ͱ ΋ͳೖग़ྗΛظ଴͢ΔΑ͏ʹςετ͕ॻ͚ͯ΋ɺ ࣮ࡍʹݺͼग़͠ଆͰͲͷΑ͏ͳ஋͕౉͞ΕΔͷ ͔ฦ͞ΕΔͷ͔෼͔Βͳ͍ ύοͱݟ͸ಈ͍͍ͯΔ͚Ͳɺ࣮͸ظ଴ͨ͠ಈ ࡞Ͱ͸ͳ͔ͬͨͱ͍͏ࣄଶ͕ى͜Δ

  36. ղܾࡦ ظ଴͍ͯ͠ΔίτΛDMPKVSFTQFDͰॻ͘ JOTUSVNFOUΛར༻͢Ε͹͋Δఔ౓๷͙͜ͱ͕ Ͱ͖Δ JOTUSVNFOU͸೚ҙͰىಈ͠ͳ͚Ε͹͍͚ͳ͍ͷ Ͱɺςετ࣌ʹඞͣىಈ͞ΕΔΑ͏ʹ͢Δ

  37. DMPKVSFTQFDΛ HFOFSBUJWFUFTUʹ ࢖ͬͯۤ࿑͢Δ

  38. ՝୊ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹར༻͢Δͱ
 σʔλͷੜ੒ͷਫ਼౓͕ྑ͘ͳ͍͜ͱ͕͋Δ ͕͔͔࣌ؒͬͨΓɺσʔλͷੜ੒ʹࣦഊ͢Δ νΣοΫ͢ΔଆͷDMPKVSFTQFD͸៉ྷʹॻ͚ͯ ΋ɺͦΕΛຬͨ͢σʔλͷੜ੒ޮ཰͕ѱ͍ DMPKVSFUFTUDIFDL͕ґଘؔ܎ʹೖͬͯ͘Δ ϓϩμΫγϣϯͰ͸ෆཁ

  39. ղܾࡦ σʔλͷੜ੒ํ๏΋ͪΌΜͱࢦఆ͢Δ TQFDઐ༻ͷωʔϜεϖʔεΛ࡞੒ͯ͠ɺEFWϓ ϩϑΝΠϧͷͱ͖ͷΈར༻͢ΔΑ͏ʹ͢Δ

  40. 3JOHϋϯυϥͷ ςετ͕೉͍͠

  41. ՝୊ 3JOHϋϯυϥ͸ड͚औΔϦΫΤετΛ࠶ݱ͢Δ ͷ͕໘౗ ϦΫΤετϚοϓΛ໛฿͢Δඞཁ͕͋Δ ࣮ࡍʹ͸ϛυϧ΢ΣΞ͕ద༻͞Εͨޙͷ஋

  42. ղܾࡦ ؤுͬͯϛυϧ΢ΣΞΛద༻ͨ͠ޙͷ஋Λ࡞Δ SJOHNPDLͱ͔ద౰ʹ࢖ͬͯ໛฿ ϛυϧ΢ΣΞΛద༻ͨ͠ϋϯυϥΛςετ͢Δ LFSPEPOΛར༻͢Δ एׯςετͷੑ࣭͕ҟͳΔ ϒϥ΢βͷͳ͍ϒϥ΢βςετ

  43. ·ͱΊ

  44. ·ͱΊ ݱ࣮ੈք͸ݫ͍͠ ԿΛॏཁࢹ͢Δ͔ʹΑͬͯɺΞϓϩʔν͸มΘͬ ͯ͘Δ ؤுͬͯςετॻ͖·͠ΐ͏