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

TDD over BDD why and how

  • Upload
    keola

  • View
    60

  • Download
    0

Embed Size (px)

DESCRIPTION

TDD over BDD why and how. XP meetup Johannes Brodwall, Programming artist Steria Norway. Hva er TDD? Hvem myrdet FitNesse ? Hvorfor vil BDD feile? Et alternativ. 1. TDD. Demo. TDD er…. …treningsform. …frigjøring av hjernekraft. …forståelse. TDD er ikke…. …alltid riktig. - PowerPoint PPT Presentation

Citation preview

Page 1: TDD over BDD why  and  how

TDD over BDDwhy and how

XP meetupJohannes Brodwall, Programming artist

Steria Norway

Page 2: TDD over BDD why  and  how
Page 3: TDD over BDD why  and  how
Page 4: TDD over BDD why  and  how

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

Page 5: TDD over BDD why  and  how

1. TDD

Page 6: TDD over BDD why  and  how

Demo

Page 7: TDD over BDD why  and  how

TDD er…

Page 8: TDD over BDD why  and  how

…treningsform

Page 9: TDD over BDD why  and  how

…frigjøring av hjernekraft

Page 10: TDD over BDD why  and  how

…forståelse

Page 11: TDD over BDD why  and  how

TDD er ikke…

Page 12: TDD over BDD why  and  how

…alltid riktig

Page 13: TDD over BDD why  and  how

…alltid riktig(men oftere enn du tror)

Page 14: TDD over BDD why  and  how

…kvalitetsgaranti

Page 15: TDD over BDD why  and  how

Eksempel:FitNesse

Page 16: TDD over BDD why  and  how

103.38% testdekning

Page 17: TDD over BDD why  and  how

103.38% testdekning(ikke bekreftet)

Page 18: TDD over BDD why  and  how
Page 19: TDD over BDD why  and  how

Støtter ikke UTF-8

Page 20: TDD over BDD why  and  how

Netto tap for brukere

Page 21: TDD over BDD why  and  how

2. Mordet på FitNesse

Page 22: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Page 23: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Hmmm….

Page 24: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Litt rotete og tregt.

Utvikler

Enig. Let’s refactor!

Page 25: TDD over BDD why  and  how

Produktiv tid passerer….

Page 26: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Ah, endelig ferdig

Utvikler

Page 27: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Hva med FitNesse?

Utvikler

Page 28: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Burde gå greit… La

oss se

Utvikler

Page 29: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Kom visst borti noe

Utvikler

Page 30: TDD over BDD why  and  how

Johannes

Kodebase

maintest

FitNesse

Hva f… skjer her?

Utvikler

Page 31: TDD over BDD why  and  how

Ikke-Produktiv tid passerer….

Page 32: TDD over BDD why  and  how

Neste morgen

Page 33: TDD over BDD why  and  how

Nesten ferdig med historien

Johannes

Page 34: TDD over BDD why  and  how

Mangler bare FitNesse test

Johannes

Page 35: TDD over BDD why  and  how

Samme herJohannes

Hmmm….

Page 36: TDD over BDD why  and  how

Utvikler

Utvikler

Hvorfor skriver vi FitNesse tester

Hmmm…

Johannes

Page 37: TDD over BDD why  and  how

Utvikler

Utvikler

Det blir lissom JUnit-tester på

nytt

Johannes

Page 38: TDD over BDD why  and  how

Utvikler

Utvikler

Litt vanskeligere å debugge…

Johannes

Page 39: TDD over BDD why  and  how

Utvikler

Utvikler

Men da bruker vi JUnit-testene.

Johannes

Page 40: TDD over BDD why  and  how

Utvikler

Utvikler

Har dere bruk for FitNesse testene?

Hmmm…

Johannes

Page 41: TDD over BDD why  and  how

Utvikler

Utvikler

Tror testleder vil ha dem…

Hmmm….Johannes

Page 42: TDD over BDD why  and  how

Testleder

Hva bruker vi FitNesse testene

til?

Johannes

Utviklerne viser dem til meg når de er ferdige.

Page 43: TDD over BDD why  and  how

Testleder

Johannes

Og jeg tror kunden vil ha

dem

Hmmm….

Page 44: TDD over BDD why  and  how

Kundens arkitekt

Johannes

Få FitNesse tester er slik vi

vil…

Page 45: TDD over BDD why  and  how

Johannes

Jeg har ikke sett på FitNesse på

måneder

Produkteier

Page 46: TDD over BDD why  and  how

Johannes

Utvikler

Utvikler

Hva gjør dere med FitNesse

tester

Page 47: TDD over BDD why  and  how

Johannes

Utvikler

Utvikler

Beskrive manuelle tester

Page 48: TDD over BDD why  and  how

Johannes

Utvikler

Utvikler

Ja. Ugh!

Page 49: TDD over BDD why  and  how

When …

Page 50: TDD over BDD why  and  how

… stop digging!

Page 51: TDD over BDD why  and  how

3. Hvorfor BDD mislykkes

Page 52: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T15:00 201…T16:00 -700 MWh

Page 53: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,

og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T13:00 201…T16:00 -700 MWh

(missing)

Page 54: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,

og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T15:00 201…T16:00 700 MWh

-700 MWh

Page 55: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,

og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T14:00 201…T15:00 -700 MWh

Page 56: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,

og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T15:00 201…T16:00 -700 MWh

NO2 Z 201…T15:00 201…T16:00 288 MWh (ekstra)

Page 57: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,

og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T15:00 201…T16:00 -700 MWh

NL b 201…T15:00 201…T16:00 700 MWh (ekstra)

Page 58: TDD over BDD why  and  how

Gitt at linje 12 går fra knutepunkt a til knutepunkt b,og knutepunkt a ligger i NO3og 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åde Knutepunkt Start Slutt EffektNO3 a 201…T14:00 201…T15:00 -700 MWh

Holy crap!

Johannes

Page 59: TDD over BDD why  and  how

Gitt en kraftlinje fra et norsk elspotområde til et utlandsk elspotområde,

Når vi mottar en måling for linjaså skal kun bidraget til det norske

området registreres

Page 60: TDD over BDD why  and  how

Hva er viktig med ”key examples?”

Page 61: TDD over BDD why  and  how

Kundedialog er essensielt

Page 62: TDD over BDD why  and  how

Automatisering er irrelevant

Page 63: TDD over BDD why  and  how

Ingen går i prod uten manuell test

Page 64: TDD over BDD why  and  how

4. Hvordan lykkes med TDD

Page 65: TDD over BDD why  and  how

1. Nøkkeleksempel

Page 66: TDD over BDD why  and  how

Gitt en kraftlinje fra et norsk elspotområde til et utlandsk elspotområde,

Når vi mottar en måling for linjaså skal kun bidraget til det norske

området registreres

Page 67: TDD over BDD why  and  how

Nøkkeleksempel:Formål fremfor automatisering

Page 68: TDD over BDD why  and  how

De lo når jeg testet manuelt,

Page 69: TDD over BDD why  and  how

… men når det ikke var feil…

Page 70: TDD over BDD why  and  how

2. Enhetstest

Page 71: TDD over BDD why  and  how

@Testpublic 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!

Page 72: TDD over BDD why  and  how

@Testpublic 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);}

Page 73: TDD over BDD why  and  how

@Testpublic 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);}

Page 74: TDD over BDD why  and  how

Enhetstest:Formål fremfor oppførsel

Page 75: TDD over BDD why  and  how

3. Trening

Page 76: TDD over BDD why  and  how

Trening:Intensjon framfor

tastetrykk

Page 77: TDD over BDD why  and  how

Kommunikasjoneller

Automatisering

Page 78: TDD over BDD why  and  how

Ja, takk

Page 79: TDD over BDD why  and  how

Men ikke i samme test

Page 80: TDD over BDD why  and  how

Takk for [email protected]

http://johannesbrodwall.comhttp://sterkblanding.no

http://twitter.com/jhannes