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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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.2k
生成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
3.9k
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
680
IT子会社のグローバルトレンド #scrumsendai / Global Trends in IT Subsidiaries
kyonmm
PRO
3
1.6k
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
340
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
クラウドファンディング版StackChan 3体(4体)をインタラクティブな体験型作品にして展示もした話 / スタックチャンお誕生日会2026
you
PRO
0
190
AI時代に求められる技術力 フロンティア・クリエイティビティ / Technical Excellence in the AI Era: Frontier Creativity
kaonavi
0
110
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
250
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
250
初めてのDatabricks勉強会
taka_aki
2
140
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.8k
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
0
340
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
1k
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
940
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
160
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
780
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
370
Scaling GitHub
holman
464
140k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Exploring anti-patterns in Rails
aemeredith
3
430
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
430
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
Done Done
chrislema
186
16k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
210
Designing Experiences People Love
moore
143
24k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
260
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
·ͱΊ • ཧʹۙ͘ʹྗ͕ඞཁͰ͢ɻ • ͷલͷࣄΛղܾ͢Δ͜ͱ͚ͩʹनΘΕͯ ͍͚·ͤΜɻνʔϜͱϓϩμΫτΛͲͷΑ ͏ʹ͍ͤͯ͘͞ͷ͔ɺৗʹঢ়گʹԠͯ͡ มԽ͢Δ͜ͱ͕େͰ͢ɻ • ॱԠ͢Δ͜ͱ͕ΞδϟΠϧͰ͔͢ΒͶɻ