Man lever så länge man lär

Innan jag tagit mig samman och stigit upp i morse låg jag och tänkte på testdriven utveckling, funderade på vad jag vill, kan och ska säga om det hela till teamet på tisdagens eftermiddagssession. Insåg lite väl sent att jag behöver förbereda mig inför detta eftersom det är just en session och jag nog förväntas föreläsa lite. Ämnet är ”Approach to test driven development” och sessionen är bokad på en timme men omfattar även ett annat ämne (som jag dock tror kommer att vara snabbt avhandlat). Undrar om jag borde göra några bilder till det, kanske?

Varför jobba testdrivet? Det handlar delvis och förstås om att säkra kvalitén, både vid den ursprungliga utvecklingen och vid framtida underhåll av koden. Testerna utgör också dokumentation av funktionaliteten, genom att den berättar om hur det är tänkt att koden ska fungera. Men det är inte bara det där klassiska om kvalité på existerande kod, för delvis handlar testdrivet också om att uppmuntra bra design – för att skriva tester behöver man tänka efter före, inse vad som faktiskt är viktigt. Vilken funktion man ska ha och hur den ska kunna testas/verifieras. Och då nästan tvingas man strukturera koden på ett sätt så att den blir testbar. Och eftersom du skriver testerna först, innan någon kod är skriven, så blir du inte styrd av en existerande, möjligen dålig, design. Det blir rätt och bra från början.

Som jag ser på saken hamnar man rent generellt i en god spiral när man jobbar testdrivet. Man uppmuntrar till bra (eller i alla fall renare och därmed bättre) design, dokumenterar funktionaliteten samt säkerställer densamma.

Sedan man väl fundera på det hur det går att applicera de testdrivna tankarna på just min och vår verklighet, i vardagen. Jag tror att det är nästan omöjligt att fullt ut använda testdriven metodik eftersom vi ju inte jobbar så agilt (lättrörligt) som många av oss skulle önska. Processer, processer, processer. Och de här processerna i kombination med geografisk utspriddhet och utvecklarnas relativa oerfarenhet gör att man behöver göra och dokumentera design på en ganska detaljerad nivå. Det är ett frustrerande arbetssätt för när man gör den där designen så gör man ju nästan hela jobbet ändå – och det bara för att kunna skriva ned vad man gjort, d.v.s. vad utvecklaren ska göra. Eller förlåt, det här handlar nog när jag tänker efter mer om programmerare än utvecklare.

Men min tro här kan förstås också bottna i omotiverad pessimism och svårigheter att lita på andras förmåga. Det går förmodligen att göra mycket mer än vad jag tror och det är väl något jag får försöka ta med mig, diskutera med kollegorna och uppmuntra dem att fundera på. Att försöka få alla att jobba eller i alla fall tänka testdrivet, om än inte i absurdum – det ska ju ändå göra saken bättre. Vi måste vara pragmatiska och komma ihåg att varje litet steg är ett steg i rätt riktning.

Där jag främst ser att vi kan jobba testdrivet är väl i underhållet av applikationen. Att vi när det kommer in en felrapport först skriver en test som bekräftar att felet existerar, samt kanske även kod som testar närliggande funktionalitet – i den mån den inte redan finns. Det är ju inget ovanligt fel att man testar precis exakt det som är fel, men inte det som är rätt. Vilket emellanåt gör att felet visserligen blir rättat, men rättningen medför nya fel som nedlusar den tidigare felfria koden med fel. Typ ungefär så. Jag gillar negativ testning, och betraktande av saker ur flera aspekter. Jag kollar och dubbelkollar de flesta svar jag tvingas leverera. Och så gör jag även när jag jobbar, så klart. Jag testar från flera håll när det går.

Well, nu har jag skrivit ned lite av vad jag funderat och funderar på. Kommentera gärna – feedback är bra! Jag borde nog ha tänkt på att blogga om det här för länge sedan för då hade jag haft en större chans att få in kommentarer jag kunde ha nytta av i mitt faktiska arbete. Som det är nu tror jag det är få intresserade av ämnet som kommer att hinna läsa detta. Men man vet aldrig – om man inte lägger ut någon krok blir det svårt att få napp, som jag brukar säga. Eller inte.

Själv ska jag nu gå upp och sätta mig vid poolen, med mina slipade solglasögon och båda böckerna om testdriven utveckling. Kanske även baddräkten, förresten.

Annonser

Kommentarer till: "Tankar kring att jobba testdrivet" (4)

  1. Det där med att ”strukturera koden på ett sätt så att den blir testbar” är nog det som gör störst skillnad för min del. De gånger som kod har degenererat så att varje ändring kräver duplicerad kod på fler och fler ställen, är det i princip alltid kod som det inte finns något bra test för från början.

    Att däremot mentalt ta steget från att tänka ”så här vill jag designa min kod, även om vissa delar då blir svåra att testa” till ”så här behöver koden se ut för att allting ska vara testbart” (det behöver ju inte finnas tester på allt, men möjligheten att faktiskt kunna skriva dem måste finnas) är ibland inte så lätt.

  2. @Daniel: Nej, det krävs rätt många avvägningar när man designar/skriver kod, vare sig man jobbar testdrivet eller ej. Det känns dock som att ett testdrivet tankesätt är en bra utgångspunkt. Man ska aldrig vara rabiat, alltid pragmatisk.

    Har du provat jobba helt testdrivet när du byggt nytt? Jag skulle verkligen jättegärna vilja göra det bara för att se hur det är och fungerar, men jag har tyvärr inga direkta möjligheter att göra det. Definitivt inte i tjänsten.

  3. Ja, någonstans kommer man ju alltid till en punkt där det blir för dyrt att göra det ”rätt”.

    Projektet som jag i december började om från början på har jag gjort helt testdrivet. Finns inte en pryl som inte testas där. Å andra sidan har jag inte haft så mycket tid att lägga på det, så det har inte kommit så långt heller.

  4. @Daniel: Ah, kul! Undrar hur många luckor jag skulle kunna hitta i dina tester om jag försökte? Jag brukar ha talang för sådant, även när jag inte anstränger mig. :)

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

Etikettmoln

%d bloggare gillar detta: