onsdag 5 september 2012

Fyra hörnstenar i agil testning

Den här bloggposten beskriver vad jag tycker är de fyra mest viktiga förutsättningarna, eller hörnstenarna, för framgångsrik agil testning. De fyra hörnstenarna är: continuous integration, testare i teamet, context driven test och testautomatisering. Alla dessa områden behöver identifieras, undersökas och hanteras för framgångsrik agil testning. De fyra hörnstenarna är alla vanliga arbetssätt inom den agila världen och i den context drivna testskolan, men oftast inte ihopsamlade som förutsättningar för agil testning och kombinerade med varandra.


I den här illustrationen är de fyra hörnstenarna mappade till berörda områden i min metod för agil testning. Metoden beskrivs i mitt white paper ”JAM & ACT”

Testare inom teamet

Min definition på agil testning är när systemtestaktiviteter utförs inuti ett agilt utvecklingsteam. Både utvecklare och testare ska arbeta på samma utvecklingsiteration, och kodbas, och ”definition of done” ska innefatta systemtest. Både testare och utvecklare har gemensamt ansvar för systemets kvalité.

Uppmana till arbete mellan testare och utvecklare! Utvecklare kan ge värdefulla insikter om systemets arkitektur och potentiella svagheter. Testare kan hjälpa utvecklare med att hitta fel, föreslå lösningar och därmed förbättra systemets kvalité redan under utvecklingsfasen. Testare har oftast god kunskap om systemkrav, driftsituationen och systemet i dess sammanhang. Den här informationen är väldigt viktig för att ta rätt implementationsbeslut. Dessutom kommer tiden för att leverans till test, testexekvering samt rapportering, att minska med testare i teamet.

Att låta testare arbeta på separata testleveranser efter utvecklingsiterationen främjar inte samarbete, omöjliggör den agila processen och är i praktiken ett vattenfall.

Context driven test
Traditionella systemtesttekniker fungerar dåligt i agila sammanhang. Traditionell testning är för dokumentorienterad och rigid. När en testprocess, såsom IEEE 829, kräver fem omfattande dokument samt detaljerade kravspecifikationer bara för inledningsfasen, så är det inte rätt metod för agil testning.
I agil testning ligger fokus på produktivt arbete istället för rapportering, verktyg istället för dokumentation, snabbhet och flexibilitet istället för perfekta planer och processer.

Metoder som används inom context driven passar bättre än traditionell testning. Den kontextdrivna testaren tror inte på best practises, utan istället på anpassning utifrån förutsättningarna. Exempel på context driven är utforskande testning, session based-/thread based testing, just-in-time testing, modelbaserad testning o.s.v. Kunskap om dessa tekniker gör testteamet förberett inför den agila utmaningen.

Continuous integration
Målet med continuous integration är att implementera och bygga systemet i små steg för att förhindra svårigheter med integration och mergning. Små kodsnuttar utvecklas regelbundet och checkas in i ett gemensamt repository. Det triggar ett automatiserat kodbygge, ofta med automatiserade tester och deploy. Det märks snabbt ifall kodförändringar är korrekta och eventuella rättningar kan göras på ett tidigt stadium
.
Continuous integration är en utmärkt bas för automatiserad testning samt version och releasehantering. Det är också en bra utvecklingsmetodik som förhindrar ”happy hacking” och ”trial and error”-programmering. Continuous integration är först och främst utvecklarnas ansvar men en erfaren agil testare borde vara kapabel att bidra med goda exempel och synpunkter utifrån testarnas behov.

Testautomatisering
En vanlig källa till problem inom agil testning är de frekventa kodbyggena och testreleaserna som skapas med continuous integration.  Korta utvecklingsiterationer med sprintreleaser spär på problemen. Testautomatisering är nödvändigt för att förhindra att den agila testaren drunknar i återkommande regressionstestning. Det är inte effektivt att automatisera alla tester utan de oftast använda och tidskrävande testerna bör automatiseras först. Kostnaden för automatisering är oftast högre än vad som först uppskattats.

Semiautomatisering, såsom stöd för test uppsättning och nedtagning, datagenerering, intelligenta mockar och automatiserade batchkörningar kan också vara mycket effektivt. Ansvaret för testautomatisering ligger både hos utvecklare (komponenttester i byggen) och testare (automatiserade system- och regressionstester). Det är bra att använda verktyg och ramverk som passar både utvecklare och testare. Stöd samarbete och håll det hela enkelt. En dedikerad verktygssmed kan vara behjälplig med teknisk expertis om verktyg, mockar, ramverk och miljöer.