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
70
テストと仲良くなりたい、 なりたくない? -why test
社内勉強会での発表ネタです
hideki kinjyo
PRO
April 16, 2021
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
520
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
270
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
3
520
SPLから始める「データ構造」入門
o0h
PRO
7
1.8k
PHPUnit11の新しい仲間たち
o0h
PRO
3
390
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
61
20k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
160
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
3
1.4k
Composerを便利に使うために私がやっていること #phperkaigi
o0h
PRO
1
2.8k
Other Decks in Programming
See All in Programming
ドメインイベント増えすぎ問題
h0r15h0
2
540
命名をリントする
chiroruxx
1
570
선언형 UI에서의 상태관리
l2hyunwoo
0
250
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
110
return文におけるstd::moveについて
onihusube
1
1.4k
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
130
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
390
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
1k
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
210
traP の部内 ISUCON とそれを支えるポータル / PISCON Portal
ikura_hamu
0
130
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
510
歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス
i10416
0
250
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The World Runs on Bad Software
bkeepers
PRO
66
11k
A Tale of Four Properties
chriscoyier
157
23k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
340
We Have a Design System, Now What?
morganepeng
51
7.3k
Mobile First: as difficult as doing things right
swwweet
222
9k
BBQ
matthewcrist
85
9.4k
Become a Pro
speakerdeck
PRO
26
5.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
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ͷςετͷʮࢿ࢈ੑ্ʯ͍͖͍ͬͯͨɾɾʂ ͬͯਓ͍ͨͪͨΒࡶஊ͠·͠ΐʂʂʂ