Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
3年間考え続けてきたWebアプリケーションにおけるテストの話
Search
ayato
February 15, 2018
Programming
3
250
3年間考え続けてきたWebアプリケーションにおけるテストの話
ayato
February 15, 2018
Tweet
Share
More Decks by ayato
See All by ayato
マイクロサービス内で動くAPIをF#で書いている
ayato0211
0
270
Clojureという言語が私逹にもたらしたもの
ayato0211
6
3k
Re:REPL-Driven Development
ayato0211
3
1.3k
Meta Template Engine
ayato0211
2
1.1k
超変換! Hiccup data structure!!
ayato0211
2
590
About Integrant
ayato0211
0
540
Muscle Assert
ayato0211
0
260
Clojureを用いたWebアプリケーション開発
ayato0211
2
3.1k
翻訳にまつわるエトセトラ
ayato0211
6
1.2k
Other Decks in Programming
See All in Programming
Interface vs Types ~型推論が過多推論~
hirokiomote
1
240
XSLTで作るBrainfuck処理系
makki_d
0
140
機械学習って何? 5分で解説頑張ってみる
kuroneko2828
0
180
Passkeys for Java Developers
ynojima
2
780
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
5
510
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
120
Efficiency and Rock 'n’ Roll (Really!)
hollycummins
0
680
PT AI без купюр
v0lka
0
210
〜可視化からアクセス制御まで〜 BigQuery×Looker Studioで コスト管理とデータソース認証制御する方法
cuebic9bic
3
310
Rails産でないDBを Railsに引っ越すHACK - Omotesando.rb #110
lnit
1
150
単体テストの始め方/作り方
toms74209200
0
360
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
2
520
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.6k
The Power of CSS Pseudo Elements
geoffreycrofte
76
5.8k
Done Done
chrislema
184
16k
How GitHub (no longer) Works
holman
314
140k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Making Projects Easy
brettharned
116
6.2k
Practical Orchestrator
shlominoach
188
11k
Site-Speed That Sticks
csswizardry
9
620
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
ؒߟ͑ଓ͚͖ͯͨ 8FCΞϓϦέʔγϣϯ ʹ͓͚Δςετͷ
͋ͽʔ $ZCP[V4UBSUVQT JOD $MPKVSFྺ झຯ&NBDT ݈߁
ࠓͷ
͜Μͳ͜ͱ͢Α എܠ ؒ8FCΞϓϦέʔγϣϯΛ࡞͍ͬͯΔ ͦΕͳΓʹࣦഊΛܦݧͨ͠ ༰ ͍͠Α͔͘Βͳ͍ͱࢥͬͨͱ͜Ζͷղܾ ࡦΛڞ༗͍ͨ͠
ҙ ඞͣ͜͠Ε͕ϕετͱࢥ͍ͬͯͳ͍ Իָੑͷҧ͍ͱ͔͋Δͱࢥ͏ 5%%ʹϑΥʔΧεͨ͠͠·ͤΜ Ͱ͖ͳ͍ ࢀߟఔʹฉ͍ͯͶ
$MPKVSF ؔϓϩάϥϛϯά ͔ͩΒςετ؆୯ͩΑʂ
ςετॻ͘ͷ؆୯ͩΑͶʁ ࢀরಁաੑෆมੑʹΑΓςετ͕༰қ ७ਮͳؔΛॻ͘ͷͰςετ͕༰қ
(require '[clojure.test :as t]) (defn f [x y] (+ x
y)) (t/deftest f-test (t/is (= (f 1 2) 3))
(require '[clojure.test :as t]) (defn f [x y] (+ x
y)) (t/deftest f-test (t/is (= (f 1 2) 3))
࣮ࡍʜ ݱ࣮ͷੈքͰ֎෦ͷγεςϜͱ࿈ܞ͢Δ ։ൃ࣌ʹςετ͕ಉ͡3&1-ͷ্Ͱ࣮ߦ͞ΕͯࠔΔ 03.͕ͳ͍͔ΒΠϯϝϞϦ%#͑ͳ͍ ؔΛࠩ͠ସ͑Α͏ͱ͢Δͱฒྻ࣮ߦͰ͖ͳ͍ ڊେͳσʔλߏͷൺֱͰۤ࿑͢Δ ҙͷ͕ؔظͨ͠௨Γʹ࣮͞Ε͍ͯΔ͔͔Βͳ͍ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹͬͯۤ࿑͢Δ 3JOHϋϯυϥͷςετ͍͠
࣮ࡍʜ ݱ࣮ͷੈքͰ֎෦ͷγεςϜͱ࿈ܞ͢Δ ։ൃ࣌ʹςετ͕ಉ͡3&1-ͷ্Ͱ࣮ߦ͞ΕͯࠔΔ 03.͕ͳ͍͔ΒΠϯϝϞϦ%#͑ͳ͍ ؔΛࠩ͠ସ͑Α͏ͱ͢Δͱฒྻ࣮ߦͰ͖ͳ͍ ڊେͳσʔλߏͷൺֱͰۤ࿑͢Δ ҙͷ͕ؔظͨ͠௨Γʹ࣮͞Ε͍ͯΔ͔͔Βͳ͍ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹͬͯۤ࿑͢Δ 3JOHϋϯυϥͷςετ͍͠ ࢥͬͨΑΓ
ςετ͍͠
جຊํ
جຊํ DMPKVSFUFTUΛجຊʹߟ͑Δ ϞοΫΑΓϦΞϧؔ ฒྻԽͰ͖ΔΑ͏ʹ࣮͢Δ
DMPKVSFUFTUΛجຊʹߟ͑Δ DMPKVSFUFTUͷ্ʹ࡞ΒΕ֦ͨுϓϥάΠϯΛ ར༻͢ΔͨΊ DMPKVSFTQFDͷDMPKVSFUFTUDIFDLͱͷ౷߹ ಠࣗͷςεςΟϯάϑϨʔϜϫʔΫରԠ ͪʹͳΓ͕ͪ
ϞοΫΑΓϦΞϧؔ ϞοΫΛదʹར༻͢Δͷ͍͠ ԿΛςετ͍ͨ͠ͷ͔Α͔͘Βͳ͍ϞοΫ Λར༻ͨ͠ςετ͕ॻ͔ΕΔ
ฒྻԽͰ͖ΔΑ͏ʹ࣮͢Δ ςετͲ͏͕ͬͯ૿͑ͯ͘Δ ಈతܕ͚ݴޠςετ͕࣌ؒʹͳΔ ͕͋Δҹ ฒྻԽ͢Δ͔Ͳ͏͔ͱ͔͘ɺςετͷ࣮ߦ ॱংλΠϛϯάͳͲʹΑͬͯյΕͳ͍Α͏ͳ ಠཱͨ͠ςετΛॻ͚ΔΑ͏ʹ͢Δ
࣮ફฤ
ݱ࣮ੈքʹ͓͚Δ՝ ݱ࣮ͷੈքͰ֎෦ͷγεςϜͱ࿈ܞ͢Δ ։ൃ࣌ʹςετ͕ಉ͡3&1-ͷ্Ͱ࣮ߦ͞ΕͯࠔΔ 03.͕ͳ͍͔ΒΠϯϝϞϦ%#͑ͳ͍ ؔΛࠩ͠ସ͑Α͏ͱ͢Δͱฒྻ࣮ߦͰ͖ͳ͍ ڊେͳσʔλߏͷൺֱͰۤ࿑͢Δ ҙͷ͕ؔظͨ͠௨Γʹ࣮͞Ε͍ͯΔ͔͔Βͳ͍ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹͬͯۤ࿑͢Δ 3JOHϋϯυϥͷςετ͍͠
ݱ࣮ͷੈքͰ֎෦ͷ γεςϜͱ࿈ܞ͢Δ
՝ ֎෦γεςϜςετ࣌ʹଓͰ͖ͳ͍ͨ͘͠ ͳ͍͜ͱ͕͋Δ ςετͷʹϝʔϧඈΜͰ͘Δͱ͔ݏͩ ֎෦γεςϜͳͷͰɺ͖ʹ͢Δͷ͕͍͠ ֎෦γεςϜ͕͑ͳ͍ͱ͖ʹςετ͚͜Δͷ ͪΐͬͱʜ
ղܾࡦ $PNQPOFOU*OUFHSBOUͱ͍͏ϥΠϑαΠΫϧ ཧ༻ͷϚΠΫϩϑϨʔϜϫʔΫΛར༻͢Δ ޙ͔ΒಥͬࠐΉͷେมͳͷͰɺ࠷ॳ͔Βͬ ͓͖ͯ·͠ΐ͏ ֎෦γεςϜΛίϯϙʔωϯτԽͯ͠ɺςετ ༻ίϯϙʔωϯτʹࠩ͠ସ͑Δ
։ൃ࣌ʹςετ͕ ಉ͡3&1-ͷ্Ͱ ࣮ߦ͞ΕͯࠔΔ
՝ ଟ͘ͷϓϩάϥϛϯάݴޠͰςετ ผϓϩηεͰ࣮ߦ͞ΕΔ͜ͱ͕ଟ͍ ։ൃதʹςετΛ࣮ߦ͢Δ߹ʹ3&1-͔Β ςετΛ࣮ߦ͢Δ͜ͱ͕͋Δ 3&1-˺ಉҰ+7.Πϯελϯε ӌᮣʹBMUFSWBSSPPUͱ͔Ͱ͖ͳ͍ ։ൃͱςετͰϦιʔεΛ͍͚͍ͨ
ղܾࡦ BMUFSWBSSPPUΛΘͳ͍ XJUISFEFGTͳͲΛར༻͢ΔͱͱΓ͋͑ͣ٢ ωʔϜεϖʔεʹϕλͰϦιʔεΛఆٛ͠ͳ͍ $PNQPOFOU*OUFHSBOUΛར༻͢Δ͜ͱ NPVOUMJUFXJUITFTTJPOͱ͍͏Έ༗Γ
03.͕ͳ͍͔Β ΠϯϝϞϦ%# ͑ͳ͍
՝ 42-Λॻ͔͘ɺΫΤϦϏϧμͰΈཱͯΔ ςετ࣌ʹΠϯϝϞϦ%#Λར༻͢Δͷ͕͍͠ %#ݻ༗ͷػೳͱ͔͍͕ͪ03.͕ٵऩͯ͠ ͘ΕΔࠩҟ͕ٵऩ͞Εͳ͍ ࣮ߦ͕ؾʹͳΔ͚ͲɺϞοΫͨ͘͠ͳ͍
ղܾࡦ ฒྻԽͰଟগΧόʔͰ͖Δ ͋Δ͍42-ඪ४͚ͩͰͯ͢ॻ͘ ͭΒ͍
ؔΛࠩ͠ସ͑Α͏ ͱ͢Δͱ ฒྻ࣮ߦͰ͖ͳ͍
՝ ͍ΘΏΔϞοΫ͍ͨ͠γʔϯ BMUFSWBSSPPUXJUISFEFGTΛ͏ͱฒྻͰ ࣮ߦͰ͖ͳ͍
ղܾࡦ 1SPUPDPMΛ࣮͓ͬͯͯ͘͠ SFJGZΛ࣮ͬͯΛࠩ͠ସ͑ͨΓ͢Δ %VDUͷ#PVOEBSZͷߟ͑ํ TISVCCFSZͱ͍͏ϥΠϒϥϦ͕ྑ͍
ڊେͳσʔλߏͷ ൺֱͰۤ࿑͢Δ
՝ ಛผͳΫϥεͰͳ͘ϚοϓϕΫλ͚ͩͰ σʔλΛදݱ͢Δ Ͳ͏ͯ͠ωετͨ͠Γɺཁૉ͕ଟ͘ͳͬͨΓ ͢Δͱൺֱ͕͘͠ͳΔ ؔ৺͕͋Δཁૉ;ͨͭɺΈͬͭఔ Ͳͷཁૉ͕ҧͬͨͷ͔͔Βͳ͍
ղܾࡦ ڵຯ͕͋ΔൣғͷൺֱΛߦ͍͍ͨ GVEKFͱ͍͏ϥΠϒϥϦΛ͏ͱDPNQBUJCMFͱ ͍͏දݱ͕͑Δ σʔλߏͷͲ͕͜ҧ͔ͬͨΓ͍ͨ GMBSFͱ͍͏ϥΠϒϥϦΛ͏ͱৄ͍͠EJGG͕ ΈΕΔ
ҙͷ͕ؔظͨ͠ ௨Γʹ࣮͞Ε͍ͯΔ͔ ͔Βͳ͍
՝ ΨϕʔδΠϯΨϕʔδΞτʹͳΓ͍͢ ҙͷؔΛςετ͍ͯ͠Δͱ͜ΖͰɺ·ͱ ͳೖग़ྗΛظ͢ΔΑ͏ʹςετ͕ॻ͚ͯɺ ࣮ࡍʹݺͼग़͠ଆͰͲͷΑ͏ͳ͕͞ΕΔͷ ͔ฦ͞ΕΔͷ͔͔Βͳ͍ ύοͱݟಈ͍͍ͯΔ͚Ͳɺ࣮ظͨ͠ಈ ࡞Ͱͳ͔ͬͨͱ͍͏ࣄଶ͕ى͜Δ
ղܾࡦ ظ͍ͯ͠ΔίτΛDMPKVSFTQFDͰॻ͘ JOTUSVNFOUΛར༻͢Ε͋Δఔ͙͜ͱ͕ Ͱ͖Δ JOTUSVNFOUҙͰىಈ͠ͳ͚Ε͍͚ͳ͍ͷ Ͱɺςετ࣌ʹඞͣىಈ͞ΕΔΑ͏ʹ͢Δ
DMPKVSFTQFDΛ HFOFSBUJWFUFTUʹ ͬͯۤ࿑͢Δ
՝ DMPKVSFTQFDΛHFOFSBUJWFUFTUʹར༻͢Δͱ σʔλͷੜͷਫ਼͕ྑ͘ͳ͍͜ͱ͕͋Δ ͕͔͔࣌ؒͬͨΓɺσʔλͷੜʹࣦഊ͢Δ νΣοΫ͢ΔଆͷDMPKVSFTQFD៉ྷʹॻ͚ͯ ɺͦΕΛຬͨ͢σʔλͷੜޮ͕ѱ͍ DMPKVSFUFTUDIFDL͕ґଘؔʹೖͬͯ͘Δ ϓϩμΫγϣϯͰෆཁ
ղܾࡦ σʔλͷੜํ๏ͪΌΜͱࢦఆ͢Δ TQFDઐ༻ͷωʔϜεϖʔεΛ࡞ͯ͠ɺEFWϓ ϩϑΝΠϧͷͱ͖ͷΈར༻͢ΔΑ͏ʹ͢Δ
3JOHϋϯυϥͷ ςετ͕͍͠
՝ 3JOHϋϯυϥड͚औΔϦΫΤετΛ࠶ݱ͢Δ ͷ͕໘ ϦΫΤετϚοϓΛ฿͢Δඞཁ͕͋Δ ࣮ࡍʹϛυϧΣΞ͕ద༻͞Εͨޙͷ
ղܾࡦ ؤுͬͯϛυϧΣΞΛద༻ͨ͠ޙͷΛ࡞Δ SJOHNPDLͱ͔దʹͬͯ฿ ϛυϧΣΞΛద༻ͨ͠ϋϯυϥΛςετ͢Δ LFSPEPOΛར༻͢Δ एׯςετͷੑ࣭͕ҟͳΔ ϒϥβͷͳ͍ϒϥβςετ
·ͱΊ
·ͱΊ ݱ࣮ੈքݫ͍͠ ԿΛॏཁࢹ͢Δ͔ʹΑͬͯɺΞϓϩʔνมΘͬ ͯ͘Δ ؤுͬͯςετॻ͖·͠ΐ͏