Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

TDD over BDD why and how XP meetup Johannes Brodwall, Programming artist Steria Norway.

Liknende presentasjoner


Presentasjon om: "TDD over BDD why and how XP meetup Johannes Brodwall, Programming artist Steria Norway."— Utskrift av presentasjonen:

1 TDD over BDD why and how XP meetup Johannes Brodwall, Programming artist Steria Norway

2

3

4 •Hva er TDD? •Hvem myrdet FitNesse? •Hvorfor vil BDD feile? •Et alternativ

5 1. TDD

6 Demo

7 TDD er…

8 …treningsform

9 …frigjøring av hjernekraft

10 …forståelse

11 TDD er ikke…

12 …alltid riktig

13 (men oftere enn du tror)

14 …kvalitetsgaranti

15 Eksempel: FitNesse

16 103.38% testdekning

17 (ikke bekreftet)

18

19 Støtter ikke UTF-8

20 Netto tap for brukere

21 2. Mordet på FitNesse

22 Johannes Kodebase main test FitNesse

23 Johannes Kodebase main test FitNesse Hmmm….

24 Johannes Kodebase main test FitNesse Litt rotete og tregt. Utvikler Enig. Let’s refactor!

25 Produktiv tid passerer….

26 Johannes Kodebase main test FitNesse Ah, endelig ferdig Utvikler

27 Johannes Kodebase main test FitNesse Hva med FitNesse? Utvikler

28 Johannes Kodebase main test FitNesse Burde gå greit… La oss se Utvikler

29 Johannes Kodebase main test FitNesse Kom visst borti noe Utvikler

30 Johannes Kodebase main test FitNesse Hva f… skjer her? Utvikler

31 Ikke-Produktiv tid passerer….

32 Neste morgen

33 Nesten ferdig med historien Johannes

34 Mangler bare FitNesse test Johannes

35 Samme her Johannes Hmmm….

36 Utvikler Hvorfor skriver vi FitNesse tester Hmmm… Johannes

37 Utvikler Det blir lissom JUnit-tester på nytt Johannes

38 Utvikler Litt vanskeligere å debugge… Johannes

39 Utvikler Men da bruker vi JUnit-testene. Johannes

40 Utvikler Har dere bruk for FitNesse testene? Hmmm… Johannes

41 Utvikler Tror testleder vil ha dem… Hmmm…. Johannes

42 Testleder Hva bruker vi FitNesse testene til? Johannes Utviklerne viser dem til meg når de er ferdige.

43 Testleder Johannes Og jeg tror kunden vil ha dem Hmmm….

44 Kundens arkitekt Johannes Få FitNesse tester er slik vi vil…

45 Johannes Jeg har ikke sett på FitNesse på måneder Produkteier

46 Johannes Utvikler Hva gjør dere med FitNesse tester

47 Johannes Utvikler Beskrive manuelle tester

48 Johannes Utvikler Ja. Ugh!

49 When …

50 … stop digging!

51 3. Hvorfor BDD mislykkes

52 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når systemet mottar en utveksling over linje 12 på 700 MWh for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16:00-700 MWh

53 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når systemet mottar en utveksling over linje 12 på 700 MWh for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T13:00201…T16:00-700 MWh (missing)

54 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når systemet mottar en utveksling over linje 12 på 700 MWh for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16:00700 MWh -700 MWh

55 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når systemet mottar en utveksling over linje 12 på 700 MWh for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T14:00201…T15:00-700 MWh

56 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når systemet mottar en utveksling over linje 12 på 700 MWh for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16:00-700 MWh NO2Z201…T15:00201…T16:00288 MWh (ekstra)

57 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når systemet mottar en utveksling over linje 12 på 700 MWh for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16:00-700 MWh NLb201…T15:00201…T16:00700 MWh (ekstra)

58 Gitt at linje 12 går fra knutepunkt a til knutepunkt b, og knutepunkt a ligger i NO3 og knutepunkt b ligger i NL, når en utveksling over linje 12 på 700 MWh registreres for 12.06.2011 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T14:00201…T15:00-700 MWh Holy crap! Johannes

59 Gitt en kraftlinje fra et norsk elspotområde til et utlandsk elspotområde, Når vi mottar en måling for linja så skal kun bidraget til det norske området registreres

60 Hva er viktig med ”key examples?”

61 Kundedialog er essensielt

62 Automatisering er irrelevant

63 Ingen går i prod uten manuell test

64 4. Hvordan lykkes med TDD

65 1. Nøkkeleksempel

66 Gitt en kraftlinje fra et norsk elspotområde til et utlandsk elspotområde, Når vi mottar en måling for linja så skal kun bidraget til det norske området registreres

67 Nøkkeleksempel: Formål fremfor automatisering

68 De lo når jeg testet manuelt,

69 … men når det ikke var feil…

70 2. Enhetstest

71 @Test public void shouldCreatePerson() throws Exception { Connection connMock = mock(Connection.class); PreparedStatement statementMock = mock( PreparedStatement.class ); when(connMock.prepareStatement(anyString())).thenReturn(statementMock); Person person = Person.withName("Darth", "Vader"); personDao.createPerson(person); ArgumentCaptor sqlCaptor = ArgumentCaptor.forClass(String.class) ; verify(connMock.prepareStatement(sqlCaptor.capture())); assertThat(sqlCaptor.getValue()).contains("insert into table person"); verify(statementMock).setString(1, "Darth"); verify(statementMock).setString(2, "Vader"); } NEVER do this!

72 @Test public void shouldLimitFindToQuery() throws Exception { personDao.beginTransaction(); Person matchingPerson = Person.withName("Darth", "Vader"); Person nonMatchingPerson = Person.withName("Darth", “Maul"); personDao.createPerson(matchingPerson); personDao.createPerson(nonMatchingPerson); assertThat(personDao.findPeople("vader")).contains(matchingPerson).excludes(nonMatchingPerson); }

73 @Test public void shouldLimitFindToQuery() { Person match = Person.withName("Darth", "Vader"); Person nonMatch = Person.withName("Darth", “Maul"); personDao.createPerson(match); personDao.createPerson(nonMatch); assertThat(personDao.findPeople("vader")).contains(match).excludes(nonMatch); }

74 Enhetstest: Formål fremfor oppførsel

75 3. Trening

76 Trening: Intensjon framfor tastetrykk

77 Kommunikasjon eller Automatisering

78 Ja, takk

79 Men ikke i samme test

80 Takk for meg! johannes.brodwall@steria.no http://johannesbrodwall.com http://sterkblanding.no http://twitter.com/jhannes


Laste ned ppt "TDD over BDD why and how XP meetup Johannes Brodwall, Programming artist Steria Norway."

Liknende presentasjoner


Annonser fra Google