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
68
Other Decks in Technology
See All in Technology
AIエージェントで90秒の広告動画を制作!台本・音声・映像・編集をつなぐAWS最新アーキテクチャの実践
nasuvitz
3
400
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
190
slog.Handlerのよくある実装ミス
sakiengineer
4
500
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
290
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
510
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
210
20250905_MeetUp_Ito-san_s_presentation.pdf
magicpod
1
100
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
910
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
480
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
470
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/06 - 2025/08
oracle4engineer
PRO
0
120
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
Featured
See All Featured
How to Ace a Technical Interview
jacobian
279
23k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Writing Fast Ruby
sferik
628
62k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Statistics for Hackers
jakevdp
799
220k
Documentation Writing (for coders)
carmenintech
74
5k
Scaling GitHub
holman
463
140k
The World Runs on Bad Software
bkeepers
PRO
70
11k
A Tale of Four Properties
chriscoyier
160
23k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
590
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!!