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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yusuke AONO
June 01, 2015
Technology
120
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Webアプリのテスト(Atrae社内勉強会)
Yusuke AONO
June 01, 2015
More Decks by Yusuke AONO
See All by Yusuke AONO
Golangの紹介(基礎)
ysk1031
0
200
Twilioの簡単な説明
ysk1031
1
78
Other Decks in Technology
See All in Technology
人気商品が「ちゃんと買える」をつくる ー ECの負荷改善
ykagano
1
170
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
1
560
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
430
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
9
1.7k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
12
9.4k
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
17
17k
いかに伝えるか 〜新卒エンジニアの教育のための、ライトノベル活用の一例
ikedon
1
140
Claude Teamプランの コスト最適化を考える
rfdnxbro
2
860
AI × Datadog MCP でコスト削減まで実現した Metric Streams の導入
three_mouth_ago
0
140
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
360
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Facilitating Awesome Meetings
lara
57
7.1k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
510
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
A better future with KSS
kneath
240
18k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
The Art of Programming - Codeland 2020
erikaheidi
57
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
GraphQLとの向き合い方2022年版
quramy
50
15k
Utilizing Notion as your number one productivity tool
mfonobong
4
560
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!!