Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertHege Iversen Endret for 9 år siden
1
TDD over BDD why and how XP meetup Johannes Brodwall, Programming artist Steria Norway
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)
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
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.