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.
Tryckt & kränkt