Automatisera från dag ett

Automatisering är ett bra sätt att minska tid och resurser som behövs för felsökning. En automatiserad process görs alltid på samma sätt och inga steg kommer att missas. Dessutom frigörs resurser till att göra viktigare saker då de slipper göra en massa manuella steg om och om igen. Ju tidigare man börjar automatisera desto bättre. Ju senare man börjar desto svårare kommer det att bli att eftersom de processer som skapats inte har designats för att automatiseras.

Automatiserade enhetstester

Om man inte har några enhetstester måste man testa koden genom att starta hela systemet och köra igenom olika testfall manuellt. Dels tar det tid att hela tiden starta systemet för att testa, stänga av systemet för att rätta eventuella fel, kompilera om och starta systemet igen och testa om. Då det blir för komplext och trögt att testa så kommer det inte att göras och eventuella fel upptäcks långt efteråt vid systemtestning. Dessutom finns en stor risk för att man glömmer något test eller inte utför det på exakt samma sätt som föregående körningar.

Automatiserade enhetstester kräver inte att systemet körs och kan ofta köras igång direkt från utvecklingsmiljön genom att trycka på en knapp. Testerna kommer alltid att köras på samma sätt och blir det fel så får man direkt feedback och kan rätta och köra om samtliga tester igen. På detta sätt så tar man effektivt bort småfel som annars skulle slippa igenom till systemtestning.

Enhetstester måste skrivas från dag ett i projektet. Att försöka skriva enhetstester i efterhand är komplext eftersom koden oftast inte skrivits på ett sätt som gör att den är testbar.

Blir det inte dyrt att lägga tid på att skriva automatiserade tester? Det är väl bättre att utvecklarna skriver ny funktionalitet? Automatiserade tester kräver naturligtvis en del tid att skriva men det är tid som sparas i senare steg genom att vi slipper lägga tid och resurser på komplex felsökning. Dessutom är det ett utmärkt verktyg att ha när systemet ska vidareutvecklas eftersom det också fungerar som regressionstest.

Automatiserat bygge

Att bygge ett system som består av flera olika moduler är en komplex uppgift. Om det dessutom är ett större utvecklingsteam som arbetar på olika delar av systemet så finns en risk att problem uppstår när de olika delarna ska integreras.

Det finns en hel del verktyg för att automatisera byggandet av system (ant, maven, msbuild o.s.v.). Det blir då enkelt att schemalägga byggen så att man bygger hela systemet åtminstone en gång per dygn och kör samtliga automatiserade tester för att fånga upp problem. Störst nytta får man dock om man dessutom använder en contiuous integration server som bygger systemet och kör alla enhetstester så fort en incheckning sker i versionshanteringssystemet. Då fångas eventuella integrationsproblem upp direkt.

Automatiserad deploy

När det närmar sig driftsättning av system så brukar det vara febril aktivitet. Det skrivs checklistor och planer för utrullning. Det bokas resurser som ska genomföra installationerna och testresurser som ska verifiera att allt ser bra ut. Nödvändig infrastruktur införskaffas och konfigureras.

I en del fall är driftsättning något som sker utan någon som helst generalrepetition för systemadministratörer och it-tekniker. Det är lite konstigt att ta en sådan risk med tanke på alla resurser lagts ned på att utveckla systemet. Även om det har funnits tillfälle att öva på processen i en produktionslik miljö så finns risken att man missar viktiga moment om det är mycket som ska göras.

Ju längre man väntar med att automatisera deployment och konfiguration av system desto svårare blir det att göra. Genom att redan från första dagen i projektet automatisera deployment processen så hinner man köra igenom den flera gånger under projektets gång. Målet bör vara att en driftsättning är så enkel att man bara trycker på en knapp för att genomföra det. Fördelen är att processen alltid kommer att genomföras på samma sätt vilket eliminerar att något steg missas och risken minskar för en misslyckad driftsättning. Dessutom är det ett utmärkt sätt att säkerställa att man kan återställa ett system vid en eventuell katastrof.