Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Webアプリのテスト(Atrae社内勉強会)
Search
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
クラウドエージェントの先駆け Devin。今も最先端を走る、他との違い
kinopeee
1
510
Agent 活用環境の構築・運用のための AWS サービスのご紹介/agentcore-for-building-and-operating-agents
ren8k
1
270
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
2
170
cdk deployとcdkd deploy、実際にデプロイして5倍速近くの差を実測した
yama3133
1
120
Microsoft のサポート ライフサイクルを理解する
murachiakira
PRO
0
230
Don't write the architecture only in the prompt.
neohsu
0
250
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
230
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
4
590
渡米前の準備を制す!re:Invent 2026徹底準備術 / The Ultimate Preparation Guide for re:Invent 2026
yuj1osm
1
410
Flutter Webを「SDK」として配る — 50以上のゲームを支える埋め込みアーキテクチャ
masayukisuda
0
160
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
2
660
日本AIベンチャーレポート2026
kentarofujii
0
260
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
From π to Pie charts
rasagy
1
420
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Designing Experiences People Love
moore
143
24k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
950
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
340
How to Talk to Developers About Accessibility
jct
2
600
The SEO identity crisis: Don't let AI make you average
varn
0
620
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!!