Testdriven utveckling

Skriv test först och kod sen med TDD-metoden

Test Driven Development (TDD), eller på svenska testdriven utveckling, är kanske det bästa som hänt sedan rostat bröd – i alla fall om man frågar systemutvecklaren Kristofer Linnestjerna som varit i branschen i snart 20 år. TDD är ett arbetssätt som gör att du litar på din kod – och att du kan ändra saker utan att känna ovisshet kring om ändringarna är korrekta eller inte. I detta blogginlägg utforskar Kristofer fördelarna med TDD-metoden och hur du kan ta dig an TDD i ett projekt.

http://Kristofer%20Linnestjerna,%20systemutvecklare%20på%20Consid%20Göteborg

Kristofer Linnestjerna

Systemutvecklare

kristofer.linnestjerna@consid.se 070-8228971

Vad är TDD?

Testdriven utveckling fokuserar som metod på att skriva tester först och kod därefter. Testerna skrivs för att verifiera och validera kod innan själva koden skrivs. Genom att ha en uppsättning tester som körs automatiskt varje gång koden ändras, kan utvecklare vara säkra på att inga buggar har introducerats i koden. Personligen använder jag framför allt TDD för enhetstester, men man kan såklart använda tankesättet för till exempel funktionstester eller acceptanstester.

Några fördelar med testdriven utveckling

Kom i gång lättare

Största styrkan med TDD är det alla utvecklare står inför. Du har ett problem, du öppnar din editor, du tittar på den blanka ytan och vet inte riktigt hur du ska börja. Om man skriver ett test, vad som helst, så kommer tankeverksamheten i gång. Vad ska jag använda det till? Hur kommer jag att använda det? Kommer någon annan att använda det?

Man tar ett steg i taget genom att skriva ett test, och får testet att gå igenom. Ett test som jag brukar skriva, som jag får skäll av kollegorna för, är ett test för en konstruktor. Det kanske inte ger så mycket – men ger mig definitivt chansen att komma i gång.

Testtäckning skapar självförtroende

Testtäckning är ett mått på hur mycket av eventuella kod-paths som är täckta av test. Har man en hög grad testtäckning så vet jag att ingenting kommer att gå sönder på vägen om jag till exempel ändrar något i modul A, som i många steg är länkat till modul Z.

Däremot anser jag att det är ouppnåeligt att ha 100 procents testtäckningsgrad. I stället bör testtäckningen fokusera på att täcka de viktigaste och mest kritiska delarna av koden och de funktioner som förväntas fungera korrekt.

Fungerar som dokumentation och leder till läsbar kod

Om man skrivit bra tester och har tillräckligt hög täckningsgrad räcker dessutom detta som dokumentation, för utvecklare, för hur ett API ska användas. TDD leder till mer läsbar kod. Läsbarhet är väldigt viktigt. Testernas metodsignaturer kan även struktureras efter kontext – jag gillar att använda mig av ”given-when-then”.

Så kan du ta dig an TDD-metoden i ett projekt

Är du helt grön så kan testdriven utveckling var svårt och märkligt. Det är väldigt lätt att skriva test som inte ger någonting. Ta därför gärna hjälp av någon i din närhet för att parprogrammera. Annars finns skrivna tester på Github som skapar en känsla av hur ett test kan skrivas.

Flödet i ett test är arrage, act, assert. Man arrangerar upp det förväntade värdet och de ingångsparametrarna som behövs för att göra själva testet. Sen gör man testet. För att sedan kolla att det blev så som man trodde att det skulle bli. Testkod är precis som all annan kod – den ska vara enkel och precis.

Sen gäller det att bena ut vilka tester som ger värde och som man ska ha kvar. Boken Clean Code är en bra språngbräda för dig som är ny till testdriven utveckling – i den pratas det mycket test.

Kan testdriven utveckling leda till att man skriver mer och mer komplicerad kod?

Ja, det kan hända att man börjar lägga ner mycket tid på det runt omkring, byggandet. För att undvika detta kan man börja med ett ”clean sleght”. Kommer man in i ett projekt som redan har kod kan man behöva bygga upp ett ”test harness” – för att man ens ska kunna börja testa på ett bra sätt. Man får ”massera” in koden så att den blir testbar.

Tips på frameworks för TDD

Vad gäller verktyg så spelar de mindre roll, bara man har inställningen att man gör tester. Just nu föredrar jag xUnit för .net-utveckling. Tidigare har jag använt mig av NUnit. Sen finns det massa hjälpmedel, till exempel Fluent Assertions som nästan blir som prosa. Eller Fake It Easy som fyller funktionen att man skriver sitt API baserat på interface. Med hjälp av verktyg som Fake It Easy kan man ta ett interface och säga ’jag ska sätta upp det så att när jag kallar på den här metoden, så ska du returnera det här värdet’.

Här finns det dock ett litet kaninhål som man kan hamna i, jag har hamnat där några gånger. Det är att när man börjar skriva testet, så börjar man testa sitt mockobjekt eller det som egentligen är den falska biten. Det kan vara en konsekvens av att man tar fel väg in.

Lär dig mer om TDD

I avsnitt 42 av Consids podd Utveckla snackar jag, Kristofer Linnestjerna, testdriven utveckling med poddhosten Lily och Simon. Lyssna på poddavsnittet för att lära dig mer om TDD.

Vill du veta mer om Testdriven utveckling?

Kontakta oss här så hör vi av oss.

    Mer kunskap & insikter om systemutveckling och test

    Webbutvecklare vid en dator och surfplatta på kontor
    3 min lästid
    blogg

    En testares engram – del 1: Den förmätna heuristiken

    Lär dig allt om test. För testare som vill förbättra sin testteknik samt utvecklare som kan ta fördel av en förbättrad testmentalitet.

    Kategorier: Kunskap, Test & krav
    Ett blått öga
    3 min lästid
    blogg

    Eye tracking – En testares bästa vän!

    Idag finns det lösningar på problemet - Emma Björkman, testledare på Consid, berättar mer om Tobii Eye Tracking – en av lösningarna.

    Kategorier: Apputveckling, Kunskap, Test & krav, Webb
    Fastigheter och skyskrapor med glasfasad
    3 min lästid
    blogg

    Godbitar från Europas största testkonferens

    Möt Emma Björkman, testare på Consid, som reflekterar över vad hennes roll som testare innebär och varför den är så viktig.

    Kategorier: Kunskap, Test & krav
    Man vid dator under en utbildning av Consid Excellerate
    2 min lästid
    Kategorier: Kunskap, Test & krav
    Considlogga på glasdörrar på Consids kontor i Stockholm
    4 min lästid
    Kategorier: Kunskap, Test & krav
    Windows tangentbord svart matt
    4 min lästid
    blogg

    Mary had a little lamb – Att misstolka en text

    Vad händer om vi inte beskriver våra krav tillräckligt tydligt för att det inte ska finnas utrymme för egna tolkningar av kravet?

    Kategorier: Kunskap, Test & krav
    V-modellen
    4 min lästid
    blogg

    Spårbarhet i utvecklingen – utveckla enligt V-modellen!

    Som testare är det av stor vikt att kunna visa på den röda tråd som löper genom utvecklingen. Hur ett krav förhåller sig till ett annat krav.

    Kategorier: Kunskap, Test & krav
    Windows tangentbord svart matt
    3 min lästid
    Kategorier: Kunskap, Test & krav

    Anpassa dina datapreferenser

    Vi använder data för att analysera trafik på vår webbplats och dela information om användningen till våra analyspartners. Du kan läsa mer och ändra dina val på vår sida om datahantering och cookies. Läs mer på vår sida om datahantering och cookies.

    Funktionella cookies känner igen dig på vår webbplats och kommer ihåg dina tidigare valda inställningar. Dessa kan inkludera det språk du föredrar, platsen du befinner dig på, lyssna på ljud eller titta på en video. En blandning av cookies från första och tredje part används.

    Marknadsföringscookies används för att samla in data om hur vår webbplats används, vilka sidor som besöks oftast eller om du får felmeddelanden på vissa webbsidor. Ibland behöver vi information om din ålder, kön och intresse. Vi delar ibland vissa begränsade aspekter av dessa data med tredje part i reklamsyfte, till exempel Google. Informationen kan omfatta användarens plats, sökhistorik, YouTube-historik och data från webbplatser som fungerar med Google, och den används för att tillhandahålla aggregerad och anonymiserade insikter om användarbeteende på flera enheter.

    Nödvändiga cookies är absolut nödvändiga för att webbplatsen ska fungera korrekt. Denna kategori innehåller endast cookies som garanterar grundläggande funktioner och säkerhetsfunktioner på webbplatsen. Dessa cookies lagrar ingen personlig information.

    Prestandacookies är cookies som används specifikt för att samla in data om hur vår webbplats används, vilka sidor som besöks oftast eller om du får felmeddelanden på vissa webbsidor. Dessa cookies övervakar endast webbplatsens prestanda när användaren interagerar med den. Ingen av denna information kan användas för att identifiera dig. Allt är aggregerat och därför anonymiserat.