Slide 1

Slide 1 text

·ͩ·ͩؒʹ߹͏ +6OJU ࠶ ೖ໳ ࢁຊϢʔεέ KKVH@DDDDDD@H

Slide 2

Slide 2 text

ࢁຊϢʔεέ!ZVTVLF w+BWBνϟϯϐΦϯ w%VLFT$IPJDF"XBSEड৆

Slide 3

Slide 3 text

ྑ͋͘Δ։ൃ޻ఔ ઃܭ ࣮૷ ςετ σόοά ӡ༻ ཁ݅ఆٛ

Slide 4

Slide 4 text

։ൃͷ࣮ࡍ Yʙ㱣 ઃܭ ࣮૷ ςετ σόοά ӡ༻ ཁ݅ఆٛ

Slide 5

Slide 5 text

ʮςετ޻ఔʯͷ໰୊ w ਓ͕ؒߦ͏ςετͷ৴པੑ w ίετɺ࣌ؒͷ੍ݶ͔Βճؼςετ͕೉͍͠ w σόοά׬ྃΛ։ൃऀ͕֬ೝ͠ͳ͍ w όάΛࢦఠ͞ΕΔ৺ཧతμϝʔδ w ςετ޻ఔཁһͷͨΊʹόάΛ࢒͢ʜʁ

Slide 6

Slide 6 text

ςετΛࣗಈԽ w ਓؒΑΓ΋ߴ͍৴པੑ৴པੑ w ճؼςετΛݱ࣮తͳίετͰ࣮ݱՄ ೳ w σόοά׬ྃΛ࣮૷࣌ʹ֬ೝ w σόοάָ͕͘͠ͳΔ

Slide 7

Slide 7 text

+6OJUͱ͸ wUIFQSPHSBNNFSGSJFOEMZUFTUJOH GSBNFXPSLGPS+BWB wʮ+BWB޲͚ͷϓϩάϥϚϑϨϯυϦͳ ςετϑϨʔϜϫʔΫʯ IUUQTKVOJUPSHKVOJU

Slide 8

Slide 8 text

+6OJUͱ͸ w+BWBίʔυͷςετΛ؆୯ʹ͢Δϑ ϨʔϜϫʔΫ +BWB +6OJUɺ5FTU/( 1ZUIPO VOJUUFTU 1)1 1)16OJU 3VCZ UFTUVOJUɺ34QFD $ /6OJUɺ.45FTU ओཁݴޠͷςετϑϨʔϜϫʔΫ

Slide 9

Slide 9 text

ࠓճͷςετର৅'J[[#V[[ w ʙ·Ͱͷ਺ࣈʹ͍ͭͯʜ w ͷഒ਺ͷ৔߹'J[[ΛϓϦϯτ w ͷഒ਺#V[[ΛϓϦϯτ w ͲͪΒͰ΋ͳ͍৔߹਺ࣈΛϓϦϯτ

Slide 10

Slide 10 text

ࠓճͷςετର৅'J[[#V[[ public class FizzBuzz { public static void main(String[] args){ for(int i=0;i<100;i++){ System.out.println(fizzBuzz(i)); } } public static String fizzBuzz(int number) { // ͜͜Λ࣮૷ } }

Slide 11

Slide 11 text

࠷খݶͷ+6OJUςετ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } }

Slide 12

Slide 12 text

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } } Ξϊςʔγϣϯ Ξαʔγϣϯϝιου +6OJUςετͷେࣄͳೋཁૉ

Slide 13

Slide 13 text

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } } @TestΞϊςʔγϣϯ ςετΛߦ͏ϝιουͩͱએݴ

Slide 14

Slide 14 text

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } } assertEquals(a, b) b͕aͱ౳͍͜͠ͱΛओு

Slide 15

Slide 15 text

όά͍ͬͯΔ࣮૷ public class FizzBuzz { public static void main(String[] args){ for(int i=0; i<100; i++){ System.out.println(fizzBuzz(i)); } } public static String fizzBuzz(int number) { return "Fizz"; } } p[[#V[[͕'J[[͔͠ฦ͞ͳ͍

Slide 16

Slide 16 text

όά͍ͬͯΔ࣮૷ͷ+6OJU࣮ߦ݁Ռ

Slide 17

Slide 17 text

όά͍ͬͯΔ࣮૷ͷ+6OJU࣮ߦ݁Ռ IDEͰςετ࣮ߦɺࣦഊͨ͠ςετΛҰཡ

Slide 18

Slide 18 text

+6OJU࣮ߦ݁Ռ assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15));

Slide 19

Slide 19 text

ςετΛॆ࣮ͤ͞Δ class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(45)); assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(60)); } @Test void fizz {} @Test void buzz {} @Test void number {} }

Slide 20

Slide 20 text

class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(45)); assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(60)); } @Test void fizz {} @Test void buzz {} @Test void number {} } ςετΛॆ࣮ͤ͞Δ ςετύλʔϯΛ૿΍͢ͱ඼࣭͕޲্ ςετϝιου͸Կݸ͋ͬͯ΋ྑ͍ Ξαʔγϣϯ͸Կݸ͋ͬͯ΋ྑ͍

Slide 21

Slide 21 text

class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(45)); assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(60)); } @Test void fizz {} @Test void buzz {} @Test void number {} } ςετΛॆ࣮ͤ͞Δ ςετύλʔϯΛ૿΍͢ͱ඼࣭͕޲্ ςετϝιου͸Կݸ͋ͬͯ΋ྑ͍ Ξαʔγϣϯ͸Կݸ͋ͬͯ΋ྑ͍ assertϝιουͰ࠷ॳʹࣦഊͨ͠ ͱ͜ΖͰςετϝιουͷ࣮ߦ͸ఀࢭ

Slide 22

Slide 22 text

ϓϩδΣΫτʹ͓͚Δ+6OJUͷઃఆ

Slide 23

Slide 23 text

.BWFOͷ৔߹ w QPNYNMʹґଘΛهड़

Slide 24

Slide 24 text

(SBEMFͷ৔߹ w CVJMEHSBEMFʹґଘΛهड़

Slide 25

Slide 25 text

+6OJUςετͷ࣮ߦํ๏

Slide 26

Slide 26 text

+6OJUςετͷ࣮ߦ w *%&͔Β w ίϚϯυϥΠϯ͔Β w $*αʔό͔Β

Slide 27

Slide 27 text

+6OJUςετͷ࣮ߦ*%&͔Β w ࠷΋Ұൠత w ଟ͘ͷ*%&Ͱ͸(6*Ͱ࣮ߦՄೳ

Slide 28

Slide 28 text

+6OJUςετͷ࣮ߦίϚϯυϥΠϯ͔Β w .BWFO΍(SBEMFΛ࢖͏ NWOUFTU HSBEMFUFTU

Slide 29

Slide 29 text

୅දతͳΞαʔγϣϯϝιου w BTTFSU&RVBMT B C BͱC͕౳͍͠ w BTTFSU5SVF B B͕USVF w BTTFSU'BMTF B B͕GBMTF w BTTFSU/VMM B B͕OVMM w BTTFSU/PU/VMM B B͕OVMMͰͳ͍

Slide 30

Slide 30 text

୅දతͳΞϊςʔγϣϯ w !5FTUςετϝιουͷϚʔΫ ຖςετϝιουલޙʹॲཧ w !#FGPSF&BDI֤ςετͷલʹॲཧ w !"GUFS&BDI֤ςετͷޙʹॲཧ ΫϥεͰҰ౓͚ͩॳظԽޙॲཧ w !#FGPSF"MMશςετͷલʹॲཧ w !"GUFS"MMશςετͷޙʹॲཧ

Slide 31

Slide 31 text

σϞ

Slide 32

Slide 32 text

Ҏલͷόʔδϣϯͷ+6OJU

Slide 33

Slide 33 text

+6OJUͷόʔδϣϯ w +6OJUY޿͘ීٴ w +6OJUYΞϊςʔγϣϯಋೖ w +6OJUYϥϜμࣜಋೖ

Slide 34

Slide 34 text

+VOJUYͱ+6OJUYͷҧ͍

Slide 35

Slide 35 text

+VOJUY w Ξϊςʔγϣϯ͕Ұ෦ҧ͏ w ςετΫϥεɺϝιου͸QVCMJD w )BNDSFTU BTTFSU5IBU Ϛονϟʔ͕ಉࠝ

Slide 36

Slide 36 text

+6OJUYͱ+6OJUY +6OJUY +6OJUY !#FGPSF !#FBGPSF&BDI !"GUFS !"GUFS&BDI !#FGPSF$MBTT !#FGPSF"MM !"GUFS$MBTT !"GUFS"MM Ξϊςʔγϣϯͷҧ͍

Slide 37

Slide 37 text

+6OJUYͱ+6OJUY IBNDSFTUΞαʔγϣϯ assertThat(a, equalTo(b)); assertEquals(b, a); JUnit 5Ͱ΋ґଘΛ௥Ճ͢Ε͹hamcrest͸ར༻Մೳ JUnit 4.x JUnit 5.x JUnit 4.xͰ΋assertEqualsͳͲ͸ඪ४Ͱར༻Մೳ

Slide 38

Slide 38 text

class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } } public class FizzBuzzTest { @Test public void fizzBuzz { assertThat(FizzBuzz.fizzBuzz(15), equalTo("FizzBuzz")); } } JUnit 4.x JUnit 5.x

Slide 39

Slide 39 text

+VOJUYͱ+6OJUYͷҧ͍

Slide 40

Slide 40 text

+VOJUY w Ξϊςʔγϣϯ͕ͳ͍ w ςετΫϥε͸5FTU$BTFΛܧঝ w ςετϝιου͸UFTUͰ࢝ΊΔ w ςετΫϥεɺϝιου͸QVCMJD

Slide 41

Slide 41 text

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class FizzBuzzTest { @Test void fizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } } import junit.framework.TestCase; public class FizzBuzzTest extends TestCase { public void testFizzBuzz { assertEquals("FizzBuzz",FizzBuzz.fizzBuzz(15)); } } JUnit 3.x JUnit 5.x

Slide 42

Slide 42 text

ςετͷίπ

Slide 43

Slide 43 text

ςετͷίπ ςετΛઌʹॻ͘

Slide 44

Slide 44 text

ςετΛઌʹॻ͘ w ςετࣦഊΛ֬ೝ͔ͯ͠Β࣮૷

Slide 45

Slide 45 text

ςετΛઌʹॻ͘ w ςετࣦഊΛ֬ೝ͔ͯ͠Β࣮૷ ޙ͔ΒςετΛॻ͘ͱ࣮૷಺༰ʹؔΘΒͣ ੒ޭ͢Δςετʹͳͬͯ͠·͏͜ͱ͕ɾɾɾ

Slide 46

Slide 46 text

TDD: Test Driven Development Test Early Fail Fast

Slide 47

Slide 47 text

ςετͷίπ ෼͔Γ΍͍͢ ςετϝιου໊

Slide 48

Slide 48 text

෼͔Γ΍͍͢ςετϝιου໊ @Test void orderInfo1 {…} @Test void orderInfo2 {…} ςετ಺༰͕෼͔Βͳ͍ςετϝιου໊

Slide 49

Slide 49 text

෼͔Γ΍͍͢ςετϝιου໊ @Test void ड஫લʹ੥ٻঢ়ଶʹ͸ભҠͰ͖ͳ͍ {…} @Test void લ෷͍ͷ͓٬༷ʹ͸੥ٻॻͰ͸ͳ͘ೲ඼ॻΛൃߦ {…} @Test void orderInfo1 {…} @Test void orderInfo2 {…} ςετ಺༰͕෼͔Βͳ͍ςετϝιου໊ ςετ಺༰͕ࣗ໌ͳςετϝιου໊

Slide 50

Slide 50 text

@Test void ड஫લʹ੥ٻঢ়ଶʹ͸ભҠͰ͖ͳ͍ {…} @Test void લ෷͍ͷ͓٬༷ʹ͸੥ٻॻͰ͸ͳ͘ೲ඼ॻΛൃߦ {…} @Test void orderInfo1 {…} @Test void orderInfo2 {…} ςετ಺༰͕෼͔Βͳ͍ςετϝιου໊ ςετ಺༰͕ࣗ໌ͳςετϝιου໊ ෼͔Γ΍͍͢ςετϝιου໊ ϓϩδΣΫτϝϯόʔશһ೔ຊޠʹתೳͰ͋ Ε͹ϝιου໊͸೔ຊޠͰ΋OK

Slide 51

Slide 51 text

ςετͷίπ ςετϝιου಺ʹ BTTFSUJPOΛॻ͖͗͢ͳ͍

Slide 52

Slide 52 text

ϝιου಺ʹBTTFSUJPOΛॻ͖͗͢ͳ͍ w ΄Ͳ΄Ͳʹ·ͱ·ͬͨ୯ҐͰ w ඞཁʹԠͯ͡BTTFSU"MMΛར༻

Slide 53

Slide 53 text

BTTFSU"MM import static FizzBuzz.* class FizzBuzzTest { @Test void fizzBuzz { assertAll( () -> assertEquals("Fizz", fizzBuzz(3)), () -> assertEquals("Buzz", fizzBuzz(5)), () -> assertEquals("7", fizzBuzz(7)), () -> assertEquals("FizzBuzz", fizzBuzz(15)) ); } ϥϜμࣜΛ࢖ͬͯ·ͱΊͯݕূ ࣦഊ͢ΔΞαʔγϣϯ͕͋ͬͯ΋શͯݕূ

Slide 54

Slide 54 text

BTTFSU"MM assertAll಺ͷࣦഊͨ͠assertશ͕ͯใࠂ͞ΕΔ

Slide 55

Slide 55 text

ςετͷίπ̐ ΧόϨοδʢ໢ཏ౓ʣ ʹͩ͜ΘΓ͗͢ͳ͍

Slide 56

Slide 56 text

ΧόϨοδʹͩ͜ΘΓ͗͢ͳ͍ w ΧόϨοδ࣮ߦՄೳͳߦͷ͏ͪɺςε τΛ࣮ࢪͨ͠ߦͷׂ߹ w *%&΍$*ͰଌఆՄೳ w HFUUFSTFUUFSͷςετ͸ෆཁ w ࣮ূࡁΈίʔυ ஶ໊ϥΠϒϥϦͳͲ ͷ ڍಈ͸ςετ͠ͳ͍

Slide 57

Slide 57 text

ςετΛ༏ઌతʹॻ͘΂͖ର৅ w ࣮૷͕ෆ҆ͳՕॴ w όάɺϦάϨογϣϯ͕ൃੜ͠ ͦ͏ͳՕॴ w ϦϑΝΫλϦϯάΛࢪ͢Օॴ

Slide 58

Slide 58 text

QSJWBUFϝιουͷςετ͸ʁ w QBDLBHFQSJWBUFʹ w ޡ༻͕৺഑ͳ৔߹͸ίϝϯτ

Slide 59

Slide 59 text

ςετΛ࢝ΊΑ͏

Slide 60

Slide 60 text

ςετΛ࢝ΊΔ w खಈςετ͕ඪ४ͳͷͰ೉͍͠ʁ

Slide 61

Slide 61 text

ςετΛ࢝ΊΔ w खಈςετ͕ඪ४ͳͷͰ೉͍͠ʁ w ̍ਓͰ΋࢝ΊΒΕ·͢

Slide 62

Slide 62 text

ςετΛ࢝ΊΔ w ςετΛॻ͘෼༨ܭʹ͕͔͔࣌ؒΔͷͰ͸ʁ

Slide 63

Slide 63 text

ςετΛ࢝ΊΔ w ςετΛॻ͘෼༨ܭʹ͕͔͔࣌ؒΔͷͰ͸ʁ w Ή͠Ζૣ͘ͳΓ·͢

Slide 64

Slide 64 text

ςετ͕श׳Խͨ͠Β

Slide 65

Slide 65 text

$* $POUJOVPVT*OUFHSBUJPO w +FOLJOTɺ$JSDMF$*ɺ5FBN$JUZ w ςετ࣮ߦΛࣗಈԽ w ςετ࣮ߦͷ࿙Ε͕ͳ͘ͳΔ w ςετ׬ྃΛ଴ͨͣʹผͷ࡞ۀ͕Ͱ͖Δ

Slide 66

Slide 66 text

4FMFOJVN w ϩδοΫ͚ͩͰͳ͘ɺ8FCΞϓϦέʔγϣϯ ͷૢ࡞΋ςετՄೳ w ϑΥʔϜೖྗ w εΫϦʔϯγϣοτ

Slide 67

Slide 67 text

࣭໰ʁ

Slide 68

Slide 68 text

͋Γ͕ͱ͏͍͟͝·ͨ͠