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
Webアプリのテスト(Atrae社内勉強会)
Search
Yusuke AONO
June 01, 2015
Technology
1
110
Webアプリのテスト(Atrae社内勉強会)
Yusuke AONO
June 01, 2015
Tweet
Share
More Decks by Yusuke AONO
See All by Yusuke AONO
Golangの紹介(基礎)
ysk1031
0
170
Twilioの簡単な説明
ysk1031
1
67
Other Decks in Technology
See All in Technology
Delegating the chores of authenticating users to Keycloak
ahus1
0
190
公開初日に Gemini CLI を試した話や FFmpeg と組み合わせてみた話など / Gemini CLI 初学者勉強会(#AI道場)
you
PRO
0
1.5k
SRE with AI:実践から学ぶ、運用課題解決と未来への展望
yoshiiryo1
0
390
スタックチャン家庭用アシスタントへの道
kanekoh
0
130
How Do I Contact Jetblue Airlines® Reservation Number: Fast Support Guide
thejetblueairhelpsupport
0
150
RapidPen: AIエージェントによる高度なペネトレーションテスト自動化の研究開発
laysakura
1
230
20250718_ITSurf_“Bet AI”を支える文化とコストマネジメント
helosshi
0
110
Talk to Someone At Delta Airlines™️ USA Contact Numbers
travelcarecenter
0
160
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
560
Amazon SNSサブスクリプションの誤解除を防ぐ
y_sakata
3
190
本当にわかりやすいAIエージェント入門
segavvy
5
3.2k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
820
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1031
460k
Facilitating Awesome Meetings
lara
54
6.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
840
Producing Creativity
orderedlist
PRO
346
40k
Practical Orchestrator
shlominoach
189
11k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
For a Future-Friendly Web
brad_frost
179
9.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Gamification - CAS2011
davidbonilla
81
5.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Transcript
WebΞϓϦͷςετ 2015/06/01 Yusuke Aono
ςετͱ • ΞϓϦέʔγϣϯ։ൃʹ͓͍ͯɺࣗͷॻ͍ͨίʔ υ͕ҙਤͨ͠௨Γʹಈ͍ͯΔ͔ɺ֬ೝ͢Δ͜ͱ • ͬ͘͟Γ͚ͯ2छྨ • ࣗಈςετ = ʮςετΛॻ͘ʯ͜ͱͰࣗಈԽ
• खಈςετ
खಈςετطʹͬͯΔͷ Ͱɺࣗಈςετͷ͠·͢
ࣗಈςετࢧԉπʔϧʢϑϨʔ ϜϫʔΫʣfor Ruby • RSpec • Test::Unit • Minitest ͳͲͳͲ৭ʑ͋Δ
ςετίʔυΛॻ͘ͱ… • ΞϓϦέʔγϣϯଆͰॻ͍͍ͯΔίʔυͷʮ࣭ʯ͕͔ΔΑ͏ʹͳ Δ • ͔Δ͜ͱ͕େࣄ • ʮϓϩάϥϜʹظ͢Δ͜ͱʯΛॻ͍͍ͯ͘Θ͚ͳͷͰɺ֘͢Δ෦ ͷϓϩάϥϜ͕কདྷյΕͨΒڭ͑ͯ͘ΕΔʢCIͯ͠Εʣ •
ϑϨʔϜϫʔΫʢex. RailsʣͷΞοϓσʔτʹै͍͢͠ • ҙ: ࣗಈςετۜͷؙͰͳ͍ɺςετॻ͍͔ͨΒͱ͍ͬͯόά ͕શ͘ग़ͳ͍Θ͚Ͱͳ͍
։ൃ with ࣗಈςετ ͷਐΊํͷྫ
TDDʢςετۦಈ։ൃʣ • ςετϑΝʔετʢ= ςετΛ࠷ॳʹॻ͘ʣʹ جͮ͘։ൃख๏ • 1980͔Β͋ΔࢥΒ͍͠ • Webۀքʹ͓͍ͯɺTDDΛฉ͘Α͏ʹͳͬͨ ͷ͜͜4,
5ʁʁ
TDDͷਐΊํ 1. ඪʢ࡞Γ͍ͨػೳͷ༷ɺظ͢Δ݁ՌʣΛߟ͑Δ 2. ͦͷඪΛࣔ͢ςετΛॻ͘ 3. ςετΛ࣮ߦࣦ͠ഊͤ͞Δ (RED) 4. తͷίʔυΛॻ͘
5. 2Ͱॻ͍ͨςετΛޭͤ͞Δ (GREEN) 6. ςετΛޭঢ়ଶʹͨ͠··ϦϑΝΫλϦϯά͢Δ 7. 1 ~ 6Λ܁Γฦ͢
Test Yourself - ςετΛॻ͘ͱԿ͕Ͳ͏มΘΔ͔ http://www.slideshare.net/t_wada/jasst-2014- hokkaidotwadatdd
TDDͷతͱޮՌ • ܰշͳϑΟʔυόοΫͷ֬อ͕Ͱ͖Δ • ಈ࡞͢Δ៉ྷͳίʔυ͕֬อͰ͖ɺॻ͍ͨίʔυʹࣗ ৴͕࣋ͯΔɾָ͘͠ͳΔ • ։ൃվળࣄྫ: ࣮ߦΛ15ˋ~25ˋ૿Ճͤ͞ΔΘ Γʹɺܽؕີ͕4ׂ~9ׂԼ
=> σόοάखΓ ͕ݮগɺτʔλϧͷ૯Λݮ ( http:// 131.107.65.14/en-us/groups/ese/nagappan_tdd.pdf )
BDDʢৼΔ͍ۦಈ։ൃʣ • TDD͔Βੜͨ͠ςετϑΝʔετख๏ • ςετΛʮৼʯʢػೳతͳ֎෦༷ / Πϯ λʔϑΣʔεʣͷهड़ʹಛԽ • Ϣʔβʔͷૢ࡞ͳͲߴϨΠϠʔͷςετ
ৼΔ͍ʢBehavierʣ • ίʔυϨϕϧͷৼΔ͍ • ModelControllerͷϝιου1ͭʢ͋Δ͍ͦͷΈ߹Θͤʣ • ୯ମςετ (unit test) Ͱςετ
• ϢʔβʔϨϕϧͷৼΔ͍ • ϑΥʔϜʹೖྗͯ͠submitͯ͠…ͱ͍ͬͨϢʔβʔཁٻɺ֎෦ APIͷڍಈ • ݁߹ςετ (integration test) Ͱςετ
RSpec • RubyͰBDDΛߦ͏ςεςΟϯάϑϨʔϜϫʔΫ ͱͯ͠ɺελϯμʔυʹͳ͍ͬͯΔ • ҎԼͷ༷ͳϝϦοτ͕͋ΔͱݴΘΕ͍ͯΔ • ίʔυ͕ݟ͍͢ • ༰ͷཧղ͍͢͠υΩϡϝϯςʔγϣϯΛ࡞
Γ͍͢
RSpecͷه๏ͷ֓ཁ
جຊతͳه๏ • ʮ࢛ଇԋࢉʯͷʮ1 + 1 2 ʹͳΔʯͱ͍͏ৼΔ͍Λςετ • describe
ͰςετΛάϧʔϓԽ • it ͰςετΛexampleͱ͍͏୯Ґʹ·ͱΊɺͦͷதʹ࣮ࡍͷςετ ༰Λॻ͍͍ͯ͘
ΤΫεϖΫςʔγϣϯ • ظͱ࣮ࡍͷͷൺֱΛߦ͏ • expect(X).to eq Y • = ʮX͕Yʹ͘͠ͳΔ͜ͱΛظ͢Δʯ
• ‘eq’ ͷ෦ΛϚονϟͱ͍͏ (eq Ҏ֎ʹ৭ʑ͋Δɺ be_validͱ͔includeͱ͔ʣ • it ͷதͷΤΫεϖΫςʔγϣϯ͕શͯύε͢Εɺͦͷ exampleશମΛύεͨ͜͠ͱʹͳΔ
RailsϓϩδΣΫτʹ͓͚Δ ςετͷछྨ • ୯ମςετ (unit test) • ϞσϧεϖοΫ • ίϯτϩʔϥεϖοΫ
• ݁߹ςετ (integration test) • ϑΟʔνϟεϖοΫ etc.
୯ମʢunitʣςετͷॻ͖ํ • ςετରঢ়ଶΛ࣋ͪɺೖྗΛ༩͑ͨΒԿΒ͔ͷग़ྗΛ͢ ΔͷʢΦϒδΣΫτʣ • ೖྗ͕มΘΕग़ྗ͕มԽ͠ɺঢ়ଶ͕มΘͬͨΒೖྗ͕ಉ͡ Ͱग़ྗมΘΔʢ͔ʣ • Ϣχοτςετɺςετରͷঢ়ଶΛૢ࡞͠ɺ༩͑ͨೖྗ ʹΑͬͯҙਤ௨Γͷग़ྗ͕ಘΒΕΔ͔Λ֬ೝ͢Δ࡞ۀ
• ϢχοτςετΛॻ࣌͘ɺΦϒδΣΫτͷঢ়ଶ͝ͱʹϝιο υ୯ҐͰೖྗͱग़ྗΛ֬ೝ͢ΔΑ͏ʹ͢Δ ࢀߟ: RSpecʹΑΔϢχοτςετͷॻ͖ํ https://recompile.net/posts/how-to- write-unit-test-with-rspec.html
୯ମςετ1 - ϞσϧεϖοΫ • ʢͪΌΜͱMVCΛҙࣝͯ͠ॻ͍ͯΕͱ͍͏લ ఏʣϞσϧͷςετΛߦ͑ɺRailsΞϓϦͷί Ξ෦Λςετ͢Δ͜ͱʹͳΔ • ςετͷதͰͱͳΔ෦ɺίʔυϨϕϧ શମͷ৴པੑΛߴΊΔୈҰา
• ϞσϧεϖοΫ͡Ίɺ୯ମςετॻ͖͍͢
؆୯ͳϞσϧεϖοΫͷྫ1 ରͷϞσϧ: app/models/contact.rb ϞσϧͷόϦσʔγϣϯΛςετ͢Δͧʂʂ̍
؆୯ͳϞσϧεϖοΫͷྫ1 ςετ: spec/models/contact_spec.rb
؆୯ͳϞσϧεϖοΫͷྫ2 ରͷϞσϧ: app/models/contact.rb ΠϯελϯεϝιουΛςετ͢Δͧʂʂ̍
؆୯ͳϞσϧεϖοΫͷྫ2 ςετ: spec/models/contact_spec.rb
υΩϡϝϯςʔγϣϯͱͯ͠ݟ ͍͢ • -fd ΦϓγϣϯΛ͚ͯ rspec ίϚϯυΛ࣮ߦ͢Δͱɺग़ྗ͕ ςετରͷ༷ʹͳΔʢͪΌΜͱॻ͍͍ͯΕʣ
ϞσϧͷόϦσʔγϣϯͷς ετ͍͍ͪͪॻ͘ͷɺ͕͢͞ ʹΊΜͲ͘Ͷ…ʁʁ
͓Εͦ͏ࢥ͏…
༷Λߟ͑ͳ͕ΒςετΛॻ͘ • ҎԼɺཧ • ςετϑΝʔετͰ͋ΕɺଟগΊΜͲ͘ײ͡ͳ͍͔ • ʢ͜Ε͔Βॻ͍͍ͯ͘৽نͷίʔυʹݶఆͨ͠ʣࠓ· Ͱ༷ΛจষͰϝϞͬͯͨͱࢥ͏͕ɺͦΕΛςετίʔυ ʹམͱͤྑ͍Μ͡Όͳ͍ͩΖ͏͔ •
͜͏͍͏جຊతͳςετΛॻ͍ͨঢ়ଶΛݟͯΒ͏ͱɺ ϨϏϡʔ࣌ʹϨϏϡΞʔ༷͕Θ͔Γͦ͢͏
୯ମςετ2 - ίϯτϩʔϥεϖοΫ • ϞσϧͱൺΔͱɺॻ͖͘ͳͷ͔͕͔ٞΕΔ෦ • ͪΌΜͱॻ͍ͯΕɺίϯτϩʔϥͷ࣮ബ͍ͣͳͷͰ… • ʢޙड़͢ΔʣϑΟʔνϟεϖοΫΛॻ͚ɺෳͷίϯτϩʔ ϥΛॻ͍ͨ͜ͱʹͳΔ
• ϩδοΫ͕FatʹͳͬͯΔΞΫγϣϯɺAPI༻ͷΞΫγϣϯͱ͔ʹ ݶఆͯ͠ྑ͍͔͠Εͳ͍… • ϑΟʔνϟεϖοΫΑΓ͕ૣ͍ͱ͍͏ͷར
؆୯ͳίϯτϩʔϥεϖοΫྫ ςετ: spec/controllers/ contact_controller_ spec.rb
؆୯ͳίϯτϩʔϥεϖοΫྫ ͍͕ͭ͜ςετͷର
݁߹ςετ - ϑΟʔνϟεϖο Ϋ • ϢʔβʔͷৼΔ͍Λهड़ • ͨ͘͞Μͷ෦Λ౷߹ͨ͠ঢ়ଶͰͷςετ • ͪΌΜͱॻ͚ɺϒϥβϙνϙνͯ֬͠ೝ
͢Δճ͕ܶతʹݮΔ • JavaScriptͳͲ͕ೖͬͯ͘Δͱɺқˢ
Capybara • ϑΟʔνϟεϖοΫΛॻ͘ࡍʹΑ͘ΘΕΔ • جຊతʹRSpecͱಉ༷ͷॻ͖ํ • όοΫάϥϯυͰϒϥβૢ࡞ • Launchy ͑ɺϒϥβΛىಈͯ͠γϛϡϨʔτ
͜Μͳײ͡Ͱ͢
Capybaraͷ ϝϦοτɾσϝϦοτ • Ϣʔβʔ͕࣮ࡍʹݟ͍ͯΔϖʔδΛͦͷ··ςετ Ͱ͖Δ • ͕ɺ࣮ߦ͕͍࣌ؒ • JSϦονͳϖʔδͩͱɺ࠶ݱ͕݁ߏπϥ͍ •
͋ͷDOMཁૉ͕ग़ͯ͘Δ·Ͱ2ඵͭɺΈ͍ͨͳ ϋοΫ͕ඞཁ…
ςετͷ࡞͍͖͔ͬͯͨ • 2ύλʔϯ͋Δ • ΠϯαΠυΞτʢ୯ମ => ౷߹ʣ • Ϟσϧͷ1ϝιουͷςετͷΑ͏ͳখ͞ͳίϯϙʔωϯτΛ࡞Γɺ ͦΕΛੵΈ্͛ͳ͕Βઃܭ͍ͯ͘͠
• શମײ͔ͭΈʹ͍͘ • ΞταΠυΠϯʢ౷߹ => ୯ମʣ • Ϣʔβʔ͕ʹ͢Δʮ֎ଆʯͷৼΔ͍ΛςετͰهड़ɺͦͷ͋ͱݸʑ ͷίϯϙʔωϯτΛ࣮ • ։ൃ͠ͳ͕Βཁٻ͕ͲΜͲΜมΘͬͯ͘ڥͩͱΓʹ͍͔͘…
ྫ͑ • ྫ͑prottͰͷϓϩτλΠϓͷΈ͕Ͱ͖͍ͯΔঢ়ଶ Ͱ։ൃελʔτͨ͠ͱ͢Δ • ʮ͜͜Ͱ͜͏ͳͬͯɺ͜͜Λԡ͢ͱ͜͏ͳΔʯΈͨ ͍ͳͷ͔ΔҰํͰɺ۩ମతͳHTML·ͩͳ͍ • த͕ۭͷϑΟʔνϟʔεϖοΫ͚ͩॻ͍͓͍ͯͯɺ ϢχοτςετʢͱϞσϧɾίϯτϩʔϥʣ࣮ɺ
σβΠϯ·ͰؚΊͯͨ͠Βதॻ͘ʁʁ
͍ͬͨΜ·ͱΊ • ؆୯ͳςετʢRSpecʣͷઆ໌Λ͠·ͨ͠ • ςετ্࣭ͷ͖͔͚ͬʹͳΔ • ୯ମςετɾ݁߹ςετ • ͲͷछྨΛͲ͏ͬͯʢͲ͏͍͏ॱ൪Ͱʣॻ ͍ͯ͘ͷ͔ʁɺٞͷਚ͖ͳ͍ͱ͜Ζ
ςετܧଓతʹ࣮ߦ͞Εͳ ͚Εʢύε͠ଓ͚ͳ͚Εʣ ҙຯ͕ແ͍
CIʢܧଓతΠϯςάϨʔγϣϯʣ • ʢڱٛʣΞϓϦͷϏϧυɾςετΛܧଓతʹ ࣮ߦ͍ͯ͘͜͠ͱ • ΞϓϦͷঢ়ଶͱ͍͏ͷຖมΘΔɻςετ Λܧଓతʹߦ͏͜ͱͰɺ࣭ͷԼσάϨ ͕ى͖͍ͯΔ͜ͱΛΩϟονͰ͖Δͧɺͱ͍ ͏
CIΛߦ͏ڥ • ΦϯϓϨϛε • Jenkins • CI as a Service
• CircleCI • TravisCI • wercker
ςετॻ͍ͯΔձࣾɺCI ͨΓલʹͬͯΔ • ུ
TalentBaseͷྫ • CircleCIΛར༻ • git push ͢ΔʹCI͕࣮ߦ͞ΕΔ • ςετεΩοϓ͔ͨͬͨ͠Βɺίϛοτϝοηʔδʹ [ci
skip] ͱॻ͘ • ಛఆͷϒϥϯνʹpushͯ͠ςετ͕௨ΔͱɺࣗಈͰ σϓϩΠ࣮ߦ (staging) ·Ͱͬͯ͘ΕΔ
CI͋ͬͯͷɺ։ൃ with ςετ
ݱ࣮ʹΖ͏
ʮςετΛͲ͜·Ͱॻ͔͘ʯ
ςετͲ͜·Ͱॻ͔͘ • ք۾ͷΤϯδχΞͷؒͰ1ʹ1ճ͘Β͍ʹ ͳͬͯΔʢؾ͕͢Δʣ • ͦͯ͠໌֬ͳͳ͍ • ʮॻ͍ͨ΄͏͕ྑ͍ʯͷΈΜͳղͬͯΔ • େମɺ݁ͱͯ͠ʮίετͱޮՌΛݟۃΊ͍ͯ
͍۩߹ʹॻ͜͏ʂʯͬͯͳͬͯऴΘΔ
Θ͔ΒΜ…
ରͱ͢ΔϓϩμΫτͷঢ়ଶʁ લఏ͕ҟͳΔͱɺಉ͡ձࣾͷϓϩμΫτͰ ͕มΘͬͯ͘Δ… • ण໋͕͍ͷ͔ʁ • ϝϯόʔ͕ͪΐͪ͘ΐ͘มΘΔͷ͔ʁ • ՁΛੜΈग़͍ͯ͠Δͷ͔ʁ
ςετͰԿΛอূ͍ͨ͠ʁ • ։ൃޮΛ্͍͛ͨͷ͔ʁ • ࣭Λอূ͢ΔϨϕϧ·Ͱࢦ͍͖͍ͯͨ͠ ͷ͔ • ྫ͑ɺ՝࣮ۚͱ͔ೝূ͕͋ͬͨΒઈରʹ ϛεΕͳ͍ ΞΫηϧΛ౿ΉͨΊͷςετͱϒϨʔΩΛ౿ΉͨΊͷςετ
/ http:// yoshiori.github.io/blog/2014/01/14/drive-a-go-go/
όϥϯε͕େࣄʢ݁ہ͆ʣ • ιϑτΣΞͱ͍͏ͷɺಈ͍ͯφϯϘɺ ΘΕͯφϯϘ • ʮಈ͚͍͍ʯѱ͕ͩɺʮςετͷΧόʔ 100%ʯ͕ͦͷٯɺͱ͍͏ͷؒҧ͍ͩͱࢥ ͏
͍…
ಋೖ͍ͯ͘͠ํ๏ by t_wada ͞Μͷࢿྉ
Ͳ͔͜ΒΔ͔ • ʮԿ͕Ұ൪͍ʁʯ • ͬͱࠔͬͯΔͱ͜Ζ͔Βॻ͘ • ͓ۚɺݸਓใ… • ৽ػೳ։ൃ͔Β •
όάमਖ਼ͷͱ͜Ζ͔Β
ͩ͜ΘΔͳ • ࠷ॳ͔Βશ෦Ζ͏ͱ͠ͳ͍ • ςετۦಈʢϑΝʔετʣʹͩ͜ΘΔͳ • ςετͷ͞ʹͩ͜ΘΔͳ • ςετͷཏੑʹͩ͜ΘΔͳ
ͩ͜ΘΖ͏ • ࠶ݱੑɾ܁Γฦ͠Մೳͳͷ • ಠཱ͍ͯ͠Δ͜ͱ
ͱʹ͔͘αϯϓϧ • ਅࣅͯ͠Β͏࡞Γ • ࠷ॳαϯϓϧͷίϐϖͰྑ͍ • ςετͷ͋Δੜ׆Λମݧ͢Δͷ͕େࣄ • ׳Ε͖ͯͨΒςετͷϝϯςφϯε •
͋ͱ͜ΕΛಡΊ • ςετΛॻ͘จԽΛҭͯΔઓུͱઓज़ http:// www.slideshare.net/t_wada/devlove-testing-culture
ͿͬͪΌ͚ΊΜͲ͍͚Ͳɺ όάͰ؊ྫྷ͢ճ࣮֬ʹ ݮΔͩΖ͏͠ɺ৽͍͠Rails ͍͍ͨ͠ɺؤுΖ͏
Thank you!!