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
アジャイル開発のテスト -自動化でしょうか。いいえ、戦略勝ちです。-
Search
kyonmm
PRO
September 10, 2016
Technology
4.6k
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
3.2k
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
1.4k
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
4
2.3k
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
5
4.9k
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
780
IT子会社のグローバルトレンド #scrumsendai / Global Trends in IT Subsidiaries
kyonmm
PRO
3
1.7k
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
400
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.5k
地方中小企業のエンジニアから大企業の執行役員になるまで #phpcon_niigata / road to executive
kyonmm
PRO
7
15k
Other Decks in Technology
See All in Technology
メルペイ 会計システム概要と歴史
mewuto
0
200
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
0
300
分析AIエージェントを育てる、動く環境を育てる
codatum
1
770
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
850
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.3k
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
300
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
170
WasmをRustにする
sansantech
PRO
0
120
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
300
USB PDを使ってスマホを労わりたい
raspython3
0
150
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
130
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
620
Automating Front-end Workflow
addyosmani
1369
210k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Mind Mapping
helmedeiros
1
400
Building the Perfect Custom Keyboard
takai
2
900
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Practical Orchestrator
shlominoach
192
12k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
980
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
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
·ͱΊ • ཧʹۙ͘ʹྗ͕ඞཁͰ͢ɻ • ͷલͷࣄΛղܾ͢Δ͜ͱ͚ͩʹनΘΕͯ ͍͚·ͤΜɻνʔϜͱϓϩμΫτΛͲͷΑ ͏ʹ͍ͤͯ͘͞ͷ͔ɺৗʹঢ়گʹԠͯ͡ มԽ͢Δ͜ͱ͕େͰ͢ɻ • ॱԠ͢Δ͜ͱ͕ΞδϟΠϧͰ͔͢ΒͶɻ