Slide 1

Slide 1 text

ΞδϟΠϧ։ൃͷςετ -ࣗಈԽͰ͠ΐ͏͔ɻ͍͍͑ɺઓུউͪͰ͢ɻ- kyon_mm in HACKER TACKLE 2016/09/10

Slide 2

Slide 2 text

Self Introduction • ͖ΐΜ kyon_mm @ גࣜձࣾΦϯβϩʔυ • ςετΞʔΩςΫτɺεΫϥϜɺڭҭ • Groovy, F#, C# • TDD/BDDΤΩεύʔτ

Slide 3

Slide 3 text

Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA / Discussion

Slide 4

Slide 4 text

kyon_mm ͷഎܠ • डୗΞδϟΠϧ։ൃ 4ਓνʔϜ • .NET ܥͷϑϨʔϜϫʔΫɺϥΠϒϥϦ։ൃ͕ϝΠ ϯɻͨ·ʹWebAPI, WebGUIɻ • ςετࣗಈԽͷॻ੶Λڞஶɺ@IT ʹͯTDDهࣄ࿈ࡌ • εΫϥϜΛத৺ʹࠃ಺ΧϯϑΝϨϯεͰࣄྫൃද

Slide 5

Slide 5 text

Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA / Discussion

Slide 6

Slide 6 text

ςετΞϯνύλʔϯ • Α͔Εͱ͓΋ͬͯ΍͚ͬͨͲɺ͍ͭͷ·ʹ͔ ࠔͬͯ͠·͏ςετʹؔ͢Δύλʔϯ

Slide 7

Slide 7 text

ςετͷཧ૝ͬͯͳΜ͚ͩͬ? • ςετ͕ͳ͍͜ͱɻςετ͠ͳͯ͘΋ཉ͍͠ ৘ใ͕खʹ͸͍͍ͬͯΔ͜ͱɻ • ຖճςετ࣮ߦͰόάΛΈ͚ͭΒΕΔ͜ͱɻ

Slide 8

Slide 8 text

ςετΞϯνύλʔϯ • ա৒ࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ࿦

Slide 9

Slide 9 text

ա৒ࣗಈԽ • ςετʹݶΒͣࣗಈԽ΋౓͕ա͗Ε͹ͭΒ͍ ΋ͷͰ͢ɻ • ͳʹ͕ա৒ͷϥΠϯʹͳΔ͔͸νʔϜ΍ϓϩ μΫτ࣍ୈͰ͢ɻ • ࣗ෼ୡͷ੒௕΋ؚΊͨϦλʔϯΛߟྀͨ͠ROI Λߟ͑·͠ΐ͏ɻ

Slide 10

Slide 10 text

ա৒ࣗಈԽ ίϯςΩετ • खಈͷGUIૢ࡞΍ίϚϯυૢ࡞͕ଟͯ͘΍ͬͯ ΒΕͳ͍ɻ • खಈͰ͸Ͱ͖ͳ͍͜ͱΛಋೖ͍ͨ͠ɻ • ࡞ۀ඼࣭͕௿͘ਓؒͷखಈΛ৴༻Ͱ͖ͳ͍ɻ • ͳΜͲ΋܁Γฦ͢͜ͱ͕͓͓͍ɻ

Slide 11

Slide 11 text

ա৒ࣗಈԽ ίϯςΩετ • ςετ΍σϓϩΠΛࣗಈԽͨ͠ɻ • GUIͷςετ΋ࣗಈԽͨ͠ɻ • ؀ڥߏங΋ࣗಈԽͨ͠ɻ

Slide 12

Slide 12 text

ա৒ࣗಈԽ ՝୊ • όάΛະવʹ๷͍ͩΓɺݟ͚ͭͨΓ͢Δ͜ͱ ͕Ͱ͖͍ͯͳ͍ɻ • ϓϩμΫτίʔυͷमਖ਼ʹରͯ͠ςετίʔ υͷमਖ਼ྔ͕ଟ͗ͯ͢ɺ؆୯ʹमਖ਼Ͱ͖ͳ͍ɻ • ࣗಈԽͨ͠΋ͷΛϝϯςͰ͖Δਓ͕͍ͳ͍ɻ

Slide 13

Slide 13 text

ա৒ࣗಈԽ ݪҼ1 • όάΛະવʹ๷͍ͩΓɺݟ͚ͭͨΓ͢Δ͜ͱ ͕Ͱ͖͍ͯͳ͍ɻ • ໨త͕੔ཧ͞Ε͍ͯͳ͍ɻ • ؆୯ʹͰ͖Δ͜ͱ͚ͩΛେྔʹࣗಈԽͯ͠ ͍Δɻ

Slide 14

Slide 14 text

ա৒ࣗಈԽ ݪҼ2 • ϓϩμΫτίʔυͷमਖ਼ʹରͯ͠ςετίʔυ ͷमਖ਼ྔ͕ଟ͗ͯ͢ɺ؆୯ʹमਖ਼Ͱ͖ͳ͍ɻ • ݟ͚͍ͭͨόάɺ࢓༷Խ͢΂͖ςετͷॏෳ ͕ଟ͍ɻ • ςετ͸ͳ͍ΑΓ͋ͬͨ΄͏͕͍͍ͱ͍͏ࢥ ͍ࠐΈɻ

Slide 15

Slide 15 text

ա৒ࣗಈԽ ݪҼ3 • ࣗಈԽͨ͠΋ͷΛϝϯςͰ͖Δਓ͕͍ͳ͍ɻ • ࣗಈԽ͢Δ͜ͱ͕໨తʹͳͬͯ͠·͍ͬͯΔɻ • ࠷ॳͷ໨త͔ΒͣΕͨӡ༻Λͯ͠͠·͍ͬͯΔɻ • ࣗಈԽͨ͜͠ͱʹΑࣦͬͯͬͨ΋ͷΛݟΑ͏ͱ ͍ͯ͠ͳ͍ɻ

Slide 16

Slide 16 text

ա৒ࣗಈԽ ݪҼ·ͱΊ • ࣗಈԽΛ͢͢Ί͍ͯ͘ɺࣗಈԽ͞Εͨ΋ͷΛ࢖ͬ ͍ͯ͘ͳ͔Ͱɺࣗ෼ୡͷཁٻ͕มΘ͍ͬͯΔ͜ ͱʹؾ͍͍ͮͯͳ͍ɻ • ࣗ෼ୡͷݱ৔ͳΒͰ͸ͷɺࣗಈԽͷϝϦοτɺ σϝϦοτΛߟ͍͑ͯͳ͍ɻ • ͳ͍ΑΓ͋ͬͨ΄͏͕͍͍ɻͱࢥ͍ࠐΜͰ͍Δɻ

Slide 17

Slide 17 text

ա৒ࣗಈԽ ରࡦ • ࣗಈԽͷཁٻΛϓϩοτ͍ͯ͘͠ɺҰ౓࣮ݱ͚ͨ͠Ͳ ෆཁʹͳͬͨ΋ͷ͸ͲΜͲΜࣺͯͨΓɺมߋ͢Δɻ • ͦͷཁٻΛୡ੒͢Δ͜ͱͰͷϓϥεͷϦλʔϯɺϚΠ φεͷϦλʔϯΛߟ͑Δɻ • ෆ͔҆ͩΒࣗಈԽ͢Δɻ͔ΒҰา౿ΈࠐΜͰɺৗʹʮͳ ͥෆ҆ͳͷ͔ʯΛ͖ͭͭΊͯɺຊ౰ʹ΄͍͠΋ͷΛ࣮ ݱ͢Δɻ

Slide 18

Slide 18 text

ςετΞϯνύλʔϯ • ա৒ࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ࿦

Slide 19

Slide 19 text

ϞοΫਲ͍ • ϞοΫ : ςετର৅ͷҰ෦Ͱຊ෺Λ࢖Θͣʹ೚ ҙͷಈ࡞ͤ͞Δख๏ɻ • ςετͷϝϯςφϯεΛ͍ͯ͠Δഺ͕ɺϞο Ϋͷϝϯςφϯε͕ϝΠϯʹͳͬͨΓɺϓϩ μΫτίʔυͷίϐϖʹͳͬͨΓɻ

Slide 20

Slide 20 text

ϞοΫਲ͍ ίϯςΩετ • ςετͷ࣮ߦ͕࣌ؒ஗͍ɻ(DB΍WebAPIΛ ࢖͍ͬͯΔ) • ҟৗͳঢ়ଶΛͭ͘Γ͍ͨɻ

Slide 21

Slide 21 text

ϞοΫਲ͍ ίϯςΩετ • DB΍WebAPIΛར༻͍ͯ͠Δ෦෼ΛϢχοτ ςετͰ͖ΔΑ͏ʹɺϞοΫΛར༻ͨ͠ɻ • ϞοΫର৅ͷͲͷAPIΛԿճ࣮ߦ͔ͨ͠΋ݕࠪ ͢Δɻ • ߴ଎ͳϢχοτςετΛ࣮ݱͨ͠ɻ

Slide 22

Slide 22 text

ϞοΫਲ͍ ՝୊ • ϓϩμΫτίʔυ/ςετίʔυΛมߋ͢Δͨ ΊʹେྔͷϞοΫίʔυΛมߋ͠ͳ͚Ε͹͍ ͚ͳ͍ɻ • ϞοΫͱຊ෺͕ဃ཭͍͗ͯͯ͢͠ɺςετ͕ ৴༻Ͱ͖ͳ͍ɻ

Slide 23

Slide 23 text

ϞοΫਲ͍ ݪҼ1 • ϓϩμΫτίʔυ/ςετίʔυΛมߋ͢Δͨ ΊʹେྔͷϞοΫίʔυΛมߋ͠ͳ͚Ε͹͍ ͚ͳ͍ɻ • ϞοΫίʔυͷॏෳ͕ଟ͍ɻ • ϞοΫ͠ͳͯ͘΋ςετͰ͖Δ΋ͷ·ͰϞο Ϋ͍ͯ͠Δɻ

Slide 24

Slide 24 text

ϞοΫਲ͍ ݪҼ2 • ϞοΫͱຊ෺͕ဃ཭͍͗ͯͯ͢͠ɺςετ͕৴༻ Ͱ͖ͳ͍ɻ • Φʔφʔ͕ҟͳΔϓϩμΫτʹରͯ͠ϞοΫ͠ ͍ͯΔͱɺόʔδϣϯΞοϓʹ͍͍͔ͭͯͳ͍ ͱ͍͚ͳ͍ɻ • ϞοΫͱϞοΫର৅͕Ұக͍ͯ͠Δ͔ͷςετ Λ͍ͯ͠ͳ͍ɻ

Slide 25

Slide 25 text

ϞοΫਲ͍ ݪҼ2 • ςετͷͨΊʹϞοΫΛͭͬͯ͘ɺϞοΫ͕ ͍͋ͬͯΔ͔ͷͨΊʹςετΛͭͬͯ͘ɺɺɺ • ΊΜͲ͍͘͞ɻ

Slide 26

Slide 26 text

ϞοΫਲ͍ ݪҼ·ͱΊ • ϞοΫͨ͠Β໨ͷલͷςετ͕ਐΉɻ͔Βͱ Γ͋͑ͣϞοΫ࢖ͬͯ͠·͏ͱ͖͕͋Δɻ • ϞοΫͷઃܭΛૄ͔ʹ͕ͪ͠ɻ • ϞοΫ͕ਖ਼͍͔͠Λ֬ೝ͍ͯ͠ͳ͍ɻ

Slide 27

Slide 27 text

ϞοΫਲ͍ ରࡦ • ϞοΫͰςετߴ଎Խ͢ΔͷͰ͸ͳ͘ɺςε τ؀ڥͷෳ਺ߏஙɺ෼ࢄ࣮ߦʹΑͬͯߴ଎Խ ͢Δ • ϞοΫΛͲͷΑ͏ʹϝϯςφϯε͢Δ͔Λߟ ͑Δ

Slide 28

Slide 28 text

ςετΞϯνύλʔϯ • ա৒ࣗಈԽ • ϞοΫਲ͍ • TDDෆཁ࿦

Slide 29

Slide 29 text

TDD(ςετۦಈ։ൃ)ෆཁ࿦ • TDD : ςετίʔυฤू -> ϓϩμΫτίʔυ ฤू -> ϦϑΝΫλϦϯά Λ܁Γฦ͢෼ੳɺઃ ܭٕ๏ • TDD΍Δͷ͸ϢχοτςετΛ֮͑ΔͨΊ͘ Β͍ͷ΋ͷͰɺTDD΍ͬͯ΋։ൃ͕Ճ଎ͯ͠ ͍ͳ͍ɻ

Slide 30

Slide 30 text

TDDෆཁ࿦ ίϯςΩετ • ෳࡶͳγεςϜͳͷͰςετ͕ͳ͍ͱਖ਼͍͠ มߋΛͰ͖ͳ͍ɻ • ͲΜͳಈ͖Λ͢Δͷ͔·ͬͨ͘Θ͔Βͳ͍ɻ • ͦ͜ͰTDDΛ͠ͳ͕ΒɺςετΛ֦ॆ͍ͯ͠ ͘ɻ

Slide 31

Slide 31 text

TDDෆཁ࿦ ίϯςΩετ • Ϣχοτςετ͸ۃྗTDDͰ΍͕ͬͨςετ ՄೳͳઃܭΛ࠷ॳ͔ΒͰ͖ΔΑ͏ʹͳͬͨͷ Ͱɺ΋͏΍Βͳ͍͍ͯ͘ͱ൑அͨ͠ɻ • ϢχοτςετͷTDDΛ͠ͳͯ͘΋Ϣχοτ ςετ࣌ʹΘ͔Δόά͸Ͱͳ͍͔Βɺ΋͏΍ Βͳ͍͍ͯ͘ͱ൑அͨ͠ɻ

Slide 32

Slide 32 text

TDDෆཁ࿦ ՝୊ • ͋ͱ͔Β࣮ߦ͢Δςετͷ͓͓͕͘ॏཁͳϢʔ εέʔεΛදݱ͍ͯ͠Δ͚Ͳɺϝϯςφϯε ͠΍͍͢ܗͰͷ͍ͬͯ͜ͳ͍ɻ • ࢖͍͍ͨιϑτ΢ΣΞͰ͋Δ͔?Θ͔Δͷ͕஗ ͍ɻ

Slide 33

Slide 33 text

TDDෆཁ࿦ ݪҼ1 • ͦͯͦ͠ͷ෦෼͕΋ͬͱ΋ॏཁͳϢʔεέʔεΛ දݱ͍ͯ͠Δ͚Ͳɺϝϯςφϯε͠΍͍͢ܗͰͷ ͍ͬͯ͜ͳ͍ɻ • ࢒͓͍ͯͨ͠΄͏͕͍͍ςετ͔Ͳ͏͔͸ޙʹ ͳΒͳ͍ͱΘ͔Βͳ͍ɻ • ׳Ε͍ͯͳ͍ͱͳ͔ͳ͔εΫϦϓςουʹ͢Δ ؾྗ͕Θ͔ͳ͍ɻ

Slide 34

Slide 34 text

TDDෆཁ࿦ ݪҼ2 • ࢖͍͍ͨιϑτ΢ΣΞͰ͋Δ͔?Θ͔Δͷ͕஗ ͍ɻ • ࣮૷͔ͯ͠Β౷߹ςετɺγεςϜςετɺ ϢʔβϏϦςΟςετͱ͍͏ϓϩηε͕ී ௨ͩͱࢥ͍͜ΜͰ͍Δɻ

Slide 35

Slide 35 text

TDDෆཁ࿦ ݪҼ·ͱΊ • Test as Documentationͷײ͕֮ͳ͍ɻ • ৗʹΰʔϧΛҙࣝͨ͠։ൃ͕Ͱ͖ͳ͍ɻ • ςετ͸ݏ͚ͩͲɺςετࣗମΛվળ͢Δؾ ͕ͳ͍ɻ

Slide 36

Slide 36 text

TDDෆཁ࿦ ରࡦ • ཁٻ΍࢓༷͸ςετίʔυͱܕͰ΋֬ೝ͢Δɻ • ࠷ॳʹςετͰ͜Μͳ࢖͍ํ͕Ͱ͖Διϑτ΢Σ Ξ͕΄͍͠ͱఆٛ͢Δ΄͏͕ɺظ଴ͱͷζϨΛͳ ͤ͘Δɻ • खಈͰ΋͍͍͔Βɺઌʹ͓͓·͔ͳςετέʔε Λͭ͘Γ͸͡ΊͯɺϦϑΝΫλϦϯά͠ͳ͕Βͭ ͘Γ͜Ήɻ

Slide 37

Slide 37 text

Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA / Discussion

Slide 38

Slide 38 text

͖ͬ͞·Ͱͷ·ͱΊ • ࣗಈԽΛ͢Ε͹େৎ෉ͳͷͰ͸ͳ͍ͷͰ͢ɻ ॏཁͳͷ͸ɺνʔϜ΍ϓϩμΫτͷ੒௕ʹ͋ ΘͤͨࣗಈԽͰ͢ɻ • ͳΜͱͳ͘ͰࣗಈԽ͢ΔݶΓ͸ͳΜͱͳ͘ͷ ੒Ռ͔͑͠ΒΕͳ͍͠ɺͳΜͱͳ͘ΞδϟΠ ϧ΍͍ͬͯͯɺͳΜͱͳ͘ςετ΍͍ͬͯΔɻͬ ͯͳͬͯ͠·͍·͢ɻ

Slide 39

Slide 39 text

ͯ͞ɺkyon_mm͸? • ςετΛઃܭ͔ͯ͠Β࣮ࢪ͢Δ·Ͱͷ࣌ؒ 0.1h ͔Β 2.0h • ςετظؒͳ͠ • εϓϦϯτظؒ 2days • खಈςετ΋ΨγΨγ΍Γ·͢

Slide 40

Slide 40 text

ͯ͞ɺkyon_mm͸? • ࣗಈςετ͸BDD෩ʹهड़͍ͯ͠·͢ɻ • खಈςετ͸Ignoreͳࣗಈςετͱͯ͠ɺ WikiʹBDD෩ʹهड़͍ͯ͠·͢ɻ • ͦ΋ͦ΋ςετΛݮΒ͢ɻͲ͏͢Ε͹࠷খͷς ετͰϦϦʔεͰ͖Δͷ͔ɻ

Slide 41

Slide 41 text

Agenda • എܠ • ςετΞϯνύλʔϯ/Ξϯνύλʔϯ΁ͷର ࡦ • ؆୯ͳ·ͱΊ • QA / Discussion

Slide 42

Slide 42 text

QA

Slide 43

Slide 43 text

·ͱΊ • ཧ૝ʹۙ෇͘ʹ͸౒ྗ͕ඞཁͰ͢ɻ • ໨ͷલͷࣄ৅Λղܾ͢Δ͜ͱ͚ͩʹनΘΕͯ ͸͍͚·ͤΜɻνʔϜͱϓϩμΫτΛͲͷΑ ͏ʹ੒௕͍ͤͯ͘͞ͷ͔ɺৗʹঢ়گʹԠͯ͡ มԽ͢Δ͜ͱ͕େ੾Ͱ͢ɻ • ॱԠ͢Δ͜ͱ͕ΞδϟΠϧͰ͔͢ΒͶɻ