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
アジャイル開発のテスト -自動化でしょうか。いいえ、戦略勝ちです。-
Search
kyonmm
PRO
September 10, 2016
Technology
4.5k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アジャイル開発のテスト -自動化でしょうか。いいえ、戦略勝ちです。-
Hacker Tackle 2016で講演したアジャイルテストにおけるアンチパターンをまとめたものです。個人の見解です。
kyonmm
PRO
September 10, 2016
More Decks by kyonmm
See All by kyonmm
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
2.4k
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
1.2k
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
4
2k
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
5
4k
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
720
IT子会社のグローバルトレンド #scrumsendai / Global Trends in IT Subsidiaries
kyonmm
PRO
3
1.6k
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
350
AI時代における変革の入口-100年後も語られる25年のために- #scrumosaka / The entry point to transformation in the AI era For 25 years that will be talked about 100 years from now
kyonmm
PRO
6
2.2k
地方中小企業のエンジニアから大企業の執行役員になるまで #phpcon_niigata / road to executive
kyonmm
PRO
7
15k
Other Decks in Technology
See All in Technology
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
930
41歳でAWSが好きすぎてITエンジニアになったおっさんの話
yama3133
0
420
Vポイント分析基盤におけるデータモデリング20年史
taromatsui_cccmkhd
2
180
GoでCコンパイラを作った話
repunit
0
140
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
260
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
シンガポールで登壇してきます
yama3133
0
260
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
13
8.8k
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.5k
データエンジニアリングとドメイン駆動設計
masuda220
PRO
7
1.1k
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.2k
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
130
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
Thoughts on Productivity
jonyablonski
76
5.2k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
A Modern Web Designer's Workflow
chriscoyier
698
190k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Claude Code のすすめ
schroneko
67
230k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Color Theory Basics | Prateek | Gurzu
gurzu
0
390
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Transcript
ΞδϟΠϧ։ൃͷςετ -ࣗಈԽͰ͠ΐ͏͔ɻ͍͍͑ɺઓུউͪͰ͢ɻ- kyon_mm in HACKER TACKLE 2016/09/10
Self Introduction • ͖ΐΜ kyon_mm @ גࣜձࣾΦϯβϩʔυ • ςετΞʔΩςΫτɺεΫϥϜɺڭҭ •
Groovy, F#, C# • TDD/BDDΤΩεύʔτ
Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯͷର ࡦ • ؆୯ͳ·ͱΊ • QA
/ Discussion
kyon_mm ͷഎܠ • डୗΞδϟΠϧ։ൃ 4ਓνʔϜ • .NET ܥͷϑϨʔϜϫʔΫɺϥΠϒϥϦ։ൃ͕ϝΠ ϯɻͨ·ʹWebAPI, WebGUIɻ
• ςετࣗಈԽͷॻ੶Λڞஶɺ@IT ʹͯTDDهࣄ࿈ࡌ • εΫϥϜΛத৺ʹࠃΧϯϑΝϨϯεͰࣄྫൃද
Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯͷର ࡦ • ؆୯ͳ·ͱΊ • QA
/ Discussion
ςετΞϯνύλʔϯ • Α͔Εͱ͓͚ͬͯͬͨͲɺ͍ͭͷ·ʹ͔ ࠔͬͯ͠·͏ςετʹؔ͢Δύλʔϯ
ςετͷཧͬͯͳΜ͚ͩͬ? • ςετ͕ͳ͍͜ͱɻςετ͠ͳͯ͘ཉ͍͠ ใ͕खʹ͍͍ͬͯΔ͜ͱɻ • ຖճςετ࣮ߦͰόάΛΈ͚ͭΒΕΔ͜ͱɻ
ςετΞϯνύλʔϯ • աࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ
աࣗಈԽ • ςετʹݶΒͣࣗಈԽ͕ա͗ΕͭΒ͍ ͷͰ͢ɻ • ͳʹ͕աͷϥΠϯʹͳΔ͔νʔϜϓϩ μΫτ࣍ୈͰ͢ɻ • ࣗୡͷؚΊͨϦλʔϯΛߟྀͨ͠ROI Λߟ͑·͠ΐ͏ɻ
աࣗಈԽ ίϯςΩετ • खಈͷGUIૢ࡞ίϚϯυૢ࡞͕ଟͯͬͯ͘ ΒΕͳ͍ɻ • खಈͰͰ͖ͳ͍͜ͱΛಋೖ͍ͨ͠ɻ • ࡞ۀ࣭͕͘ਓؒͷखಈΛ৴༻Ͱ͖ͳ͍ɻ •
ͳΜͲ܁Γฦ͢͜ͱ͕͓͓͍ɻ
աࣗಈԽ ίϯςΩετ • ςετσϓϩΠΛࣗಈԽͨ͠ɻ • GUIͷςετࣗಈԽͨ͠ɻ • ڥߏஙࣗಈԽͨ͠ɻ
աࣗಈԽ ՝ • όάΛະવʹ͍ͩΓɺݟ͚ͭͨΓ͢Δ͜ͱ ͕Ͱ͖͍ͯͳ͍ɻ • ϓϩμΫτίʔυͷमਖ਼ʹରͯ͠ςετίʔ υͷमਖ਼ྔ͕ଟ͗ͯ͢ɺ؆୯ʹमਖ਼Ͱ͖ͳ͍ɻ • ࣗಈԽͨ͠ͷΛϝϯςͰ͖Δਓ͕͍ͳ͍ɻ
աࣗಈԽ ݪҼ1 • όάΛະવʹ͍ͩΓɺݟ͚ͭͨΓ͢Δ͜ͱ ͕Ͱ͖͍ͯͳ͍ɻ • త͕ཧ͞Ε͍ͯͳ͍ɻ • ؆୯ʹͰ͖Δ͜ͱ͚ͩΛେྔʹࣗಈԽͯ͠ ͍Δɻ
աࣗಈԽ ݪҼ2 • ϓϩμΫτίʔυͷमਖ਼ʹରͯ͠ςετίʔυ ͷमਖ਼ྔ͕ଟ͗ͯ͢ɺ؆୯ʹमਖ਼Ͱ͖ͳ͍ɻ • ݟ͚͍ͭͨόάɺ༷Խ͖͢ςετͷॏෳ ͕ଟ͍ɻ • ςετͳ͍ΑΓ͋ͬͨ΄͏͕͍͍ͱ͍͏ࢥ
͍ࠐΈɻ
աࣗಈԽ ݪҼ3 • ࣗಈԽͨ͠ͷΛϝϯςͰ͖Δਓ͕͍ͳ͍ɻ • ࣗಈԽ͢Δ͜ͱ͕తʹͳͬͯ͠·͍ͬͯΔɻ • ࠷ॳͷత͔ΒͣΕͨӡ༻Λͯ͠͠·͍ͬͯΔɻ • ࣗಈԽͨ͜͠ͱʹΑࣦͬͯͬͨͷΛݟΑ͏ͱ
͍ͯ͠ͳ͍ɻ
աࣗಈԽ ݪҼ·ͱΊ • ࣗಈԽΛ͢͢Ί͍ͯ͘ɺࣗಈԽ͞ΕͨͷΛͬ ͍ͯ͘ͳ͔Ͱɺࣗୡͷཁٻ͕มΘ͍ͬͯΔ͜ ͱʹؾ͍͍ͮͯͳ͍ɻ • ࣗୡͷݱͳΒͰͷɺࣗಈԽͷϝϦοτɺ σϝϦοτΛߟ͍͑ͯͳ͍ɻ •
ͳ͍ΑΓ͋ͬͨ΄͏͕͍͍ɻͱࢥ͍ࠐΜͰ͍Δɻ
աࣗಈԽ ରࡦ • ࣗಈԽͷཁٻΛϓϩοτ͍ͯ͘͠ɺҰ࣮ݱ͚ͨ͠Ͳ ෆཁʹͳͬͨͷͲΜͲΜࣺͯͨΓɺมߋ͢Δɻ • ͦͷཁٻΛୡ͢Δ͜ͱͰͷϓϥεͷϦλʔϯɺϚΠ φεͷϦλʔϯΛߟ͑Δɻ • ෆ͔҆ͩΒࣗಈԽ͢Δɻ͔ΒҰา౿ΈࠐΜͰɺৗʹʮͳ
ͥෆ҆ͳͷ͔ʯΛ͖ͭͭΊͯɺຊʹ΄͍͠ͷΛ࣮ ݱ͢Δɻ
ςετΞϯνύλʔϯ • աࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ
ϞοΫਲ͍ • ϞοΫ : ςετରͷҰ෦ͰຊΛΘͣʹ ҙͷಈ࡞ͤ͞Δख๏ɻ • ςετͷϝϯςφϯεΛ͍ͯ͠Δഺ͕ɺϞο Ϋͷϝϯςφϯε͕ϝΠϯʹͳͬͨΓɺϓϩ μΫτίʔυͷίϐϖʹͳͬͨΓɻ
ϞοΫਲ͍ ίϯςΩετ • ςετͷ࣮ߦ͕͍࣌ؒɻ(DBWebAPIΛ ͍ͬͯΔ) • ҟৗͳঢ়ଶΛͭ͘Γ͍ͨɻ
ϞοΫਲ͍ ίϯςΩετ • DBWebAPIΛར༻͍ͯ͠Δ෦ΛϢχοτ ςετͰ͖ΔΑ͏ʹɺϞοΫΛར༻ͨ͠ɻ • ϞοΫରͷͲͷAPIΛԿճ࣮ߦ͔ͨ͠ݕࠪ ͢Δɻ • ߴͳϢχοτςετΛ࣮ݱͨ͠ɻ
ϞοΫਲ͍ ՝ • ϓϩμΫτίʔυ/ςετίʔυΛมߋ͢Δͨ ΊʹେྔͷϞοΫίʔυΛมߋ͠ͳ͚Ε͍ ͚ͳ͍ɻ • ϞοΫͱຊ͕ဃ͍͗ͯͯ͢͠ɺςετ͕ ৴༻Ͱ͖ͳ͍ɻ
ϞοΫਲ͍ ݪҼ1 • ϓϩμΫτίʔυ/ςετίʔυΛมߋ͢Δͨ ΊʹେྔͷϞοΫίʔυΛมߋ͠ͳ͚Ε͍ ͚ͳ͍ɻ • ϞοΫίʔυͷॏෳ͕ଟ͍ɻ • ϞοΫ͠ͳͯ͘ςετͰ͖Δͷ·ͰϞο
Ϋ͍ͯ͠Δɻ
ϞοΫਲ͍ ݪҼ2 • ϞοΫͱຊ͕ဃ͍͗ͯͯ͢͠ɺςετ͕৴༻ Ͱ͖ͳ͍ɻ • Φʔφʔ͕ҟͳΔϓϩμΫτʹରͯ͠ϞοΫ͠ ͍ͯΔͱɺόʔδϣϯΞοϓʹ͍͍͔ͭͯͳ͍ ͱ͍͚ͳ͍ɻ •
ϞοΫͱϞοΫର͕Ұக͍ͯ͠Δ͔ͷςετ Λ͍ͯ͠ͳ͍ɻ
ϞοΫਲ͍ ݪҼ2 • ςετͷͨΊʹϞοΫΛͭͬͯ͘ɺϞοΫ͕ ͍͋ͬͯΔ͔ͷͨΊʹςετΛͭͬͯ͘ɺɺɺ • ΊΜͲ͍͘͞ɻ
ϞοΫਲ͍ ݪҼ·ͱΊ • ϞοΫͨ͠Βͷલͷςετ͕ਐΉɻ͔Βͱ Γ͋͑ͣϞοΫͬͯ͠·͏ͱ͖͕͋Δɻ • ϞοΫͷઃܭΛૄ͔ʹ͕ͪ͠ɻ • ϞοΫ͕ਖ਼͍͔͠Λ֬ೝ͍ͯ͠ͳ͍ɻ
ϞοΫਲ͍ ରࡦ • ϞοΫͰςετߴԽ͢ΔͷͰͳ͘ɺςε τڥͷෳߏஙɺࢄ࣮ߦʹΑͬͯߴԽ ͢Δ • ϞοΫΛͲͷΑ͏ʹϝϯςφϯε͢Δ͔Λߟ ͑Δ
ςετΞϯνύλʔϯ • աࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ
TDD(ςετۦಈ։ൃ)ෆཁ • TDD : ςετίʔυฤू -> ϓϩμΫτίʔυ ฤू -> ϦϑΝΫλϦϯά
Λ܁Γฦ͢ੳɺઃ ܭٕ๏ • TDDΔͷϢχοτςετΛ֮͑ΔͨΊ͘ Β͍ͷͷͰɺTDDͬͯ։ൃ͕Ճͯ͠ ͍ͳ͍ɻ
TDDෆཁ ίϯςΩετ • ෳࡶͳγεςϜͳͷͰςετ͕ͳ͍ͱਖ਼͍͠ มߋΛͰ͖ͳ͍ɻ • ͲΜͳಈ͖Λ͢Δͷ͔·ͬͨ͘Θ͔Βͳ͍ɻ • ͦ͜ͰTDDΛ͠ͳ͕ΒɺςετΛ֦ॆ͍ͯ͠ ͘ɻ
TDDෆཁ ίϯςΩετ • ϢχοτςετۃྗTDDͰ͕ͬͨςετ ՄೳͳઃܭΛ࠷ॳ͔ΒͰ͖ΔΑ͏ʹͳͬͨͷ Ͱɺ͏Βͳ͍͍ͯ͘ͱஅͨ͠ɻ • ϢχοτςετͷTDDΛ͠ͳͯ͘Ϣχοτ ςετ࣌ʹΘ͔ΔόάͰͳ͍͔Βɺ͏ Βͳ͍͍ͯ͘ͱஅͨ͠ɻ
TDDෆཁ ՝ • ͋ͱ͔Β࣮ߦ͢Δςετͷ͓͓͕͘ॏཁͳϢʔ εέʔεΛදݱ͍ͯ͠Δ͚Ͳɺϝϯςφϯε ͍͢͠ܗͰͷ͍ͬͯ͜ͳ͍ɻ • ͍͍ͨιϑτΣΞͰ͋Δ͔?Θ͔Δͷ͕ ͍ɻ
TDDෆཁ ݪҼ1 • ͦͯͦ͠ͷ෦͕ͬͱॏཁͳϢʔεέʔεΛ දݱ͍ͯ͠Δ͚Ͳɺϝϯςφϯε͍͢͠ܗͰͷ ͍ͬͯ͜ͳ͍ɻ • ͓͍ͯͨ͠΄͏͕͍͍ςετ͔Ͳ͏͔ޙʹ ͳΒͳ͍ͱΘ͔Βͳ͍ɻ •
׳Ε͍ͯͳ͍ͱͳ͔ͳ͔εΫϦϓςουʹ͢Δ ؾྗ͕Θ͔ͳ͍ɻ
TDDෆཁ ݪҼ2 • ͍͍ͨιϑτΣΞͰ͋Δ͔?Θ͔Δͷ͕ ͍ɻ • ࣮͔ͯ͠Β౷߹ςετɺγεςϜςετɺ ϢʔβϏϦςΟςετͱ͍͏ϓϩηε͕ී ௨ͩͱࢥ͍͜ΜͰ͍Δɻ
TDDෆཁ ݪҼ·ͱΊ • Test as Documentationͷײ͕֮ͳ͍ɻ • ৗʹΰʔϧΛҙࣝͨ͠։ൃ͕Ͱ͖ͳ͍ɻ • ςετݏ͚ͩͲɺςετࣗମΛվળ͢Δؾ
͕ͳ͍ɻ
TDDෆཁ ରࡦ • ཁٻ༷ςετίʔυͱܕͰ֬ೝ͢Δɻ • ࠷ॳʹςετͰ͜Μͳ͍ํ͕Ͱ͖ΔιϑτΣ Ξ͕΄͍͠ͱఆٛ͢Δ΄͏͕ɺظͱͷζϨΛͳ ͤ͘Δɻ • खಈͰ͍͍͔Βɺઌʹ͓͓·͔ͳςετέʔε
Λͭ͘Γ͡ΊͯɺϦϑΝΫλϦϯά͠ͳ͕Βͭ ͘Γ͜Ήɻ
Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯͷର ࡦ • ؆୯ͳ·ͱΊ • QA
/ Discussion
͖ͬ͞·Ͱͷ·ͱΊ • ࣗಈԽΛ͢ΕେৎͳͷͰͳ͍ͷͰ͢ɻ ॏཁͳͷɺνʔϜϓϩμΫτͷʹ͋ ΘͤͨࣗಈԽͰ͢ɻ • ͳΜͱͳ͘ͰࣗಈԽ͢ΔݶΓͳΜͱͳ͘ͷ Ռ͔͑͠ΒΕͳ͍͠ɺͳΜͱͳ͘ΞδϟΠ ϧ͍ͬͯͯɺͳΜͱͳ͘ςετ͍ͬͯΔɻͬ ͯͳͬͯ͠·͍·͢ɻ
ͯ͞ɺkyon_mm? • ςετΛઃܭ͔ͯ͠Β࣮ࢪ͢Δ·Ͱͷ࣌ؒ 0.1h ͔Β 2.0h • ςετظؒͳ͠ • εϓϦϯτظؒ
2days • खಈςετΨγΨγΓ·͢
ͯ͞ɺkyon_mm? • ࣗಈςετBDD෩ʹهड़͍ͯ͠·͢ɻ • खಈςετIgnoreͳࣗಈςετͱͯ͠ɺ WikiʹBDD෩ʹهड़͍ͯ͠·͢ɻ • ͦͦςετΛݮΒ͢ɻͲ͏͢Ε࠷খͷς ετͰϦϦʔεͰ͖Δͷ͔ɻ
Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯͷର ࡦ • ؆୯ͳ·ͱΊ • QA
/ Discussion
QA
·ͱΊ • ཧʹۙ͘ʹྗ͕ඞཁͰ͢ɻ • ͷલͷࣄΛղܾ͢Δ͜ͱ͚ͩʹनΘΕͯ ͍͚·ͤΜɻνʔϜͱϓϩμΫτΛͲͷΑ ͏ʹ͍ͤͯ͘͞ͷ͔ɺৗʹঢ়گʹԠͯ͡ มԽ͢Δ͜ͱ͕େͰ͢ɻ • ॱԠ͢Δ͜ͱ͕ΞδϟΠϧͰ͔͢ΒͶɻ