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
テストと仲良くなりたい、 なりたくない? -why test
Search
hideki kinjyo
PRO
April 16, 2021
Programming
0
76
テストと仲良くなりたい、 なりたくない? -why test
社内勉強会での発表ネタです
hideki kinjyo
PRO
April 16, 2021
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
16
3.8k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
8
2.4k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
560
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
290
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
570
SPLから始める「データ構造」入門
o0h
PRO
7
1.9k
PHPUnit11の新しい仲間たち
o0h
PRO
3
420
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
62
21k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
180
Other Decks in Programming
See All in Programming
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
250
自力でTTSモデルを作った話
zgock999
0
100
技術を改善し続ける
gumioji
0
110
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
40
16k
ML.NETで始める機械学習
ymd65536
0
230
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
190
2025.2.14_Developers Summit 2025_登壇資料
0101unite
0
180
新宿駅構内を三人称視点で探索してみる
satoshi7190
2
120
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
500
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
140
ファインディLT_ポケモン対戦の定量的分析
fufufukakaka
0
910
Rubyと自由とAIと
yotii23
6
1.6k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Facilitating Awesome Meetings
lara
52
6.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
430
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Agile that works and the tools we love
rasmusluckow
328
21k
Being A Developer After 40
akosma
89
590k
Transcript
ςετͱྑ͘ͳΓ͍ͨɺ ͳΓͨ͘ͳ͍ʁ σϒϥΠϒʂ`21 / 2021.04.16 BY Hideki Kinjyo
ࣗݾհ • ۚलथ / ͖Μ͡ΐ͏ͻͰ͖ • GitHub: @o0h / Twitter:
@o0h_ • ͖ͳFWCakePHP • ΞΠίϯ ඒຯ͍͠ࡪࢠကͷࣸਅͰ͢
ࣗݾհͷհ ࣗ ݾ հ ͍ ·
Θ ͠ ͯ · ͢ Α ʂ
ࠓͷ͓
ൃදλΠτϧݟͯҾ͍ͯ·ͤΜʁʁ
େৎͰ͔͢ʁʁʁ
͜ͷൃදΛฉ͖ऴΘͬͨ࣌ʹɺ ʮςετ͍͍ͬͯΑͶɺେ͖ʯͱ͍͏ؾ࣋ͪʹ গ͠Ͱͳͬͯ͘ΕͨΒخ͍͠Ͱ͢
͓͠ͳ͕͖ 1.ςετͱͲ͏͍͏ͷ͔ 2.ςετԿΛͨΒ͔͢ɾԿ͕ඞཁ͔ 3.ςετͷྑ͞Λ࣮ײ͢Δ 4.Ͳ͏ͬͨΒςετΛॻ͘͘͢ͳΔ͔
#1 ςετͱͲ͏͍͏ͷ͔
ʮιϑτΣΞςετʯΛఆٛ͢Δͱͨ͠Β ͳΜͱઆ໌͠·͔͢ʁ
ςετͱɼΤϥʔ͕ͳ͍͜ͱΛ͠Ί͍ͯ͘͠աఔͰ͋Δ ςετͷతɼϓϩάϥϜ͕ҙਤ͞ΕͨػೳͲ͓Γʹਖ਼͘͠ ಈ͍ͯ͘ΕΔ͜ͱΛ͠Ί͢͜ͱͰ͋Δ ςετͱɼϓϩάϥϜ͕ࢥ͍Ͳ͓Γʹಈ͘͜ͱͷ֬৴Λ࡞ͬ ͍ͯ͘աఔͰ͋Δ ࡾΫΠζʂ
͜ΕΒͷఆٛɼ ςετʹ͍ͭͯͷਖ਼ରͷఆٛͩͱ ͍͍͍ͬͯ.
ςετͷՁ ʮԿ͔Λ͢Δʯͷ ʮԿΒ͔ͷՁΛͨΒ͢ʯ ͜ͱ͕త • ςετʹΑͬͯͨΒ͞ΕΔՁ: =ϓϩάϥϜͷ ࣭ɾ৴པੑΛ্ͤ͞Δ͜ͱ • ϓϩάϥϜͷ৴པੑΛ্ͤ͞Δͱ?
=ΤϥʔΛΈ͚ͭɼͦΕΛͱΓͷͧ͘͜ͱ • Ձͷߴ͍ςετ: = ΑΓଟ͘ͷΤϥʔΛΈ͚ͭͯ͘ΕΔςετ
ςετͷఆٛ: ςετͱɼΤϥʔΛΈ͚ͭΔͭΓͰ ϓϩάϥϜΛ࣮ߦ͢ΔաఔͰ͋Δ.
Կ͕ҧ͏ͷʁ • લఏͱͯ͠ɺ ʮϓϩάϥϜΤϥʔΛ;͘ΜͰ͍Δʯͱ͍͏Ծఆͷͱ Ͱ։ൃςετʹऔΓΜͰ͍͘ • ͳͷͰʮಈ͘͜ͱΛอূ͢Δʯ͜ͱΑΓɺ ʮΤϥʔΛݟ͚ͭΔʯ͜ͱʹॏ͖Λஔ͘
ࢀߟ • ʰιϑτΣΞςετͷٕ๏ ୈ2൛ʱ ୈ2ষ ϓϩάϥϜɾςετͷ৺ཧֶͱܦࡁֶ
#2 ςετԿΛͨΒ͔͢ɾԿ͕ඞཁ͔
ςετͷʮίεύʯ • ςετͷత = ʮΤϥʔΛূ໌͢Δʯ • Ͳ͏Δ͔ʁ • खಈͰΔ •
ࣗಈͰΔ
ςετͷʮίεύʯ • ʮΔͷ͕େมʯͩͱ ʮΤϥʔΛূ໌͢Δίετʯ͕ߴ͘ͳΔ • →ࣗಈԽ͠Α͏ͥʂʂ • ʮ࡞Δͷ͕େมʯͩͱ ʮςετΛ༻ҙ͢Δίετʯ͕ߴ͘ͳΔ •
→ खಈͰΖ͏ͤʂʂ
ςετϐϥϛου https://martinfowler.com/articles/practical-test-pyramid.html
• https://alisterbscott.com/kb/testing-pyramids/ • https://twitter.com/t_wada/status/361796460725018624
ʮΞΠεΫϦʔϜʯͷʁ 㱻ʮࣗಈԽςετʯͷࢿ࢈ੑͱʁ
ࣗಈԽςετ • ୯ମςετͱ͔݁߹ςετɺE2EςετͳͲͷ ʮϘλϯԡͨ͠Βউखʹςετͯ͘͠ΕΔͷ͓͓͒ʯܥ • ࣗಈԽͷར • ಉ͡࡞ۀΛ࣮ߦͰ͖Δ(ػց͕ಘҙͳͭʂʂ) • ʮίʔυԽʯʹΑͬͯɺखॱͷมߋɾಡղ͕Ͱ͖Δ
ࣗಈԽςετͱίετ • ॳظֶशίετ͔͔ΔΑͶ • ςετϑϨʔϜϫʔΫͷDSL֮͑ͨΓ • CIͰΜͩΓ • ϝϯςίετ͔͔ΔΑͶ •
มߋՕॴ͕૿͑ͨΓೖΓΜͩΓ • ϥϯχϯάඅ༻(࣮ߦ࣌ؒɺCIඅ༻)
ܦࡁతͳࣗಈԽςετ ͏·͍ͬͨ͘߹ • த൫ʹίετ͔͔Δ͕ • ͦ͜Λൈ͚ͯ ίετ͕ʮංେԽ͠ͳ ͍ʯ • ʮςετʹΑͬͯԼ͕Δί
ετʯ͕େ͖͘ͳ͍ͬͯ͘ http://xunitpatterns.com/Goals%20of%20Test%20Automation.html
ෆܦࡁతͳࣗಈԽςετ ͏·͍͍ͬͯ͘ͳ͍߹ • த൫Λൈ͚ͯ ίετ͕ʮංେԽ͠ଓ͚ Δʯ • ʮςετʹΑͬͯԼ͕Δ ίετʯ͕ۃΊͯখ͍͞ http://xunitpatterns.com/Goals%20of%20Test%20Automation.html
ςετʮ࣭ʯ͕େࣄ͡ΌΜʂʂʂʂ
ςετͷ࣭ͬͯͳΜͩʁ
ࣗಈԽςετͷʮΰʔϧʯ
ޮՌᶃ ࣭Λ্ͤ͞Δ • Bug Repellent • ʮόά͕ࠞೖ͢ΔʯͷΛ͙ɺωοτతͳׂ • Defect Localization
• ʮ1ͭͷৼΔ͍ͷݕࠪʯΛΈ߹Θ͍ͤͯ͘ࣄ͕େࣄ • ͦΕʹΑͬͯɺʮͲ͕͜յΕ͍ͯΔ͔ʁʯΛ ໖ີʹɾہॴԽͯ͠ڭ͑ͯ͘ΕΔ
ޮՌᶄ γεςϜཧղΛॿ͚Δ • Tests as Documentation • ςετ͕͋Δ͜ͱͰʮ࣮ࡍʹͦͷΫϥεΛͬͯΈΔʯ ʮಈ͔ͯ͠ΈΔʯ͜ͱ͕Ͱ͖Δ •
લఏ݅ͷຬͨ͠ํɾࣄޙ݅ͷ༰ʹ͍ͭͯɺ ͱखͰ֬ೝ͢Δ͜ͱ͕༰қʹͳΔ
ޮՌᶅ ϦεΫΛݮΒ͢ • Tests as Safety net • ʮ࠷ѱɺͳΜ͔͋ͬͨΒςετͰ͔Δʂʂʯͱ͍͏ ηʔϑςΟωοτతͳׂ
• ςετͷෆʮͰ͜΅ͨ͜͠؛ʯͷΑ͏ͳͷɻ ͓͔ͬͳͼͬ͘ΓਐΜͰಥυΧʔϯʂͬͯͳΔ
BOENPSF ※ ੲͷར༻Α͔ͬͨΒͲ͏ͧʂ https://speakerdeck.com/o0h/she-nei-lt20170810
ࢀߟ • ʰxUnit Test Patternsʱ Chapter 3. Goals of Test
Automation
#3 ςετͷྑ͞Λ࣮ײ͢Δ
ʮςετʹཱͭʯͱ͍͏ˠΘ͔Δ ʮςετΖ͏ͥʂʂʯˠΊΜͲ͍
(͜Μͳਓ͍·ͤΜ͔ʁ)
ʮςετͰศརʯͬͯͷ͕ ࣮ײͰ͖ΕΑ͍ͷ͔ͳʁ
ʮςετศརʯͷͨΊʹ • ʮతʯ͕ମײͰ͖ΔͱOK: “ΤϥʔΛΈ͚ͭΔͭΓͰॻ͘ͷ” • Test as Specification: ʮ͜ͷϝιου௨͢ͷ໘͍͘͞ΜͩΑͶʙʯ →ςετॻ͍ͯݸผʹͦͷϝιου࣮ߦʂʂ
• Bug Repellent, Defect Localization ʮͪΐͬͱ͍ͬͨ͡ΒյΕͨɺԿͰʁʁʯ → ہॴԽͨ͠ݕࠪΛͨ͘͞Μ߹Θ͓͚ͯʮͳͥʯΛςετ͕ड़ͯ͘ ΕΔʂʂ
·ͣTDDͬͯΈΔͱྑ͍ʙ • TDD: ςετͷʮྑ͞ʯΛ։ൃʹ׆͔͢ͷ • ϓϩάϥϚͷෆ҆Λίϯτϩʔϧ͢Δ • υΩϡϝϯτΘΓʹ͢Δ • ʮมͩΑʯʮେৎͩΑʯΛϑΟʔυόοΫ͢Δ
ʮෆ҆Λίϯτϩʔϧʯͬͯʁ • ։ൃதͷෆ҆ • ҾΛ͜͏ͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ྫ֎͕ൃੜͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ͳΜͱͳ༷͘ΠϝʔδͰ͖ͯΔ͚Ͳɺ͋ͬͯΔʁ •
Ͳ͔͜Β࡞ΕΑ͍ͷ͔ͳɾɾʁͳʹ͕ͬͯΔ͚ͬɾɾʁ • 1ൃͰಈ͍ͨɾɾɾʁ
ʮෆ҆Λίϯτϩʔϧʯͬͯʁ • ։ൃதͷෆ҆ • ҾΛ͜͏ͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ྫ֎͕ൃੜͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ͳΜͱͳ༷͘ΠϝʔδͰ͖ͯΔ͚Ͳɺ͋ͬͯΔʁ •
Ͳ͔͜Β࡞ΕΑ͍ͷ͔ͳɾɾʁ ͳʹ͕ͬͯΔ͚ͬɾɾʁ ͍ͭ͜ΒΛʮςετͰอূ͍ͯ͠Δ͔ΒOKʯʹ͢Δͷ͕ ʮෆ҆Λίϯτϩʔϧʯ͢Δͱ͍͏͜ͱʂ
TDDͷਐΊํ 1.·ͣʮ͜͏ͬͨΒʯʮ͜͏ͳΔ(͖)ʂʯΛॻ͘ • =ʮΔ͜ͱϦετʯʮToDoϦετʯͷ ʮ߲ʯΛʮ1ςετέʔεʯͱͯ͠දݱ͍ͯ͘͠ 2.ʮΔ͜ͱʯΛຬͨ͢Α͏ʹ(SUTͷ)ίʔυΛࡶʹॻ͘ 3.ʮΔ͜ͱʯ͕ຬͨ͞Εͨঢ়ଶ(=͏ಈ͘ʂOKʂʂ)Ͱ ஸೡʹਗ਼ॻΛ͢Δ
ͦΕͰͲ͏ͳΔͷʁ • ʮͲ͜·ͰOKͰɺͲ͕͜ඍົ͔ʯΛ ઌʹʮஅՄೳʯʹ͓͚ͯ͠Δʂʂ • ʮͲ͜·ͰOKʁຊʹʁʁʯ͕͔Δͱ ʮෆ҆ʯ͕ݮΔʂ҆৺Ͱ͖Δʂʂ • ʮͪΐͬͱ࿔Γ͍ͨ(ϦϑΝΫλ͍ͨ͠)ʯͱࢥͬͨ࣌ʹ طʹʮ໋ߝʯ͕͋Δʂʂʂ
• ͜ͷลΓ͕ʮࣗಈԽςετͷՁʯʹ݁͢ΔΑʙʙͬͯ
ʮTDDࣗମͰςετ ≠ ࠷ऴతͳςετʯ Ͱ͋Δ͚ΕͲɺ ʮࣗಈԽςετͰಘΒΕΔԸܙʯ ମײͰ͖Δͣ
TDDͲ͔͜Β࢝ΊΕʁ Ͳ͔͜ΒͰOK!! • ϘτϜΞοϓςετ: Ϋϥεϝιου͕໌͍ͯ͠ΔͳΒɺ 1൪খ͞ͳʮ෦ʯ͔ΒςετԽΛ࢝ΊΒΕΔ • τοϓμϯςετ: ৄࡉͳઃܭΓͳ͕Βߟ͍͑ͨɾɾ࣌ʹ ΑΓେ͖ͳߏ͔ΒΓΌ͑͑ͷΑ
TDDͲ͔͜Β࢝ΊΕʁ • ͍ͣΕͷΞϓϩʔνͰ ʮςετ͕͋Εɺมߋා͘ͳ͘ͳΔʂʂʯ ͱ͍͏ԸܙΛ͏͚ΒΕΔΑ͏ʹͳΔ • ʮࠓΘ͔͍ͬͯΔ͜ͱʯͱʮ·͔͍ͩͬͯͳ͍͜ͱʯΛ ʮςετέʔεʯͰදݱ͍ͯ͘͠ʙͱ͍͏܁Γฦ͠ • ઈରʹશͯTDDͰΔʂʂͱ͍͏ඞཁͳ͍ɺ
ʮෆ͕҆ڧ͍ͱ͜Ζʯʮೖྗɾ݁Ռ͕ݻ·͍ͬͯΔͱ͜Ζʯ͚ͩʙͰ
ࢀߟ • ʰςετۦಈ։ൃʱ • ·ͣجૅతͳTDDʹ͍ͭͯͪ͜ΒͰ • ʰ ςετίʔυͷϦϑΝΫλϦϯά͕ࢦ͢ͷʱ https://dxd2021.cto-a.org/program/time-table/a-1
ࢀߟ • ʰ࣮ફςετۦಈ։ൃ ςετʹಋ͔ΕͯΦϒδΣΫτࢦ ιϑτΣΞΛҭͯΔʱ • ൃలͨ͠Ϩϕϧ ʮτοϓμϯʯͷTDDͷݟຊ
#4 Ͳ͏ͬͨΒςετΛॻ͘͘͢ͳΔ͔
ςετ͕ʮྑ͍ʯ͔ͬͨɺ ॻ͘ͷ͕͘͠ͳ͍ɾɾʁ
(Θ͔Δ)
Ͳʙʙͬͯҭ͍͔ͬͯ͘ʂʁ • ʮςετͷతɾޮՌʯΛཧղ͢Δ • ۩ମతͳtipsΛΔ
͍ͯ͠Δ࣌ؒͳ͍ͳɾɾɾʁ
ʮ͜ΕΛҙࣝͯ͠ʯॻ͘ʂ • ذ͕͋ͬͨΒɺͲͬͪ௨ΕΔΑ͏ʹҙࣝ͢Δ • σʔλ͕ͳ͍(ۭྻͱ͔)ɺڥք·ΘΓͷΛಥͬࠐΉ • ʮ1ߦ͍ͬͨ͡Β1ՕॴյΕΔʯΑ͏ʹ͢Δ
Ͳ͏ֶͬͯͿ͔ʁ • ຊΛಡ͏ʙʙʙʂ • ྫ͑ɺʮιϑτΣΞςετͷٕ๏ʯͰ ղઆ͞Ε͍ͯΔtipsͨͪˠ • ීஈ͍ͬͯΔϥΠϒϥϦͳͲͷ ςετίʔυΛಡΜͰݟΔ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠🎉 neͷςετͷʮࢿ࢈ੑ্ʯ͍͖͍ͬͯͨɾɾʂ ͬͯਓ͍ͨͪͨΒࡶஊ͠·͠ΐʂʂʂ