$30 off During Our Annual Pro Sale. View Details »

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

ayato
February 15, 2018

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

ayato

February 15, 2018
Tweet

More Decks by ayato

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. ࠓ೔ͷ࿩

    View Slide

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

    View Slide

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

    ࢀߟఔ౓ʹฉ͍ͯͶ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. جຊํ਑

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. ฒྻԽͰ͖ΔΑ͏ʹ࣮૷͢Δ
    ςετ͸Ͳ͏΍ͬͯ΋਺͕૿͑ͯ͘Δ
    ಈతܕ෇͚ݴޠ͸ςετ͕࣌ؒ໰୊ʹͳΔ

    ܏޲͕͋Δҹ৅
    ฒྻԽ͢Δ͔Ͳ͏͔͸ͱ΋͔͘ɺςετͷ࣮ߦ
    ॱং΍λΠϛϯάͳͲʹΑͬͯյΕͳ͍Α͏ͳ
    ಠཱͨ͠ςετΛॻ͚ΔΑ͏ʹ͢Δ

    View Slide

  17. ࣮ફฤ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. ։ൃ࣌ʹςετ͕

    ಉ͡3&1-ͷ্Ͱ

    ࣮ߦ͞ΕͯࠔΔ

    View Slide

  23. ՝୊
    ଟ͘ͷϓϩάϥϛϯάݴޠͰ͸ςετ͸

    ผϓϩηεͰ࣮ߦ͞ΕΔ͜ͱ͕ଟ͍
    ։ൃதʹςετΛ࣮ߦ͢Δ৔߹ʹ3&1-͔Β

    ςετΛ࣮ߦ͢Δ͜ͱ͕͋Δ
    3&1-˺ಉҰ+7.Πϯελϯε
    ӌᮣʹBMUFSWBSSPPUͱ͔Ͱ͖ͳ͍
    ։ൃͱςετͰϦιʔεΛ࢖͍෼͚͍ͨ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. ՝୊
    ಛผͳΫϥεͰ͸ͳ͘Ϛοϓ΍ϕΫλ͚ͩͰ

    σʔλΛදݱ͢Δ
    Ͳ͏ͯ͠΋ωετͨ͠Γɺཁૉ͕ଟ͘ͳͬͨΓ
    ͢Δͱൺֱ͕೉͘͠ͳΔ
    ؔ৺͕͋Δཁૉ͸;ͨͭɺΈͬͭఔ౓
    Ͳͷཁૉ͕ҧͬͨͷ͔෼͔Βͳ͍

    View Slide

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

    View Slide

  34. ೚ҙͷؔ਺͕ظ଴ͨ͠

    ௨Γʹ࣮૷͞Ε͍ͯΔ͔

    ෼͔Βͳ͍

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. ՝୊
    DMPKVSFTQFDΛHFOFSBUJWFUFTUʹར༻͢Δͱ

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  43. ·ͱΊ

    View Slide

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

    View Slide