Slide 1

Slide 1 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTest Ͱ࢝ΊΔ Property-based Testing Yusuke Hosonuma @DeNA Kotlin Fest 2019

Slide 2

Slide 2 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Yusuke Hosonuma @DeNA Swift / Haskell / Go Twitter @tobi462

Slide 3

Slide 3 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. SoftWare Engineer in Test ςετࣗಈԽʢiOS / Android / Goʣ CI/CDɺςετٕज़ͷݚڀ

Slide 4

Slide 4 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࣥච $PNNJOHTPPOʜ

Slide 5

Slide 5 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Agenda • KotlinTest ͬͯʁ • Property-based Testing ͬͯʁ • ͲΜͳͱ͖ʹ࢖͑Δʁ • ·ͱΊ ͳΜͱͳ͘ཧղ͕ΰʔϧ

Slide 6

Slide 6 text

KotlinTest ͬͯʁ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͣ

Slide 7

Slide 7 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTest

Slide 8

Slide 8 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTest ଟ͘ͷػೳΛαϙʔτ͢Δ ςεςΟϯάϑϨʔϜϫʔΫ

Slide 9

Slide 9 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςεςΟϯάελΠϧ String Spec Behavior Spec Feature Spec #%%

Slide 10

Slide 10 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ϚονϟʔAPI ʴ

Slide 11

Slide 11 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςʔϒϧۦಈςετ σʔλΛࣄલʹྻڍ

Slide 12

Slide 12 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ςʔϒϧۦಈςετ σʔλΛࣄલʹྻڍ ΘΓͱશ෦੝Γͳ ςεςΟϯάϑϨʔϜϫʔΫ ͱ͍͏ҹ৅

Slide 13

Slide 13 text

Property-based Testing ͬͯʁ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͡Ό͋

Slide 14

Slide 14 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Property-based Testing • ςετσʔλΛϥϯμϜʹੜ੒ͤ͞ • ؔ਺͕ຬͨ͢ੑ࣭ʢPropertyʣΛݕূ͢Δ

Slide 15

Slide 15 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Property-based Testing • ςετσʔλΛϥϯμϜʹੜ੒ͤ͞ • ͦͷؔ਺͕ຬͨ͢ੑ࣭ʢPropertyʣΛݕূ͢Δ ͳΔ΄ͲɺΘ͔ΒΜɻ ྫΛݟͯΈΔ

Slide 16

Slide 16 text

଍͠ࢉʢʴʣͷ ςετͰൺֱ Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 17

Slide 17 text

Example-based Testing Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ීஈ΍ͬͯΔ

Slide 18

Slide 18 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 1 + 1 = 2 / 2 + 3 = 5 class AddSpec: StringSpec({ "add" { forall( row(1, 1, 2), row(2, 3, 5) ) { a, b, expected -> (a + b) shouldBe expected } } })

Slide 19

Slide 19 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. class AddSpec: StringSpec({ "add" { forall( row(1, 1, 2), row(2, 3, 5) ) { a, b, expected -> (a + b) shouldBe expected } } }) ೖྗ஋ͱظ଴஋Λ༻ҙͯ͠ 1 + 1 = 2 / 2 + 3 = 5

Slide 20

Slide 20 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. class AddSpec: StringSpec({ "add" { forall( row(1, 1, 2), row(2, 3, 5) ) { a, b, expected -> (a + b) shouldBe expected } } }) ݁Ռͱظ଴஋͕Ұக͢Δ͔ʁ 1 + 1 = 2 / 2 + 3 = 5

Slide 21

Slide 21 text

Property-based Testing Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Ͱ͸ʁ

Slide 22

Slide 22 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ੑ࣭Λߟ͑Δ a + b = b + a ަ׵๏ଇΛຬͨ͢

Slide 23

Slide 23 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ੑ࣭Λߟ͑Δ a + b = b + a ʁ ʁ ͲΜͳ஋Ͱ΋੒Γཱͭ

Slide 24

Slide 24 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTestͰݕূ class AddProperty: StringSpec({ "commutative" { assertAll { a: Int, b: Int -> (a + b) shouldBe (b + a) } } })

Slide 25

Slide 25 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTestͰݕূ class AddProperty: StringSpec({ “commutative" { assertAll { a: Int, b: Int -> (a + b) shouldBe (b + a) } } }) ͢΂ͯͷ

Slide 26

Slide 26 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTestͰݕূ class AddProperty: StringSpec({ “commutative" { assertAll { a: Int, b: Int -> (a + b) shouldBe (b + a) } } }) औΓ͏Δ஋BͱCʹ͍ͭͯ

Slide 27

Slide 27 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTestͰݕূ class AddProperty: StringSpec({ "commutative" { assertAll { a: Int, b: Int -> (a + b) shouldBe (b + a) } } }) BCCBͰ͋Δ͜ͱ

Slide 28

Slide 28 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KotlinTestͰݕূ class AddProperty: StringSpec({ "commutative" { assertAll { a: Int, b: Int -> (a + b) shouldBe (b + a) } } }) BCCBͰ͋Δ͜ͱ ϥϯμϜͳೖྗ஋ʹରͯ͠ ຬͨ͞ΕΔ΂͖ੑ࣭Λݕূ ৗʹ

Slide 29

Slide 29 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. debug print ͯ͠ΈΔͱ ཚ਺Ͱ ճࢼߦ͞ΕͯΔ

Slide 30

Slide 30 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. debug print ͯ͠ΈΔͱ ཚ਺Ͱ ճࢼߦ͞ΕͯΔ ύε͠ͳ͍σʔλ͕ͳ͍͔ େྔͷཚ਺Ͱ͋ͿΓग़͢ ͱߟ͑Δͱ෼͔Γ΍͍͢

Slide 31

Slide 31 text

ͲΜͳ࣌ʹ࢖͑Δʁ Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Ͱ͸

Slide 32

Slide 32 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ࢖͍Ͳ͜Ζ 1. ཚ਺Λར༻ͨ͠ΞϧΰϦζϜ 2. ରশੑͷ͋ΔΞϧΰϦζϜ 3. ߴ଎ vs ௿଎

Slide 33

Slide 33 text

ཚ਺Λར༻ͨ͠ΞϧΰϦζϜ Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 34

Slide 34 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ໎࿏ੜ੒ • ͲΜͳ໎࿏Ͱ΋ղ͚ͳ͍ͱ੒ཱ͠ͳ͍ • ʮඞͣղ͚Δʯͱ͍͏ੑ࣭Λݕূ͢Δ

Slide 35

Slide 35 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ໎࿏ੜ੒ • ͲΜͳ໎࿏Ͱ΋ղ͚ͳ͍ͱ੒ཱ͠ͳ͍ • ٯʹݴ͑͹ղ͚ͳ͍ͱόά • ʮඞͣղ͚Δʯͱ͍͏ੑ࣭Λݕূ͢Δ ྫ͑͹ Monkey Runner ΋ ϥϯμϜͳΠϕϯτΛൃߦ͠ଓ͚ ʮམͪͳ͍ʯੑ࣭Λݕূ͢Δ "OESPJEͷ

Slide 36

Slide 36 text

ରশੑͷ͋ΔΞϧΰϦζϜ Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 37

Slide 37 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Τϯίʔυ / σίʔυ • ͲΜͳ஋ΛΤϯίʔυ → σίʔυ ͯ͠΋ • ඞͣʮݩͷ஋ʹ໭Δʯͱ͍͏ੑ࣭Λݕূ

Slide 38

Slide 38 text

ߴ଎ vs ௿଎ Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 39

Slide 39 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ߴ଎ vs ௿଎ • ߴ଎ͳίʔυ͸଎͍ʢ͚Ͳෳࡶʣ • ௿଎ͳίʔυ͸໌നʢ͚Ͳ஗͍ʣ • ͲͪΒ΋ʮಉ݁͡ՌʹͳΔʯͱ͍͏ੑ࣭Λར༻ • લऀͷݕূʹޙऀΛར༻͢Δ

Slide 40

Slide 40 text

·ͱΊ Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 41

Slide 41 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͱΊ • KotlinTest ͸ ςεςΟϯάϑϨʔϜϫʔΫ • Property-based Testing ΋αϙʔτ • ϥϯμϜͳೖྗΛݩʹੑ࣭Λݕূ • Example-based Λஔ͖׵͑Δ΋ͷͰ͸ͳ͍

Slide 42

Slide 42 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ·ͱΊ • KotlinTest ͸ DSL Λ׆༻ͨ͠ςετϥΠϒϥϦ • Property-based Testing ΋αϙʔτ • ϥϯμϜͳೖྗΛݩʹੑ࣭Λݕূ • Example-based Λஔ͖׵͑Δ΋ͷͰ͸ͳ͍ ͱ͖ͬͭͮΒ͍ߟ͑ํ͕ͩ ͓֮͑ͯ͘ͱڧྗͳΧʔυ ࠷ॳ͸

Slide 43

Slide 43 text

એ఻ Copyright (C) DeNA Co.,Ltd. All Rights Reserved.

Slide 44

Slide 44 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͲͳͨͰ΋ొஃ0,ʂ

Slide 45

Slide 45 text

Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ͲͳͨͰ΋ొஃ0,ʂ DeNA ʹͯ 9/9ʢ݄ʣ 19:00 ʙ

Slide 46

Slide 46 text

Let’s try Property-based Testing Copyright (C) DeNA Co.,Ltd. All Rights Reserved. XJUI,PUMJO5FTU