Nu har det automattestats i några veckor och det har varit riktigt kul, så jag tänkte relatera lite grann av vad jag lärt mig  om att skriva automattester den senaste tiden.

Automattestning skiljer sig åt från manuell testning på några nyckelpunkter. Den stora fördelen med automattester är naturligtvis att det inte krävs en mänsklig testare för att exekvera testerna, och att det därmed går betydligt snabbare. Detta innebär att man kan sätta upp automattester som körs varje gång ny kod blir incheckad och kan upplysa teamet om potentiella problem med förändringen tidigt. Tar det för lång tid att köra igenom den totala testuppsättningen kan man välja ut nyckeltester som körs kontinuerligt och enbart köra alla tester över natten eller på ännu längre sikt. Dessutom garanterar automattester att de körs exakt enligt specifikationen varje gång, medan en människa lätt kan glömma att testa vissa detaljer.

Automattester har dock svagheter, och den sista punkten är båda en styrka och en svaghet. Nackdelen med att ha ett test som följer specifikationen exakt är att det inte lämnas något utrymme för variation och kreativitet i testprocessen. Testet garanterar att funktionaliteten som testet täcker fungerar, men existerar en bugg som triggas av att man varierar indatan lite grann kommer testet inte detektera den. En mänsklig testare skulle å andra sidan kanske naturligt variera indatan varje gång, och därmed ha större chans att trigga problemet. Manuell testning tillåter dessutom större flexibilitet, testaren är medveten om vilka förändringar som introducerats till systemet över tid och kan ta hänsyn till det i testproceduren. Ett automattest kan däremot snabbt bli obsolet, och i bästa fall innebär det att testet fallerar trots att systemet fungerar och i värsta fall passerar det och döljer faktiska problem. Tillsammans med den relativt höga tidskostnaden för att skriva testerna till att börja med kan utveckling och underhållning av automattester ta betydligt mer tid än de är värda, såvida testerna inte har hög “impact”, dvs att de har stor chans att detektera buggar om de uppstår.

Detta gör uppgiften att skriva bra automattester både utmanande och rolig. Att fundera ut vilka typer av tester man ska investera sin dyrbara tid i att skriva är en i allra högsta grad kreativ process. Det kräver att man är både djupt insatt i hur produkten man bygger är tänkt att fungera och att man har förståelse för vilka tekniska faktorer som tenderar att leda till felkällor.

Vi hörs!