Av Jörgen Damberg, nerplitad 2014-04-28
Efter 16 år inom test slår det mig att vi inom testområdet fortfarande brottas med en del av samma problem som vi brottades med redan när jag kom in i yrket. Utvecklingen har numera kommit långt, och vi borde inte behöva brottas med dem. Ändå möter jag i mitt arbete nästan dagligen klagomål inom de områden som behandlas nedan. Lyckligtvis finns det numera stöd som hjälper oss i många av dessa.
Denna artikel handlar om fyra av dessa störkällor, vad som faktiskt finns att tillgå men som få ändå använder - och vad vi kanske borde ägna vår ringa förbättringstid åt istället.
Vad? "Ta en annan väg"? Se så, skärp dig nu
och hugg i. Vi tar ju alltid denna väg.
Tag line: "Varför kommer vi aldrig väl ut med vår testautomatisering?"
Testautomation är i ropet som aldrig förr, men ändå brottas många med att få den att lyfta och tillföra mer värde än den kostar.
Utvecklare omfamnar och deltar i testautomationen. Med contiuous integration körs testerna ofta och mycket. Även om myten om att det en gång i världen fanns pixelbaserade testautomationsverktyg inte är sann (om verktygen inte stödde teknologin, eller automatiseraren gjorde fel användes dock pixel-koordinater som fallback, vilket gör att myten har uppstått på grund av misslyckanden) så har testautomationsverktygen verkligen blivit mycket bättre de senaste åren.
Om man automatiserar klokt, med en lagom balans mellan vilka tester som körs på vilken testnivå, kan man få en rimlig underhållsnivå och god täckning samt en uthärdlig exekveringstid.
Testautomation hamnar i förvaltningsläge första gången den exekveras, men oftast tittar man ändå bara på nuläge när automation initieras. Bra testautomatisering innebär för en del testfall att man testar så små delar av systemet som möjligt, men för andra testfall att man testar så mycket system som möjligt så att man ser att hela systemet verkligen fungerar.
Det kommer att dröja ännu något decennium innan maskiner kan mäta sig med människor i kreativitet, serendipitet (förmågan att uppmärksamma sådant man egentligen inte letade efter) och slutledningsförmåga.
De allra flesta tester utförs för att säkra förtroendet för att systemet, givet införda förändringar, ännu kommer att leverera nytta. Om förtroendet för testautomationens förmåga är låg kommer därför dess värde att vara lågt. Testautomationen bygger ofta på samma tolkningar av förväntningarna på systemet som själva utvecklingen, och den tenderar därför att missa de stora felen, men behöva pysslas om vid små insignifikanta ändringar.
Det är mycket mer än bara applikationskoden som kan göra att systemet inte fungerar
Verktygsstödda tester samt klok automation av masstester. Mycket av de förberedelser, dataanalyser och jämförelser som testare sitter med manuellt idag kan finna gott stöd i verktyg.
Tag line: "Du får ju din S-kurva. Varför är du inte nöjd?"
Det är jättesvårt att på ett lättfattligt sätt beskriva ett testläge för någon annan. Progress för testerna, magkänsla för kvalitet, kvarvarande riskfaktorer, vad som går bra och dåligt och allt annat som man vill förmedla är svårt att få entydligt på pränt så att det är förståeligt för andra. Det resulterar i att mycken tid läggs på att författa långa testrapporter som sällan läses.
De mätetal som används är sällan bra, och måste alltid tolkas och förklaras för att det ska kännas sanningsenligt.
Mätetal och grafer kan extraheras ur verktyg. Det går att mäta allt från kravtäckning, kostnad per funnen bugg, antal asserts per timme, rättningstid, buggdensiteter och allt möjligt med ett bra verktygsstöd.
Om man dessutom har samma mätetal över alla projekt/team så kan dessa jämföras med(mot?) varandra som KPIer.
Mätetalsinsamlingen bör helst vara helt mekaniserad. Att t.ex. följa upp antal asserts per timme kan säga något om kodkvaliteten. Att mäta tiden från felrapport till rättning kan säga något om effektiviteten i vår utveckling. Det yttersta måttet är dock mantiden och kalendertiden från idé till verksamhetsnytta.
Vad som är viktigt att beskriva skiljer sig åt från situation till situation. Inget verktygsstöd idag kan heller visa på det man vet om framtida händelser. Om man t.ex. vet att det kommer en leverans av ett stort sidosystem om en månad, och man sover dåligt för det, så syns inte det i graferna. Mätdata kommer därför alltid att behöva analyseras och diskuteras, hur tydliga graferna än kan verka vid första anblicken. I de mest välmätta projekten jag deltagit i har det funnits ett sammanfattande mätetal för "testledarens förtroende för att klara deadline", "testledarens förtroende för utvecklingen" och för "testledarens förtroende för QA-bemanningen" tillsammans med ett kort fritextfält för två förklarande meningar. Det har räckt bra. Alla andra grafer används då endast för att besvara frågor kring denna magkänsla.
Dessutom handlar testning ytterst om att säkra alla intressenternas nöjdhet, för det är först då som man kan tala om succé och kvalitet. Det är ledtider på att få in mätetal för nöjdhetsgrad, så de mätningarna släpar lika mycket efter som t.ex. DDP.
Mmmmm.... Pajdiagram är alltid lockande...
Vi borde koncentrera oss på att få styrgruppernas och ledningsgruppernas förtroende så att det är naturligt för dem att söka vårt uttalande om nuvarande magkänsla, eftersom de litar på den. Ett led i detta är naturligtvis att nogsamt arbeta fram bra mätetal tillsammans med de som ska ta emot informationen - och rakt ut fråga dem vad de vill ha presenterat och på vilket format.
Ett undantag är naturligtvis då regulatoriska krav eller annan compliance tvingar oss till vissa mätetal, men då är det naturligt att använda dessa som komplement.
Tag line: "Jävla förbannade testdatajävlen"
Testdata håller aldrig bra kvalitet. Det håller inte ihop mellan system, det är omständligt att hantera, det tar tid att få på plats och det förändras konstant.
Tape library, CERN, Geneva 2 by Cory Doctorow / CC BY-SA
Numera är det legio att versionshantera sina databasförändringar, utvecklare bygger data-access-lager och i takt med att continuous deployment vinner mark har allt fler implementerade data factories i samband med sina automatiserade tester.
Alla stora helhetsleverantörer av IT har dessutom något verktyg att visa fram för att hantera testdata. De förmår minska testdatavolymerna genom subsetting, de kan stringent anonymisera data mellan olika system och de kan generera upp bra testdata vid behov.
Data är komplext för att relationen mellan information är komplex. Det finns en hel flora av yrken som bara jobbar med att strukturera data (begreppsmodellering, DBA:er osv)
Många av de buggar vi finner beror på att det finns oomhändertagna datavariationer som inte koden är förberedd för. Ofta beror detta på att man inte visste om att den variationen/kombinationen/formatet alls kunde uppstå. För att nå dessa specialfall krävs det produktionsdata, men migrering av data sker ofta sent under utvecklingen. Dessutom är produktionsdata så volymkrävande att det kan vara svårt att hitta buggar bara för att man liksom letar efter en nål i en höstack. Stora datavolymer är också svåra att underhålla, de är alltid inaktuella för att det finns ledtider inblandade och de är svåra att hantera i automationssammanhang eftersom återställningsrutiner blir komplexa och svårhanterade.
De-coupling av system. Detta möjliggör det bästa av alla världar, i vart fall som vi känner till idag. Om vi kan testa system och komponenter fristående slipper vi ledtiden för att vänta in något gyllene läge då data måste vara i synk, och vi kan testa mot systemets externa gränsytor under enhets- och systemtesterna (testerna för att utvecklingsteamet ska få behålla sin stolthet och heder), vilket kan öka tryggheten tidigt och minimera hur ofta vi behöver testa mot stora sammanhängande datarymder. Vi kan också lättare testa mot konstruerat och genererat data, samt faktiskt genomföra systemintegrationstester på ett bättre sätt.
Tag line: "Vem som helst kan testa"
Fortfarande idag förhärskar attityden att vem som helst kan testa, och att det bara är en enehanda och tålamodsprövande samvetsaktivitet som måste betas av som en sanitetsåtgärd. Testning anses vara en lågvärd aktivitet som inte tillför så mycket, så det finns folk som börjar med test som en väg in till den roll som de egentligen vill ha. Det leder till att testarbetet prioriteras ner, det är svårt att behålla duktiga människor inom testyrket, och en allmänt slapphänt inställning till testning.
OBS! Innovatören på bilden är oskyldig, bor på Borås
Djurpark, och har inget alls med denna text att göra. OBS!
Detta leder vidare till orealistiska tidplaner och förväntningar på testningen, och att sanitetsfaktorer som miljöarbete och förbättringsarbete för testbarhet allt för ofta prioriteras ner.
Idag finns det årslånga utbildningar inom mjukvarutestning. Det finns olika skolor, och det har utvecklats ett eget fikonspråk inom test så att det går att sålla agnarna från vetet inom test.
Det finns åtskilliga mer eller mindre omfattande standarder inom test, och disciplinens konferenser lockar allt fler människor. Det finns även renodlade testkonsultbolag och hela karriärvägar med flera specialinriktningar inom yrket.
Det är svårt att konkretisera vad test tillför för värde. Det är dessutom närmast omöjligt att beskriva hur ett bra testarbete genomförs eftersom testyrket måste vara följsamt omgivningen för att ske effektivt. Denna schizofrena inställning till vårt eget arbete gör det svårt att beskriva vad vi gör vilket gör att det verkar flummigt.
Medvetet fila bort de tråkiga delarna av testarbetet, belysa de kreativa och kunskaps-/erfarenhetsbaserade bitarna av arbetet. Lära oss av utvecklare, arkitekter och projektledare så att vi behärskar deras ord och uttryck så att vi smidigt kan kommunicera med dem så att de känner att vi tillför värde och förstår produkt, verksamhet och process.
Bidra gärna med dina egna reflektioner kring detta. Tag chansen: Gör författaren lite klokare och lite mer insiktsfull genom att komma på nästa CALM-träff, sök upp honom och skänk honom dina reflektioner och klargöranden kring dessa ämnen. Han uppskattar det, och kommer att belöna dig.
För bildkälla, klicka på respektive bild. Samtliga bilder är licensierade enligt licenser från Creative Commons. Den schematiska bilden över vad som skiljer systemtest från traditionella fokusområden för utvecklartester är mitt eget alster.