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
110
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
190
Twilioの簡単な説明
ysk1031
1
76
Other Decks in Technology
See All in Technology
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
370
Retriever と Reranker、結局どうする?
kazuaki
1
480
人手不足への挑戦:車両保全を支えるIoTとクラウド内製化の道【SORACOM Discovery 2026】
soracom
PRO
0
160
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
140
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
660
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
440
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
160
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
180
ソフトウェアアーキテクチャ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
2
1k
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
660
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
330
Webの技術とガジェットで子どもも大人も楽しめるワクワク体験を提供する / Qiita Tech Festa Day 2026
you
PRO
1
310
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Building an army of robots
kneath
306
46k
Making Projects Easy
brettharned
120
6.7k
Designing Experiences People Love
moore
143
24k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
400
Embracing the Ebb and Flow
colly
88
5.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
270
Writing Fast Ruby
sferik
630
63k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
190
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
BBQ
matthewcrist
89
10k
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!!