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
6
4.3k
アジャイル開発のテスト -自動化でしょうか。いいえ、戦略勝ちです。-
Hacker Tackle 2016で講演したアジャイルテストにおけるアンチパターンをまとめたものです。個人の見解です。
kyonmm
PRO
September 10, 2016
Tweet
Share
More Decks by kyonmm
See All by kyonmm
フレームワークを生み出すメタフレームワークという考え方 -適応型から生成型へ- #RSGT2025 / From adaptive to generative
kyonmm
PRO
2
1.9k
SRE NEXT 2024 スライドみただけの感想 / Just a quick look at the slides for SRE NEXT 2024
kyonmm
PRO
2
450
Living Process #RSGT2024
kyonmm
PRO
3
2.5k
アジャイルクイズ王 2024 #RSGT2024 / agile quiz king 2024
kyonmm
PRO
0
140
プロダクトマネジメントのグローバルトレンド #pmconf2023 / Global Trends in Product Management
kyonmm
PRO
3
6.9k
スタートアップのためのアジャイルプラクティス -論文100本ノック- #xpjug / Agile Practice for Startup - Papers -
kyonmm
PRO
4
2k
アジャイルリーダークイズ王 2023 #scrummikawa / agile leader quiz king 2023
kyonmm
PRO
1
1.3k
アジャイルテストクイズ王2023 #scrumniigata / agile test quiz king
kyonmm
PRO
0
800
アジャイルコーチクイズ王 2023 #scrumfukuoka
kyonmm
PRO
0
2.2k
Other Decks in Technology
See All in Technology
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
160
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
200
Fearsome File Formats
ange
0
580
大規模言語モデルとそのソフトウェア開発に向けた応用 (2024年版)
kazato
2
510
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
110
Unlearn Product Development - Unleashed Edition
lemiorhan
PRO
2
170
KMP with Crashlytics
sansantech
PRO
0
180
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
340
30分でわかる「リスクから学ぶKubernetesコンテナセキュリティ」/30min-k8s-container-sec
mochizuki875
3
400
「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
fujiwara3
6
3.3k
ネットワーク可視化の世界
likr
7
5.7k
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
1
5k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
A Tale of Four Properties
chriscoyier
157
23k
Producing Creativity
orderedlist
PRO
343
39k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Become a Pro
speakerdeck
PRO
26
5.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Being A Developer After 40
akosma
89
590k
It's Worth the Effort
3n
183
28k
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
·ͱΊ • ཧʹۙ͘ʹྗ͕ඞཁͰ͢ɻ • ͷલͷࣄΛղܾ͢Δ͜ͱ͚ͩʹनΘΕͯ ͍͚·ͤΜɻνʔϜͱϓϩμΫτΛͲͷΑ ͏ʹ͍ͤͯ͘͞ͷ͔ɺৗʹঢ়گʹԠͯ͡ มԽ͢Δ͜ͱ͕େͰ͢ɻ • ॱԠ͢Δ͜ͱ͕ΞδϟΠϧͰ͔͢ΒͶɻ