Slide 1

Slide 1 text

ςετͱ஥ྑ͘ͳΓ͍ͨɺ
 ͳΓͨ͘ͳ͍ʁ σϒϥΠϒʂ`21 / 2021.04.16 BY Hideki Kinjyo

Slide 2

Slide 2 text

ࣗݾ঺հ • ۚ৓लथ / ͖Μ͡ΐ͏ͻͰ͖ • GitHub: @o0h / Twitter: @o0h_ • ޷͖ͳFW͸CakePHP • ΞΠίϯ͸
 ඒຯ͍͠ࡪ਌ࢠကͷࣸਅͰ͢

Slide 3

Slide 3 text

ࣗݾ঺հͷ঺հ ࣗ ݾ ঺ հ ͸ 
 ࢖ ͍ · Θ ͠ ͯ · ͢ Α ʂ

Slide 4

Slide 4 text

ࠓ೔ͷ͓୊

Slide 5

Slide 5 text

ൃදλΠτϧݟͯҾ͍ͯ·ͤΜʁʁ

Slide 6

Slide 6 text

େৎ෉Ͱ͔͢ʁʁʁ

Slide 7

Slide 7 text

͜ͷൃදΛฉ͖ऴΘͬͨ࣌ʹɺ ʮςετ͍͍ͬͯΑͶɺେ޷͖ʯͱ͍͏ؾ࣋ͪʹ গ͠Ͱ΋ͳͬͯ͘ΕͨΒخ͍͠Ͱ͢

Slide 8

Slide 8 text

͓͠ͳ͕͖ 1.ςετͱ͸Ͳ͏͍͏΋ͷ͔ 2.ςετ͸ԿΛ΋ͨΒ͔͢ɾԿ͕ඞཁ͔ 3.ςετͷྑ͞Λ࣮ײ͢Δ 4.Ͳ͏΍ͬͨΒςετΛॻ͘΍͘͢ͳΔ͔

Slide 9

Slide 9 text

#1 ςετͱ͸Ͳ͏͍͏΋ͷ͔

Slide 10

Slide 10 text

ʮιϑτ΢ΣΞςετʯΛఆٛ͢Δͱͨ͠Β ͳΜͱઆ໌͠·͔͢ʁ

Slide 11

Slide 11 text

ςετͱ͸ɼΤϥʔ͕ͳ͍͜ͱΛ͠Ί͍ͯ͘͠աఔͰ͋Δ ςετͷ໨త͸ɼϓϩάϥϜ͕ҙਤ͞ΕͨػೳͲ͓Γʹਖ਼͘͠ ಈ͍ͯ͘ΕΔ͜ͱΛ͠Ί͢͜ͱͰ͋Δ ςετͱ͸ɼϓϩάϥϜ͕ࢥ͍Ͳ͓Γʹಈ͘͜ͱͷ֬৴Λ࡞ͬ ͍ͯ͘աఔͰ͋Δ ࡾ୒ΫΠζʂ

Slide 12

Slide 12 text

͜ΕΒͷఆٛ͸ɼ
 ςετʹ͍ͭͯͷਖ਼൓ରͷఆٛͩͱ
 ͍ͬͯ΋͍͍.

Slide 13

Slide 13 text

ςετͷՁ஋ ʮԿ͔Λ͢Δʯͷ͸ ʮԿΒ͔ͷՁ஋Λ΋ͨΒ͢ʯ ͜ͱ͕໨త • ςετʹΑͬͯ΋ͨΒ͞ΕΔՁ஋: =ϓϩάϥϜͷ ඼࣭ɾ৴པੑΛ޲্ͤ͞Δ͜ͱ • ϓϩάϥϜͷ৴པੑΛ޲্ͤ͞Δͱ͸? =ΤϥʔΛΈ͚ͭɼͦΕΛͱΓͷͧ͘͜ͱ • Ձ஋ͷߴ͍ςετ: = ΑΓଟ͘ͷΤϥʔΛΈ͚ͭͯ͘ΕΔςετ

Slide 14

Slide 14 text

ςετͷఆٛ: ςετͱ͸ɼΤϥʔΛΈ͚ͭΔͭ΋ΓͰ ϓϩάϥϜΛ࣮ߦ͢ΔաఔͰ͋Δ.

Slide 15

Slide 15 text

Կ͕ҧ͏ͷʁ • લఏͱͯ͠ɺ ʮϓϩάϥϜ͸ΤϥʔΛ;͘ΜͰ͍Δʯͱ͍͏Ծఆͷ΋ͱ Ͱ։ൃ΍ςετʹऔΓ૊ΜͰ͍͘ • ͳͷͰʮಈ͘͜ͱΛอূ͢Δʯ͜ͱΑΓ΋ɺ ʮΤϥʔΛݟ͚ͭΔʯ͜ͱʹॏ͖Λஔ͘

Slide 16

Slide 16 text

ࢀߟ • ʰιϑτ΢ΣΞςετͷٕ๏ ୈ2൛ʱ ୈ2ষ ϓϩάϥϜɾςετͷ৺ཧֶͱܦࡁֶ

Slide 17

Slide 17 text

#2 ςετ͸ԿΛ΋ͨΒ͔͢ɾԿ͕ඞཁ͔

Slide 18

Slide 18 text

ςετͷʮίεύʯ • ςετͷ໨త = ʮΤϥʔΛূ໌͢Δʯ • Ͳ͏΍Δ͔ʁ • खಈͰ΍Δ • ࣗಈͰ΍Δ

Slide 19

Slide 19 text

ςετͷʮίεύʯ • ʮ΍Δͷ͕େมʯͩͱ ʮΤϥʔΛূ໌͢Δίετʯ͕ߴ͘ͳΔ • →ࣗಈԽ͠Α͏ͥʂʂ • ʮ࡞Δͷ͕େมʯͩͱ ʮςετΛ༻ҙ͢Δίετʯ͕ߴ͘ͳΔ • → खಈͰ΍Ζ͏ͤʂʂ

Slide 20

Slide 20 text

ςετϐϥϛου https://martinfowler.com/articles/practical-test-pyramid.html

Slide 21

Slide 21 text

• https://alisterbscott.com/kb/testing-pyramids/ • https://twitter.com/t_wada/status/361796460725018624

Slide 22

Slide 22 text

ʮΞΠεΫϦʔϜʯͷ໰୊͸ʁ 㱻ʮࣗಈԽςετʯͷࢿ࢈ੑͱ͸ʁ

Slide 23

Slide 23 text

ࣗಈԽςετ • ୯ମςετͱ͔݁߹ςετɺE2EςετͳͲͷ ʮϘλϯԡͨ͠Βউखʹςετͯ͘͠ΕΔͷ͓͓͒ʯܥ • ࣗಈԽͷར఺ • ಉ͡࡞ۀΛ࣮ߦͰ͖Δ(ػց͕ಘҙͳ΍ͭʂʂ) • ʮίʔυԽʯʹΑͬͯɺखॱͷมߋɾಡղ͕Ͱ͖Δ

Slide 24

Slide 24 text

ࣗಈԽςετͱίετ • ॳظֶशίετ͔͔ΔΑͶ • ςετϑϨʔϜϫʔΫͷDSL֮͑ͨΓ • CIͰ૊ΜͩΓ • ϝϯςίετ͔͔ΔΑͶ • มߋՕॴ͕૿͑ͨΓೖΓ૊ΜͩΓ • ϥϯχϯάඅ༻(࣮ߦ࣌ؒɺCIඅ༻)΋

Slide 25

Slide 25 text

ܦࡁతͳࣗಈԽςετ ͏·͍ͬͨ͘৔߹ • த൫ʹίετ͸͔͔Δ͕ • ͦ͜Λൈ͚ͯ΋ ίετ͕ʮංେԽ͠ͳ ͍ʯ • ʮςετʹΑͬͯԼ͕Δί ετʯ͕େ͖͘ͳ͍ͬͯ͘ http://xunitpatterns.com/Goals%20of%20Test%20Automation.html

Slide 26

Slide 26 text

ෆܦࡁతͳࣗಈԽςετ ͏·͍͍ͬͯ͘ͳ͍৔߹ • த൫Λൈ͚ͯ΋ ίετ͕ʮංେԽ͠ଓ͚ Δʯ • ʮςετʹΑͬͯԼ͕Δ ίετʯ͕ۃΊͯখ͍͞ http://xunitpatterns.com/Goals%20of%20Test%20Automation.html

Slide 27

Slide 27 text

ςετ΋ʮ඼࣭ʯ͕େࣄ͡ΌΜʂʂʂʂ

Slide 28

Slide 28 text

ςετͷ඼࣭ͬͯͳΜͩʁ

Slide 29

Slide 29 text

ࣗಈԽςετͷʮΰʔϧʯ

Slide 30

Slide 30 text

ޮՌᶃ ඼࣭Λ޲্ͤ͞Δ • Bug Repellent • ʮόά͕ࠞೖ͢ΔʯͷΛ๷͙ɺ๷஬ωοτతͳ໾ׂ • Defect Localization • ʮ1ͭͷৼΔ෣͍ͷݕࠪʯΛ૊Έ߹Θ͍ͤͯ͘ࣄ͕େࣄ • ͦΕʹΑͬͯɺʮͲ͕͜յΕ͍ͯΔ͔ʁʯΛ ໖ີʹɾہॴԽͯ͠ڭ͑ͯ͘ΕΔ

Slide 31

Slide 31 text

ޮՌᶄ γεςϜཧղΛॿ͚Δ • Tests as Documentation • ςετ͕͋Δ͜ͱͰʮ࣮ࡍʹͦͷΫϥεΛ࢖ͬͯΈΔʯ ʮಈ͔ͯ͠ΈΔʯ͜ͱ͕Ͱ͖Δ • લఏ৚݅ͷຬͨ͠ํɾࣄޙ৚݅ͷ಺༰ʹ͍ͭͯɺ ໨ͱखͰ֬ೝ͢Δ͜ͱ͕༰қʹͳΔ

Slide 32

Slide 32 text

ޮՌᶅ ϦεΫΛݮΒ͢ • Tests as Safety net • ʮ࠷ѱɺͳΜ͔͋ͬͨΒςετͰ෼͔Δʂʂʯͱ͍͏ ηʔϑςΟωοτతͳ໾ׂ • ςετͷෆ଍͸ʮͰ͜΅ͨ͜͠؛ʯͷΑ͏ͳ΋ͷɻ ͓͔ͬͳͼͬ͘ΓਐΜͰಥ೗υΧʔϯʂͬͯͳΔ

Slide 33

Slide 33 text

BOENPSF ※ ੲͷར༻Α͔ͬͨΒͲ͏ͧʂ https://speakerdeck.com/o0h/she-nei-lt20170810

Slide 34

Slide 34 text

ࢀߟ • ʰxUnit Test Patternsʱ Chapter 3. Goals of Test Automation

Slide 35

Slide 35 text

#3 ςετͷྑ͞Λ࣮ײ͢Δ

Slide 36

Slide 36 text

ʮςετ͸໾ʹཱͭʯͱ͍͏ˠΘ͔Δ ʮςετ΍Ζ͏ͥʂʂʯˠΊΜͲ͍

Slide 37

Slide 37 text

(͜Μͳਓ͍·ͤΜ͔ʁ)

Slide 38

Slide 38 text

ʮςετͰศརʯͬͯͷ͕
 ࣮ײͰ͖Ε͹Α͍ͷ͔ͳʁ

Slide 39

Slide 39 text

ʮςετศརʯͷͨΊʹ • ʮ໨తʯ͕ମײͰ͖ΔͱOK: “ΤϥʔΛΈ͚ͭΔͭ΋ΓͰॻ͘΋ͷ” • Test as Specification: ʮ͜ͷϝιου௨͢ͷ໘౗͍͘͞ΜͩΑͶʙʯ →ςετॻ͍ͯݸผʹͦͷϝιου࣮ߦʂʂ • Bug Repellent, Defect Localization ʮͪΐͬͱ͍ͬͨ͡ΒյΕͨɺԿͰʁʁʯ → ہॴԽͨ͠ݕࠪΛͨ͘͞Μ૊߹Θ͓͚ͯ͹ʮͳͥʯΛςετ͕ड़΂ͯ͘ ΕΔʂʂ

Slide 40

Slide 40 text

·ͣ͸TDD΍ͬͯΈΔͱྑ͍ʙ • TDD: ςετͷʮྑ͞ʯΛ։ൃʹ׆͔͢΋ͷ • ϓϩάϥϚͷෆ҆Λίϯτϩʔϧ͢Δ • υΩϡϝϯτ୅ΘΓʹ͢Δ • ʮมͩΑʯʮେৎ෉ͩΑʯΛϑΟʔυόοΫ͢Δ

Slide 41

Slide 41 text

ʮෆ҆Λίϯτϩʔϧʯͬͯʁ • ։ൃதͷෆ҆ • Ҿ਺Λ͜͏ͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ྫ֎͕ൃੜͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ͳΜͱͳ͘࢓༷ΠϝʔδͰ͖ͯΔ͚Ͳɺ͋ͬͯΔʁ • Ͳ͔͜Β࡞Ε͹Α͍ͷ͔ͳɾɾʁͳʹ͕࢒ͬͯΔ͚ͬɾɾʁ • 1ൃͰಈ͍ͨɾɾɾʁ

Slide 42

Slide 42 text

ʮෆ҆Λίϯτϩʔϧʯͬͯʁ • ։ൃதͷෆ҆ • Ҿ਺Λ͜͏ͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ྫ֎͕ൃੜͨ͠ΒͲ͏ͳΔΜͩΖ͏ʁ • ͳΜͱͳ͘࢓༷ΠϝʔδͰ͖ͯΔ͚Ͳɺ͋ͬͯΔʁ • Ͳ͔͜Β࡞Ε͹Α͍ͷ͔ͳɾɾʁ ͳʹ͕࢒ͬͯΔ͚ͬɾɾʁ ͍ͭ͜ΒΛʮςετͰอূ͍ͯ͠Δ͔ΒOKʯʹ͢Δͷ͕
 ʮෆ҆Λίϯτϩʔϧʯ͢Δͱ͍͏͜ͱʂ

Slide 43

Slide 43 text

TDDͷਐΊํ 1.·ͣ͸ʮ͜͏΍ͬͨΒʯʮ͜͏ͳΔ(΂͖)ʂʯΛॻ͘ • =ʮ΍Δ͜ͱϦετʯʮToDoϦετʯͷ ʮ߲໨ʯΛʮ1ςετέʔεʯͱͯ͠දݱ͍ͯ͘͠ 2.ʮ΍Δ͜ͱʯΛຬͨ͢Α͏ʹ(SUTͷ)ίʔυΛࡶʹॻ͘ 3.ʮ΍Δ͜ͱʯ͕ຬͨ͞Εͨঢ়ଶ(=΋͏ಈ͘ʂOKʂʂ)Ͱ ஸೡʹਗ਼ॻΛ͢Δ

Slide 44

Slide 44 text

ͦΕͰͲ͏ͳΔͷʁ • ʮͲ͜·ͰOKͰɺͲ͕͜ඍົ͔ʯΛ ઌʹʮ൑அՄೳʯʹ͓͚ͯ͠Δʂʂ • ʮͲ͜·ͰOKʁຊ౰ʹʁʁʯ͕෼͔Δͱ ʮෆ҆ʯ͕ݮΔʂ҆৺Ͱ͖Δʂʂ • ʮͪΐͬͱ࿔Γ͍ͨ(ϦϑΝΫλ͍ͨ͠)ʯͱࢥͬͨ࣌ʹ طʹʮ໋ߝʯ͕͋Δʂʂʂ • ͜ͷลΓ͕ʮࣗಈԽςετͷՁ஋ʯʹ௚݁͢ΔΑʙʙͬͯ࿩

Slide 45

Slide 45 text

ʮTDDࣗମͰςετ ≠ ࠷ऴతͳςετʯ
 Ͱ͸͋Δ͚ΕͲɺ
 ʮࣗಈԽςετͰಘΒΕΔԸܙʯ
 ͸ମײͰ͖Δ͸ͣ

Slide 46

Slide 46 text

TDDͲ͔͜Β࢝ΊΕ͹ʁ Ͳ͔͜ΒͰ΋OK!! • ϘτϜΞοϓςετ: Ϋϥε΍ϝιου͕൑໌͍ͯ͠ΔͳΒɺ 1൪খ͞ͳʮ෦඼ʯ͔ΒςετԽΛ࢝ΊΒΕΔ • τοϓμ΢ϯςετ: ৄࡉͳઃܭ͸΍Γͳ͕Βߟ͍͑ͨɾɾ࣌ʹ͸ ΑΓେ͖ͳߏ଄͔Β΍ΓΌ͑͑ͷΑ

Slide 47

Slide 47 text

TDDͲ͔͜Β࢝ΊΕ͹ʁ • ͍ͣΕͷΞϓϩʔνͰ΋ ʮςετ͕͋Ε͹ɺมߋ΋ා͘ͳ͘ͳΔʂʂʯ ͱ͍͏ԸܙΛ͏͚ΒΕΔΑ͏ʹͳΔ • ʮࠓΘ͔͍ͬͯΔ͜ͱʯͱʮ·ͩ෼͔͍ͬͯͳ͍͜ͱʯΛ ʮςετέʔεʯͰදݱ͍ͯ͘͠ʙͱ͍͏܁Γฦ͠ • ઈରʹશͯTDDͰ΍Δʂʂͱ͍͏ඞཁ͸ͳ͍ɺ ʮෆ͕҆ڧ͍ͱ͜Ζʯʮೖྗɾ݁Ռ͕ݻ·͍ͬͯΔͱ͜Ζʯ͚ͩʙͰ΋

Slide 48

Slide 48 text

ࢀߟ • ʰςετۦಈ։ൃʱ • ·ͣجૅతͳTDDʹ͍ͭͯ͸ͪ͜ΒͰ • ʰ ςετίʔυͷϦϑΝΫλϦϯά͕໨ࢦ͢΋ͷʱ https://dxd2021.cto-a.org/program/time-table/a-1

Slide 49

Slide 49 text

ࢀߟ • ʰ࣮ફςετۦಈ։ൃ ςετʹಋ͔ΕͯΦϒδΣΫτࢦ޲ ιϑτ΢ΣΞΛҭͯΔʱ • ൃలͨ͠Ϩϕϧ ʮτοϓμ΢ϯʯͷTDDͷݟຊ

Slide 50

Slide 50 text

#4 Ͳ͏΍ͬͨΒςετΛॻ͘΍͘͢ͳΔ͔

Slide 51

Slide 51 text

ςετ͕ʮྑ͍ʯ͸෼͔ͬͨɺ
 ॻ͘ͷ͕೉͘͠ͳ͍ɾɾʁ

Slide 52

Slide 52 text

(Θ͔Δ)

Slide 53

Slide 53 text

Ͳʙʙ΍ͬͯҭ͍͔ͬͯ͘ʂʁ • ʮςετͷ໨తɾޮՌʯΛཧղ͢Δ • ۩ମతͳtipsΛ஌Δ

Slide 54

Slide 54 text

࿩͍ͯ͠Δ࣌ؒͳ͍ͳɾɾɾʁ

Slide 55

Slide 55 text

ʮ͜ΕΛҙࣝͯ͠ʯॻ͘ʂ • ෼ذ͕͋ͬͨΒɺͲͬͪ΋௨ΕΔΑ͏ʹҙࣝ͢Δ • σʔλ͕ͳ͍(ۭ഑ྻͱ͔)ɺڥք஋·ΘΓͷ஋ΛಥͬࠐΉ • ʮ1ߦ͍ͬͨ͡Β1ՕॴյΕΔʯΑ͏ʹ͢Δ

Slide 56

Slide 56 text

Ͳ͏΍ֶͬͯͿ͔ʁ • ຊΛಡ΋͏ʙʙʙʂ • ྫ͑͹ɺʮιϑτ΢ΣΞςετͷٕ๏ʯͰ ղઆ͞Ε͍ͯΔtipsͨͪˠ • ීஈ࢖͍ͬͯΔϥΠϒϥϦͳͲͷ ςετίʔυΛಡΜͰݟΔ

Slide 57

Slide 57 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠🎉
 neͷςετͷʮࢿ࢈ੑ޲্ʯ΍͍͖͍ͬͯͨɾɾʂ
 ͬͯਓ͍ͨͪͨΒࡶஊ͠·͠ΐʂʂʂ