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

Slides:



Advertisements
Liknende presentasjoner
Agile utviklere og firkanta driftere
Advertisements

HVA ER ?.
I.
Noen tema for samtaler om vennskap (Barnetrinnet)
Ebus Management Center En liten bruksanvisning for de enkleste funksjonene.
Fra ord til liv Mars 2011.
RAFT Prosjekt hørsel Leif Foss, NAV Lerkendal Marianne Simensen, NAV Sør-Trøndelag.
HVA ER ?.
Fra Ord til liv November 2009 “Det er lettere for en kamel å gå gjennom et nåløye enn for en rik å komme inn i Guds rike” (Mt 19,24).
Extreme Integration Oslo XP meetup, 22. mars, 2011 Johannes Brodwall.
MBS OmsorgsSkolen - Vennesla
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
NUUG.topic = Ruby.new Johannes Brodwall Takk til Dave Thomas for bruk av enkelte slides.
Hva var egentlig spørsmålet? Johannes Brodwall. FitNesse eksempel #1.
Navn, Tittel, LEDELSE Workshop. Hva hvis ledelse ikke fantes? Må vi ledes? Hvorfor må vi ledes? Hva er forskjellen med og uten ledelse?
MI – Motiverende intervju som hjelpemiddel ved livsstilsendring
Test-Drevet Utvikling Bowling med
Produkteier vs virksomhetsarkitekt
Smidighet vs ansvarsprosjekt Software 2012 Johannes Brodwall, Sjefsarkitekt Steria
Kontrakter i Smidig systemutvikling
 Galls lov og erstatningsprosjekter Johannes Brodwall Chief scientist, Steria.
Test-Drevet Utvikling Bowling med extremeprogramming.no.
Grunnleggende spørsmål om naturfag
Test-Drevet Utvikling Bowling med
Testene koster mer enn de smaker? Ole Morten Amundsen
Om smidig brukerkommunikasjon Smidig 2011 Johannes Brodwall Steria Norway.
Title of presentation Customer/user group/conference Johannes Brodwall, Chief scientist Exilesoft Global.
© PROGRAM UTVIKLING as Vellykkede prosjekter leverer hyppig Johannes Brodwall, Steria Chief Scientist, Utvikler, Arkitekt, Sertifisert ScrumMaster.
Mange IT-prosjekter kunne med fordel vært drevet mer som en Lean Startup.
Konfigurasjon - Kjekt å ha du får sikkert ikke bruk for det en vakker dag Anders Karlsen Steria.
Du blir ikke fortere ferdig ved å gjøre mange ting på en gang. Ketil Jensen.
  © Steria FitNesse som nyttig verktøy Smidig FitNesse som nyttig verktøy Anders Vindvad.
High Five Driven Development! Peder Søholt. Øk motivasjonen din! Vi speiler oss selv ofte i andres følelser Øk motivasjonen til andre, og du vil øke din.

Tormod Knutsen Avdelingsleder på Byggesaksavdelingen siden
  © Steria Hvordan bli en bedre utvikler? Johannes Brodwall, Chief scientist, Steria Cicero 23. juni, 2010.
  © Steria Å Lytte til koden Johannes Brodwall, Chief scientist, Steria Statkraft 16. april, 2010 Du kan lytte til koden.
  © Steria Å Lytte til koden Johannes Brodwall, Chief scientist, Steria Iterate 21. mai, 2010.
Tema: Test First Positivist: Det som ikke kan måles, eksisterer ikke! Reduserer sjanser for defekter! Gir en oppdatert ”TODO-liste” Gir trygghet til å.
Scrum APressen Johannes Brodwall, Sjefsarkitekt Steria Norway.
Stykkpriskontrakt Oslo XP meetup Johannes Brodwall, Bare en Programmerer Steria Norway.
ROOTS Johannes Brodwall, Kløne Steria Norway
Opplev smidig programmering
Johannes 21,11-19.
Getsemane – Matteus 26,36-56.
Johannes 14,1-11 veien, sannheten og livet
DÅP - hvem? - hva? - hvorfor?.
Nåde.
Diskusjonsopplegg om ungdom og alkohol - for foreldre med tenåringer
Fra ord til liv April 2010.
Den digitale leken -bare utenfor eller også innenfor barnehagen?
De 100 mest brukte ordene i bøker i klasse..
INF5270 7/2-05 Metadata Sten I. Solli og Hans S. Tømmerholt.
Fitnesse i PDMT 05. mai 2008 Finn-Robert Kristensen Systemarkitekt.
Misbruk av FitNesse XP Meetup Trond Arve Wasskog.
Lightning Talks Oslo XP meetup juli Johannes Brodwall.
Tema: Prosjektretrospektiver
Onsdag 13. mars Sam Eyde vgs
Hva er det vi har behov for å få hjelp til av spesialisthelsetjenesten? Av Per Willy Ormestad, Sosionom m/spesialkompetanse i sosialt arbeid på rusfeltet.
1 Innhold Prosjektet ”Bygg ned barrierene !” - formål - hovedfunn Hva betyr dette ?
Er uglen smart? Vi har forsket litt og her er svarene.
© Steria Deltagernes ”User Story” Som en din rolle i prosjekter Ønsker jeg å lære mer om ditt ønsketema Slik at jeg hvordan håper du kvelden skal forbedre.
Kontinuerlig kvalitetskontroll. Hvordan komme helt i mål.
Og.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Telenors satsing på fri programvare Paul Skrede - GoOpen 2009.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Kapittel 6 Kveldsmat hos familien Dalilah.
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
“Industrial approach for testing (2)” Teknikker og verktøy for testing i et Scrum-team Utdrag fra Skatteetatens teststrategi Sten Aksel Heien Skatteetatens.
Utskrift av presentasjonen:

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

(men oftere enn du tror)

…kvalitetsgaranti

Eksempel: FitNesse

103.38% testdekning

(ikke bekreftet)

Støtter ikke UTF-8

Netto tap for brukere

2. Mordet på FitNesse

Johannes Kodebase main test FitNesse

Johannes Kodebase main test FitNesse Hmmm….

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

Produktiv tid passerer….

Johannes Kodebase main test FitNesse Ah, endelig ferdig Utvikler

Johannes Kodebase main test FitNesse Hva med FitNesse? Utvikler

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

Johannes Kodebase main test FitNesse Kom visst borti noe Utvikler

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

Ikke-Produktiv tid passerer….

Neste morgen

Nesten ferdig med historien Johannes

Mangler bare FitNesse test Johannes

Samme her Johannes Hmmm….

Utvikler Hvorfor skriver vi FitNesse tester Hmmm… Johannes

Utvikler Det blir lissom JUnit-tester på nytt Johannes

Utvikler Litt vanskeligere å debugge… Johannes

Utvikler Men da bruker vi JUnit-testene. Johannes

Utvikler Har dere bruk for FitNesse testene? Hmmm… Johannes

Utvikler Tror testleder vil ha dem… Hmmm…. Johannes

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

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

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

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

Johannes Utvikler Hva gjør dere med FitNesse tester

Johannes Utvikler Beskrive manuelle tester

Johannes Utvikler Ja. Ugh!

When …

… stop digging!

3. Hvorfor BDD mislykkes

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16: MWh

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T13:00201…T16: MWh (missing)

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16:00700 MWh -700 MWh

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T14:00201…T15: MWh

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16: MWh NO2Z201…T15:00201…T16:00288 MWh (ekstra)

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T15:00201…T16: MWh NLb201…T15:00201…T16:00700 MWh (ekstra)

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 mellom 14:00 og 15:00, så skal følgende kraftbidrag blir registrert: OmrådeKnutepunktStartSluttEffekt NO3a201…T14:00201…T15: MWh Holy crap! Johannes

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

Hva er viktig med ”key examples?”

Kundedialog er essensielt

Automatisering er irrelevant

Ingen går i prod uten manuell test

4. Hvordan lykkes med TDD

1. Nøkkeleksempel

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

Nøkkeleksempel: Formål fremfor automatisering

De lo når jeg testet manuelt,

… men når det ikke var feil…

2. Enhetstest

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

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

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

Enhetstest: Formål fremfor oppførsel

3. Trening

Trening: Intensjon framfor tastetrykk

Kommunikasjon eller Automatisering

Ja, takk

Men ikke i samme test

Takk for meg!