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
68
テストと仲良くなりたい、 なりたくない? -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
390
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
220
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
3
400
SPLから始める「データ構造」入門
o0h
PRO
7
1.6k
PHPUnit11の新しい仲間たち
o0h
PRO
3
280
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
60
19k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
130
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
3
1.1k
Composerを便利に使うために私がやっていること #phperkaigi
o0h
PRO
1
2.2k
Other Decks in Programming
See All in Programming
dbt-ga4パッケージを実業務に導入してみた話
t_tokumaru_feedcorp
0
130
コードレビューと私の過去と未来
jxmtst
0
280
学生の時に開催したPerl入学式をきっかけにエンジニアが組織に馴染むために勉強会を主催や仲間と参加して職能間の境界を越えていく
ohmori_yusuke
1
130
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
240
ACES Meet におけるリリース作業改善の取り組み
fukucheee
0
130
ECS向けのドリフト検知機構を実装してみた
tkikuc
0
290
データマイグレーションの成功戦略~サービスリニューアルで失敗しないための実践ガイド~
tkzwtks
5
570
Quarto Clean Theme
nicetak
0
220
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
9
1.3k
perl for shell, awk and sed programmers
mackee
1
690
DevFest Android in Korea 2024 - 안드로이드의 문단속 : 앱을 지키는 암호화 이야기
mdb1217
1
160
What is TDD?
urakawa_jinsei
1
220
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.8k
Building a Scalable Design System with Sketch
lauravandoore
459
32k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9k
BBQ
matthewcrist
85
9.2k
How to Ace a Technical Interview
jacobian
275
23k
Scaling GitHub
holman
458
140k
Design by the Numbers
sachag
278
19k
How GitHub (no longer) Works
holman
311
140k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
The Power of CSS Pseudo Elements
geoffreycrofte
71
5.3k
What's in a price? How to price your products and services
michaelherold
243
11k
Building Adaptive Systems
keathley
38
2.2k
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ͷςετͷʮࢿ࢈ੑ্ʯ͍͖͍ͬͯͨɾɾʂ ͬͯਓ͍ͨͪͨΒࡶஊ͠·͠ΐʂʂʂ