Testdriven utveckling. Teorin bakom testdriven utveckling. Bakgrund. Januari 2009, KTH. Alexander Tarnowski

Relevanta dokument
Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Agil programutveckling

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

Xpmetodik inom Enterpriseutveckling

Separation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

Agil projektmetodik Varför och vad är det?

Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Den Röda Tråden. Vi kan ta fram arkitekturkrav. Vi kan ta fram arkitektur och design. Vi kan skriva Clean Code KRAV DESIGN IMPLEMENT VISION TEST

12 principer of agile practice (rörlig)

Kvalitetssäkra ditt projekt med kontinuerlig integration

Några grundläggande begrepp

F4 Testning och Parprogrammering i XP. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson,Datavetenskap, LTH

Linköpings universitet 1 TDP029. Systemutveckling. Systemutveckling. Vanliga faser. Fler faser. Systemutvecklingsmetod

Therese Hansson & Magnus Jonsson. Motivationsfaktorer - Test inom Agila utvecklingsprojekt

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

F4 Testning och Parprogrammering i XP EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson,Datavetenskap, LTH

Linköpings universitet 1

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH

F2 XP Extrem Programmering översikt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson, Görel Hedin Datavetenskap, LTH

Javautvecklare. Utbildningsfakta. 400 YH-poäng, 2 år

Deluppgift 2 Kravhantering a) (2p) När man diskuterar krav brukar man ange två olika typer av krav. Beskriv dessa och ge exempel.

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Scaled Agile Framework

Note to programmers. Embrace Change! Extreme Programming? Fyra basaktiviteter. 12 Practices / sedvanor. Vad är Extreme Programming

Kanban. Marcus Hammarberg. torsdag den 15 september 2011 (v.)

Praktiker som knäcker koden

Några principer för effektiv enhetstestning

XP-projekt: En fördjupning

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Översikt. Fö: Projekt: Interaktivt system. Projekt. Mål. Coachning. Praktiker att använda

Testdriven utveckling av Web Services. Ole Matzura

extreme Programming refactored - recension och analys av Kent Becks senaste definition av XP

Enhetstester på.netplattformen

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Reijo Soréus. NyA. Presentation för Ladok-Inkubator Göteborg

Föreläsning 23. Tobias Wrigstad. Refaktorering

Agil testning i SCRUM

Vad betyder TDD? Test Driven Design?

Föreläsning 10: Introduktion till utvärdering. Rogers et al. Kapitel 12

Arkitektur. Den Röda Tråden

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015

AGILA METODER. (för oss som inte kodar) Nina Berlin

KravinsamlingAnalys Design Implementation Testning

Testautomatisering. Labbar, FitNesse, TDD, BDD

Aktivitet ett: Kommunicera! Aktiviteter i praktiken. Parprogrammering. Aktiviteter. Parprogrammeringens sju myter. Parprogrammeringens sju myter

Erfarenheter av automatiserad testning

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Projektkaos. Chaos-rapporten. 34% av projekten avslutades i tid och enligt budget % misslyckades!

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Föreläsning 8, Design

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Om fem stycken :GameObject ligger i vägen för b:bullet så kommer alltid loopen köras fem gånger. Välj ett alternativ

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Kursöversikt Certifierad Mjukvarutestare

TDP023 Projekt: Agil systemutveckling

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Installation av F13 Bråvalla

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Dr. Gustav Taxén MDI-Gruppen, CSC / VIC-Sthlm gustavt@kth.se

Förändringskontroll i XP-team. Love Johansson (d00lj), Joakim Persson (d00jp)

Användarcentrerad systemdesign

Teknisk testning för otekniska testare

Testning av program. Verklig modell för programutveckling

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Versionshantering. Jan Erik Moström

Pragmatisk programmering. Cyberrymden Marcus Rejås Pragmatisk programmering,19 september (26)

Labb 1: Vad, hur, och varför?

Planeringsspelets mysterier, del 1

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Presentation. Fredrik Runnsjö 1996 Utvecklare 2004 Testare ~2006 Scrum/Canban

WEBBSERVERPROGRAMMERING

Testdriven utveckling i industrimiljö

Testautomatisering. BDD, RSpec

Pragmatisk programmering. Cyberrymden Marcus Rejås Pragmatisk programmering,16 december (29)

Urbanisering: Ökad koncentration pengar; människor; makt; bebyggelse

Hur leder vi transformationer?

Refaktorisering i ett XP-projekt

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Del av projektuppgiften. Systemarkitektprogrammet

Vad händer med L3: ΔL3-L4 för Krav följs upp av annan projektgrupp. Föreläsning 5: V&V II + Design II Efterläsning Kodning

Webbserverprogrammering

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

TDDI02. På denna föreläsning: Programmeringsprojekt, Föreläsning 3. Verifikation, validering och testning

Presentation Edument AB. All Rights Reserved.

Scrum med XP-relaterade tekniker

AGIL KRAVHANTERING. Hitta behoven bakom kraven!! Thomas Nilsson! Agile Coach & Mentor! CTO, Responsive

F9 del B Organisatoriskt. EDAF45 Programvaruutveckling i grupp Projekt Boris Magnusson Datavetenskap, LTH

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Objektorienterad Programmering DAT043. Föreläsning 10 13/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 2: Introduktion till utvärdering varför ska vi utvärdera?

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Transkript:

Testdriven utveckling Januari 2009, KTH Alexander Tarnowski Teorin bakom testdriven utveckling Bakgrund Testdriven utveckling började nämnas kring 1999-2000 av Kent Beck I praktiken implementationen av XP:s test first Målet är Clean code that works Ses som ett verktyg för hantering av rädsla och osäkerhet i utvecklingsprocessen Baserat på enhetstest (unit tests) 1

Testdriven utveckling och XP Värderingar Kommunikation Enkelhet Feedback Mod Respekt Praktiker Sitta tillsammans Teamet Informativ arbetsplats Energized work Parprogrammering Stories Veckocykeln Principer Kvartalscykeln Slack Bygga på 10 minuter Continuous integration Testa först Inkrementell design TDD strävar efter: Clean code that works Ron Jeffries Förutsägbarhet. Ingen projektsvans! Dina kolleger litar på dig, och du på dem Lär dig allt du kan av koden Omedelbar feedback Kul att skriva Förutsägbarhet 2

TDD reducerar: rädsla (och osäkerhet) Rädsla gör oss osäkra Rädsla får oss att kommunicera mindre Rädsla påverkar vår förmåga att ta emot feedback Rädsla gör oss otrevliga TDD bygger på unit tests Enhetstester... Visar att isolerade komponenter av program fungerar Är isolerade från varandra Och är inte... Prestandatester Stresstester Användbarhetstester <Stoppa in favorit-buzzword som slutar med tester här> Metodologin Skriv ett test som misslyckas Få testet att köra Ta bort duplicering 3

TDD:s utvecklingscykel Att skriva ny kod endast om ett automatiserat test misslyckas Och därefter ta bort duplicering Leder till och kräver: Organisk design: körbar kod ger feedback och driver utvecklingen framåt Design med high cohesion och loose coupling Att utvecklarna måste skriva sina egna test Utvecklingsmiljön måste ge snabb feedback Vad är ett test Testa = utvärdera Vilken logik testar vi? Vilka testdata väljer vi? Bäst att upprepa: tester ska vara oberoende! Vilken logik testar vi Testa: Villkor Iterationer Sekventiella operationer Polymorfism Testa inte: Tredje parts kod (t ex att JDBC eller en applikationsserver fungerar) Too simple to break 4

Vilka testdata väljer vi? Enkla assertequals(5, calc.plus(2, 3)); mot assertequals(12517294, calc.plus(11286060, 1231234)); Relevanta @Test(expected=NullPointerException.class) public void testinsert() { insertintodatabase(null); } kanske inte är bästa testet för void insertintodatabase(transferobject o) {... } Självförklarande final int addend = 2; final int augend = 3; assertequals(addend + augend, calc.plus(addend, augend)); Testtekniker Vi tar oss från rött till grönt genom att: Fejka Uppenbara implementationen Triangulering Teknik 1: Fejka TestCalculator.java assertequals(4, calculator.plus(3,1)); Calculator.java int plus(int augend, int addend) { return 4; } 5

Teknik 2: Uppenbara implementationen Man får faktiskt göra så TestCalculator.java assertequals(4, calculator.plus(3,1)); Calculator.java int plus(int augend, int addend) { return augend + addend; } Teknik 3: Triangulering Generalisera om vi har två eller fler fall Använd i svårare fall! TestCalculator.java assertequals(4, calculator.plus(3,1)); assertequals(8, calculator.plus(4,4)); Calculator.java int plus(int augend, int addend) { return???; } Dåliga tester Mycket setupkod = för stora och komplicerade objekt Duplicerad setup = för många objekt, för hårt kopplade Långa test = kommer inte att köras, åldras och blir fel 6

Varför reducera duplicering? Urholkar den konceptuella integriteten Försvårar underhåll Vanligaste exemplet: duplicerad logik Näst vanligaste: copy n paste kod Beroende är sjukdomen, dupliceringen symptomet För en gångs skull! Eliminerar vi symptomet (dupliceringen) minskar vi beroendet (sjukdomen) Hur stora steg ska man ta? Test transformerar ett abstrakt problem till att få testet att funka Storleken på stegen beror på osäkerheten Vi slutar testa när rädslan och osäkerheten förvandlas till leda TDD handlar inte om att ta små steg, utan om att kunna göra det Svårt att driva med tester Säkerhetsprogramvara Parallella system Realtidsprogramvara 7

Argument mot TDD och utvecklardriven testning Tester tar lång tid att skriva Tester tar lång tid att köra En del kod måste testas live När man inte vet vad koden ska göra, så kan man inte testa if it compiles then it works Utvecklare är inte testare! Sammanfattning Vi får tester att köra genom fejk, triangulering, eller den uppenbara implementationen Borttagning av dupliceringen mellan test och skarp kod driver designen Flytande gräns mellan hur stora stegen mellan test och implementation blir beroende av svårighetsgraden. TDD ersätter: Code for today, design for tomorrow med By not considering the future of your code, you make your code much more likely to be adaptable in the future Bortom TDD Behavior-driven design Acceptanstestdriven utveckling 8

Behavior-driven design Publicerades kring slutet av 2007 Order test i testdriven utveckling ställer till med problem Allomfattande språk för analysprocessen: Stories: As a/i want/so that Acceptanskriteria: Given/when/then Acceptanstestdriven utveckling Ramverk: Concordion, FitNesse Uppbyggda av en specifikation skriven i klartext och en fixtur Specifikationen innehåller parametrar till testfixturen och kommunicerar testets resultat Att införa TDD: de största problemen Nytt arbetssätt Inlärningskurvorna för teknikerna och verktygen Legacykod Man ser inte nyttan omedelbart 9

Nytt arbetssätt Kräver disciplin Kräver kunskap: Lätt att testa fel saker Lätt att testa saker fel Om det enda man har är en hammare, blir varje problem en spik En möjlig inlärningskurva produktivitet? Valfritt ramverk Databastestning/webbtestning Refactoring Testning av kollaboratörer tid Teori JUnit Problem med legacykod Inga eller få tester Affärslogik i databasen Felimplemterade J2EE patterns Singletons M m, m m Refactoring! 10

Hur vi underlättar införandet. Lösningar! Litteratur Mentorskap Några krasher i kritiska otestade system Continuous build Konsekvenser Man blir test infected Skriver aldrig för mycket kod Designen går mot IoC och Clean Code Slutsatser och rekommendationer Att lära sig TDD tar ett par månader Inlärningskurvan är knuten till testramverken Svårt att alltid behålla disciplinen Man stoppas av legacykod Testa! Man lär sig testramverken Man lär sig refactoring Man designar kod bättre Att fuska med TDD innebär att vi landar på utvecklardriven testning. 11