Optimering av testprocesser i agila projekt Jesper

Transcription

Optimering av testprocesser i agila projekt Jesper
Optimering av testprocesser i
agila projekt
Jesper Högberg
Våren 2009
Sammanfattning
I dagens samhälle övergår mer och mer av utvecklingen av IT system till att använda agila
utvecklingsmetoder. Samtidigt blir kraven på våra IT system striktare. Fler och fler system
integreras och kraven på tillförlitlighet är nästan 100 procent. Detta ställer stora krav på en
effektiv testprocess.
Många arbetsmoment i en optimal testprocess är sådant som lätt faller mellan stolarna eller
svårt att få erfarenhet av. Testarbetet är även mycket teoretiskt och akademiskt när det
kommer till processoptimering, teststrategier och testledning på avancerad nivå.
Denna uppsats förklarar förutsättningar, arbetsmetodik för agila utvecklingsprojekt, det
idealiska testarbetet och en steg för steg process för att uppnå en hög mognadsgrad i
testarbetet. Målet med hela testarbetet och dess optimering syftar till att leverera tillförlitliga
affärskritiska system. Det är precis vad som normalt efterfrågas i dagens samhälle.
För att summera innehållet i de tre stegen i processoptimeringsarbetet kan nämnas att steg 1
handlar om att definiera teststrategi, testplan, etablera rutinerna för att testa på alla nivåer i
teststrategin, genomgång av statisk test, utbildning av personal i testdesign och
arbetsprocesser.
Steg 2 i processoptimeringen syftar till att höja nivån jämfört med steg 1 och lägga till
strukturerad CM-hantering, testmetrik, IEEE 829 standarddokumentation, releasenotes,
ickefunktionell test, change control board för felhantering, strategi för testmiljöer och testdata,
versionshantering av testmaterial, driftsättningsrutiner och vad som ska lämnas över till
förvaltning.
Steg 3 i processoptimeringsarbetet syftar till att ta testprocessen till högsta nivå. Innehållet är
information om verktygsstöd för att förbättra testarbetet, strategi för statisk test, exitkriterium
för ett testprojekt, automatisering av regressionstester, etablering av kommunikationskanaler,
testhandbok och forum för kontinuerligt förbättringsarbete.
Med denna uppsats i din hand har du det som krävs för att få dina system och ert arbetsteam
att prestera maximalt och för att få systemen att motsvara förväntningarna.
Trevlig läsning och lycka till med testarbetet!
Jesper Högberg
2
Jesper Högberg
Född 1976. Arbetar som konsult, utbildare och rådgivare
inom test och kvalitetssäkring av IT system.
Sedan 2001 har Jesper Högberg arbetat inom bank, finans,
spel, telekommunikation, offentlig förvaltning och kommunal
utbildning.
De roller som Jesper Högberg arbetat inom är testchef,
teststrateg, testledare, auditor, configuration manager,
prestandatestare, systemtestare, funktionstestare,
integrationstestare, kravspecificerare, utbildare och lärare.
Jesper Högbergs utbildning är ISTQB Full Advanced Level
Certified, Civilingenjör Farkostteknik med inriktning
tillämpad matematik från KTH och Filosofie Kandidat
examen i nationalekonomi från Stockholms Universitet.
Stora komplexa affärskritiska system har redan från början
varit vardagen. Erfarenhet från olika branscher och roller har
skapat en förståelse för hur dagens IT samhälle fungerar
bakom kulisserna.
Nuförtiden skriver Jesper Högberg en del material inom
testområdet som är till nytta för många andra.
På fritiden umgås Jesper Högberg med familj och vänner,
läser böcker inom test och nationalekonomi samt tränar
styrketräning. Somrarna tillbringar Jesper Högberg med
familjen i det soliga Tunisien där tiden fördrivs med sol, bad,
bazarförhandlingar och diverse bröllopsfester.
3
Innehållsförteckning
Inledning ............................................................................................................................5
Avgränsningar ....................................................................................................................5
Förutsättningar ...................................................................................................................5
Projektstyrningsmetod ........................................................................................................5
Implementationsteknik........................................................................................................7
Kontinuerlig integration......................................................................................................7
V-modellen.........................................................................................................................8
Riktlinjer för testpersonal ...................................................................................................8
Generiska arbetssteg för test ...............................................................................................9
Det idealiska testarbetet ......................................................................................................9
Arbetsuppdelning processoptimering ................................................................................10
Inkrement 1 ......................................................................................................................11
Teststrategi ...................................................................................................................11
Statisk test ....................................................................................................................13
Testplanen ....................................................................................................................14
Karaktäristik för inledande arbetsmetod ........................................................................15
Enhetstest .....................................................................................................................16
Integrationstest .............................................................................................................16
Systemtest ....................................................................................................................17
Acceptanstest................................................................................................................18
Inkrement 2 ......................................................................................................................18
CM strategi och process................................................................................................18
Definitioner av metrik...................................................................................................19
Standardiserad dokumentation ......................................................................................21
Releasenotes .................................................................................................................22
Riskbaserad testning .....................................................................................................22
Webbsystem .................................................................................................................23
Ickefunktionell test .......................................................................................................23
Change Control Board ..................................................................................................24
Testmiljöerna................................................................................................................25
Testdata ........................................................................................................................25
Versionshantering av testmaterial .................................................................................25
Driftsättning .................................................................................................................26
Överlämning förvaltning...............................................................................................26
Inkrement 3 ......................................................................................................................26
Testverktyg...................................................................................................................26
Kommunikationskanaler ...............................................................................................27
Strategi för statisk test...................................................................................................28
Exitkriterium ................................................................................................................28
Automatisering av regressionstest .................................................................................28
Testhandbok .................................................................................................................29
Etablering av forum för kontinuerliga förbättringar.......................................................29
Referenser ........................................................................................................................29
4
Inledning
I dagens samhälle övergår mer och mer av utvecklingen av IT system till att använda agila
utvecklingsmetoder. Samtidigt blir kraven på våra IT system striktare. Fler och fler system
integreras och kraven på tillförlitlighet är nästan 100 procent. Detta ställer stora krav på en
effektiv testprocess.
Denna uppsats behandlar en av de vanligast förekommande typerna av projekt idag där
lättrörlig systemutvecklingsmetodik enligt SCRUM tillämpas och implementationen av
källkoden sker med Test Driven Development, TDD.
Uppsatsen beskriver först förutsättningar, projektstyrningsmetodik, utvecklingsmetodik och
riktlinjer för utveckling. Sedan följer tre inkrement med omfattande innehåll för att uppnå en
optimal testprocess.
Avgränsningar
Uppsatsen förklarar inte alla begrepp, testtekniker, verktyg och processer i detalj. Det
förutsätts att ledaren för arbetet eller teamet sammantaget har tillräcklig erfarenhet för att
kunna genomföra processoptimeringsarbetet. Litteraturreferenserna innehåller de detaljer som
inte förklaras explicit i denna uppsats.
Gruppdynamik, motståndskrafter vid förändringsarbete eller vem praktiskt utför de olika
arbetsstegen ligger utanför ramarna för uppsatsen. I dagens agila arbetsteam är detta så
vanliga företeelser att det inte skulle ge extremt mervärde till uppsatsen.
Förutsättningar
Innan implementation av ett system ska påbörjas rekommenderas följande förutsättningar
• Coding guidelines
• Versionshanteringssystem med incheckningsregler
• Felrapportering med tillhörande verktyg och process
• Testmiljö separerad från utvecklingsmiljö
Utan dessa förutsättningar uppstår många onödiga problem som kan kosta både värdefull tid
och resultera i skenande kostnader.
Projektstyrningsmetod
I SCRUM släpps fokus från omfattande dokumentation, administrativa processer, titlar på
personer etc. Fokus ligger på det som är viktigast, körbar programvara. Utvecklingsarbetet är
empiriskt och kan inte beskrivas med en formel. För detta krävs prestigelösa, drivna personer
som gärna är generalister till sin natur.
Sprintöversikten nedan beskriver hur en iteration kan se ut, rollerna i SCRUM beskrivs
liksom några vanligt förekommande begrepp och till sist några principer som har sina rötter i
Lean Software Development.
5
Definitioner inom Scrum
Scrum team – en arbetsgrupp med ca 5 - 9 personer
Sprint – en utvecklingsiteration om ca 2 - 6 veckor
Roller
• Scrum Master – ansvarar för att uppfylla sprintmål
• Product Owner – äger Product Backlog
• Team Member – medlem i teamet som arbetar för att uppnå sprintmålet
Product Backlog
• Ägs av Product Owner
• Prioriterad lista
• Innehåller funktionella och ickefunktionella krav, ändringsarbeten, felrapporter,
önskemål om teknikskiften eller prestandaförbättringar
Sprint Backlog
• Det som implementeras under Sprint
• Prioriterad lista
• Tas fram under Sprint Planning
• Innehåller funktionella och ickefunktionella krav, ändringsarbeten, felrapporter,
önskemål om teknikskiften eller prestandaförbättringar
• Aktiviteter som kan utföras på 2-16 timmar per aktivitet
Figur 1. Sprint backlog
Figur 2. Iteration inom SCRUM.
6
Principer som gäller för SCRUM och ursprungligen kommer från Lean Software
Development, lättrörlig, iterativ utvecklingsmetodik:
• Amplify Learning - sprid din kunskap
• Decide as late as possible - bättre beslutsunderlag
• Deliver as fast as possible - leverera fungerande system i korta iterationer
• Build integrity in - användaren ska uppleva det bästa
• Eliminate waste - gör inget som inte tillför värde för slutkunden
• Empower the team - delegera ansvar till individerna
• See the whole - undvik suboptimering
Implementationsteknik
Test Driven Development, TDD, är kort beskrivet en teknik för att implementera kod där man
skriver testfallen före källkoden. Testfallen representerar kraven för systemet. Detta tvingar
utvecklaren att fokusera på att förstå kraven på rätt sätt. Kraven kan vara formulerade som
use-cases eller user stories.
Testfallen implementeras så att de kan köras automatiskt. Man får omedelbar feedback om
något fel finns då källkoden skrivits. Man arbetar i korta iterationer och anpassar källkod till
att passera testfallen genom refaktorering. Man skriver endast kod som ska passera testfallen,
dvs. uppfylla kraven. Annat ryms inte in i metodiken.
Tekniken handlar mer om hur man designar kod än om hur man testar koden. Det är
utvecklaren själv som implementerar testfallen. TDD har visat att det ökar produktiviteten och
fokuseringen på test.
Med en extremt förenklad sammanfattning kan man beskriva metoden med följande
arbetsmoment:
• Lägg till ett nytt testfall
• Kör testfallen för att se om något fallerar
• Skriv ny kod
• Kör testfallen för att se att de passerar utan fel
• Refaktorera kod, kör testfallen igen
• Repetera arbetsmomenten från början
Kontinuerlig integration
Det naturliga är att röra sig mot kontinuerlig integration, d v s hela systemet skall vara
byggbart och testbart hela tiden. Viktiga delar i kontinuerlig integration för att fungera
praktiskt är:
• En väl fungerade CM-miljö med versionshantering
• Automatiskt bygge av hela systemet
• Automatisk testning så långt det finns implementerade testfall
• Automatisk publicering av bygg- och testresultat på intranätet
Alla dessa steg är inte en förutsättning för att komma igång. I beskrivningen av de olika
inkrementen beskrivs när de olika stegen är aktuella.
När kontinuerlig integration fungerar behövs aldrig något tvivel över produktens status.
7
V-modellen
V-modellen förklarar konceptuellt hur system byggs uppifrån och ner och testas nerifrån och
upp. Modellen förklarar vilka nivåer som används och vad som är utgångspunkten för tester
på en viss nivå.
Kravdefinition
Acceptanstest
Funktionell
systemdesign
Systemtest
Integrationstest
Teknisk
systemdesign
Enhetstest
Komponent
specifikation
Programmering
Figur 3. V-modellen.
Den vänstra halvan av V-modellen är det dokument och artefakter som bygger upp systemet.
Statisk testning utförs i de olika stegen längs den vänstra halvan. Den högra halvan av
V-modellen symboliserar testnivåerna för dynamisk testning, dvs. exekvering av
programvaran.
Kopplingen förklarar vad som utgör grunden för respektive testnivå. Det bör vara spårbarhet
horisontellt för varje testnivå och vertikalt längs den vänstra halvan. Med detta menas att
testfallet ska förklara på ett enkelt sätt vilket krav det är som testas.
Den vertikala spårbarheten är att Kravdefinitionen utgör grunden för Funktionell
systemdesign som i sin tur utgör grunden för Teknisk systemdesign. Det är lämpligt att
namnge dokument och artefakter på så sätt att det framgår vad som var grunden för varje nivå.
Riktlinjer för testpersonal
Dessa riktlinjer gäller tests roll i projektet och grundläggande egenskaper för det som
produceras genom systemets livscykel:
• Testledning och testare ska vara delaktiga så tidigt som möjligt i utvecklingsprojektet
• Krav-, design- och funktionsspecifikationer ska vara mätbara, testbara och spårbara
• Testare ska granska allt material som är nödvändigt att granska och skapa testfall av
detta
• Detta gäller allt som produceras i projektet: Enkelhet, tydlighet, robusthet, inga
onödiga extradetaljer, keep it simple!
8
•
Utbildning i testdesigntekniker är av yttersta vikt
Generiska arbetssteg för test
De arbetssteg som beskrivs här genomsyrar allt testarbete oavsett utvecklingsmetodik och
mognad i testprocessen som helhet. De genomförs inte alltid exakt i denna ordningsföljd men
stegen görs metodisk av alla testare eller testledare:
• Planera tid, omfattning av tester och personalbehov
• Granskning och analys av dokumentationen
– Kravspecifikationer, designmodeller och funktionsspecifikationer
• Designa och specificera testfall
– Skriv rubrik som innehåller syftet med testet samt bestäm vilken
testdesignteknik som ska användas, bestäm input, teststeg och output
• Skaffa testmiljö
– Det kan behövas flera separata testmiljöer med det viktigaste är att testarna inte
arbetar i samma miljö som utvecklare, inte heller i produktionsmiljön
• Säkerställ testdata
– Det är av vikt att kunna återställa testdata till ett utgångsläge i testmiljön,
dessutom ska testdata inte innehålla känslig personlig information
• Exekvera testfall, logga resultat och rapportera avvikelser
• Utvärdera utfall och skriv testrapport
• Leverera testfall till förvaltning och genomför kontinuerligt utvärdering för
förbättringar
– Detta görs i slutet av ett projekt då en produkt anses färdigutvecklad och kan
levereras vidare till användare och förvaltningsorganisation. Detta sker inte
efter varje sprint
Det idealiska testarbetet
I agila projekt är utmaningen att hålla dokumentationen på en sådan nivå att det är hållbart att
underhålla den. En lösning på detta är att göra på följande sätt:
• Skriv en testplan för flera sprintar
• Arbeta med testdriven utveckling enligt TDD, Test Driven Development
• Tillämpa statisk testning, dvs. granskningar på alla nivåer
• Skriv testfall på rubriknivå och bestäm vilken testdesignteknik som ska användas för
integrationstest och systemtest
• Gör riskanalys och uppdatera risklistan veckovis med teamet
• Träna och utbilda mycket inom testdesign
• Tillämpa exploratory testing och error guessing och använd testfallsrubrikerna som
stomme
• Automatisera så mycket tester som möjligt
• Använd så många olika verktyg som möjligt för att stödja den definierade
testprocessen
• Se till att kommunikation och ansvar i projektet fungerar på alla plan
Detta är lättare sagt än gjort och därför behövs en genomtänkt strategi för att komma fram till
detta och det är precis det som fortsättningen av denna avhandling går ut på.
9
Observera att det är av yttersta vikt att utbilda sig inom test ordentligt och specifikt på olika
testdesigntekniker. Den bästa testaren är den bäst utbildade testaren.
Arbetsuppdelning processoptimering
Processoptimeringsarbetet delas upp i tre huvuddelar där de olika delarna har olika mål.
•
•
•
Inkrement 1 - har syftet att definiera ett strukturerat arbetssätt och utbilda personalen
i grundläggande testkunskap. Teststrategi tas fram
Inkrement 2 - syftar till att förbättra det som byggdes upp i inkrement 1 och tillägga
CM strategi, metrik, releasenotes, riskbaserad teststrategi, change control board, ickefunktionell testning och driftsättning
Inkrement 3 - har som syfte att lägga in så mycket verktygsstöd som möjligt för att
stödja testprocessen, strategi för statisk test, testhandbok och definierat exitkriterium.
Detta inkrement syftar även till att skapa rutiner för kontinuerlig processförbättring
Ett inkrement behöver 2 - 4 sprints för att genomföras. Allt förs in stegvis och ytterligare en
sprint används vid behov för att slutföra innehållet i ett inkrement. Om endast 2 sprintar
behövs går det bra att fortsätta med nästa inkrement.
Arbetet är influerat av TDD, SCRUM, Test Process Improvement och Best Practices
utvunnen från många års erfarenhet i olika branscher såsom telekommunikation, spel, bank,
finans och offentlig förvaltning.
Bestäm inkrement
Utvärdera utgångsläget
Utvärdera resultat
av förändringen
Fastställ vad som
ska göras
Genomför och
implementera
förändringen
Formulera tidsplan för
förändringen
Figur 4. Iterativ modell för optimering av testprocesser.
10
Förklaring till bilden är att arbetet påbörjas med ett av inkrementen. Vi antar att vi börjar med
inkrement 1. Arbetet påbörjas med att utvärdera utgångsläget, sedan bestäms vad som behövs
göras för att inkrement 1 ska anses vara genomarbetat. Tidsplan formuleras och inkrementet
förväntas ta 2-4 sprintar att införa. Förändringen genomförs sedan. Resultatet utvärderas. Är
inkrementet färdigimlementerat eller är det arbetsmoment som motiverar ytterligare en
iterativ process i förändringsarbetet för att slutföra innehållet i inkrementet? Om innehållet
anses vara färdigimplementerat fortsätter förändringsarbetet med att påbörja ett nytt
inkrement. På detta sätt fortsätter processoptimeringsarbetet ända tills målet är uppnått.
Sprints
1
2
3
Inkrement
Figur 5. Tidsaxel för sprint och inkrement.
Tänkbart är att det går åt ca 8-12 eller eventuellt ytterligare 2-4 sprintar för att genomföra alla
inkrementen för att optimera testprocesserna. Testautomatisering och verktygsinförande i
större utsträckning som sker i det sista inkrementet kan kräva mycket tid.
Inkrement 1
Första inkrementet syftar till att definiera ett strukturerat arbetssätt med en uttalad strategi.
Träning av medarbetare med fokus på testnivåer, testdesigntekniker, testtyper, testverktyg och
en sammanhängande process där utvecklare och testare interagerar. I detta fall handlar det om
SCRUM och TDD som ska tränas och mogna hos medarbetarna. Fokus ligger i högre
utsträckning på funktionella tester än icke funktionella tester inledningsvis.
Teststrategi
En teststrategi tas fram av en testledare eller teststrateg och är ett viktigt fundament för test av
ett system. Det är den bakomliggande arkitekturen i testprocessen skulle man kunna säga.
Det är av yttersta vikt att den som formulerar teststrategin har djup insikt i systemarkitektur,
teknikval, beroenden och samband mellan delsystem och vilka tekniska kvalitetskrav som
finns. En grafisk översiktsbild bör upprättas där systemet beskrivs med dess modulära
uppbyggnad och de olika skikt som sammantaget bygger upp systemet. Denna bild bör vara
tydligt kommunicerad till all personal i utvecklingsteamet inklusive alla som arbetar med test.
Olika arbetsflöden genom systemet förklaras så att det framgår vilka vägar genom systemet
viktiga arbetsflöden har. Detta är av stor vikt för att förstå hur systemet ska integreras, testas,
byggas ut och för dess releaseplanering av olika komponenter och delsystem.
11
En effektiv teststrategi bör innehålla:
• Testnivåer
o Enhetstest, integrationstest, systemtest, acceptanstest
• Testtyper
o Funktionalitet, säkerhet, prestanda, användbarhet, kompatibilitet,
tillförlitlighet, skalbarhet, underhållbarhet, fail-over, testbarhet och
installerbarhet
• Testdesignteknikerna som tas upp i grundläggande testkurser som kommer från
BS7925-2 Standard for Software Component Testing
o Strukturell test där kodtäckningsgrad mäts – statement, decision, condition
coverage
o Statisk analys där kodstandard, komplexitet eller minnesläckage analyseras
o Funktionell testdesign med
Ekvivalensklasspartitionering
Gränsvärdestest
Tillståndstester
Logiska kombinationer (Decision tables)
Pairwise testing
Use-case testing
o Statisk test i form av granskningar
Walktrough – författaren demonstrerar och förklarar det som ska
granskas
Inspection – formell granskningsprocess styrd av moderator och med
mätbara mål
Technical review – tekniska specialister djupgranskar komplexa
detaljer
o Erfarenhetsbaserad testdesign som ökar effektiviteten
Exploratory testing – testdesign, exekvering och loggning sker löpande
Error guessing – checklistor med kända typer av fel skräddarsys och
uppdateras löpande för det system som testas, kan göras med riskanalys
som utgångspunkt
• Testverktyg
o Testledningsverktyg
o Felrapporteringsverktyg
o Versionshanteringsverktyg
o Modelleringsverktyg
o Testdesignverktyg
o Testexekveringsverktyg
• Testmiljöer och testdata
o Testdata genereras, avkodas, versionshanteras och laddas om löpande
o Utvecklingsmiljö, funktionstestmiljö, prestandatestmiljö, acceptanstestmiljö
och produktionsmiljö rekommenderas
• Testprocess och utvecklingsprocess
o En uttalad idé om hur arbetet ska bedrivas är viktigt för kommunikationen och
resultatet. Projektdeltagarna behöver tydlig information om vad som gäller i
projektet
• Utbildning
o För att kunna använda en effektiv teststrategi krävs rätt förutsättningar i form
av utbildning i testnivåer enligt v-modellen, testdesign, testverktyg,
testprocesser, utvecklingsprocesser och om infrastrukturen. Projekt är
12
lagarbeten där varje individ behöver få ut bästa baserat på den erfarenhet som
individen har. Rekommendation är att alla läser boken A Practitioners Guide to
Software Test Design av Lee Copeland. Observera att det aldrig går att bli helt
fullärd när det gäller testdesign, det krävs ständig utbildning och praktisering.
Det är mycket viktigt att känna till att en teststrategi som innehåller både strukturerad
enhetstestning och dessutom integrationstest, systemtest och acceptanstest som genomförs
med etablerade testtekniker är mycket mer effektiv är om strategin endast innehåller antingen
enhetstest eller integrationstest och systemtest. Det är helhetsstrategin som är överlägsen. De
fel som hittas på enhetstestnivå går ej nödvändigtvis att upptäcka med integrationstest eller
systemtest. Gränssnitten för de olika testnivåerna är olika och de ska inte ses som
överlappande. Alla nivåer behövs testas. Systemtest är inte ett skyddsnät för att hoppa över
enhetstest.
Statisk test
Statisk test görs i förebyggande syfte och detta introduceras i det första inkrementet.
Statisk test är ett av de mest kostnadseffektiva sätten att få bra kvalitet för ett system.
Granskningar kräver inte ett exekverbart system, det går snabbt att läsa dokument, det kräver
inte alltid teknisk kompetens, kunskap sprids i gruppen och koncensus uppnås.
Det kan upplevas som en tröskel att ta sig över för att komma igång med formella
granskningsprocesser med strukturerad process och definierade steg.
En mindre formell metod som med fördel används då något är halvfärdigt är Walkthrough
där författaren förklarar för kollegor vad ett dokument eller en modell handlar om och tar
emot feedback.
En typ av mer strikt och formell granskning kallas inspection och dess process kan delas in i
• Entry – roller definieras, dokument eller källkod görs tillgängliga
• Planning – personer allokeras, roller tilldelas och dokument beskrivs
• Kick-off – presentation och distribution av material, beskrivning av ansvar, roller och
strategi
• Preparation – individuell förberedelse där avvikelser och problem loggas
• Review – genomgång av dokument där alla kommentarer från loggar gås igenom och
leds av moderator. Författaren är lämpligtvis med och antecknar kommentarerna som
kommer upp
• Rework – omarbetning av de avvikelser som uppkommit
• Follow-up – slutavstämning och leverans till nästa steg i utvecklingsprocessen
• Exit – mätbart kriterium som måste vara uppnått
Detta kan förklaras konceptuellt i det första inkrementet av processförbättringen och
genomföras mer disciplinerat i ett senare skede.
Viktigt att tänka på för den som granskar är att söka efter information som inte är mätbar,
testbar och spårbar från t.ex. krav till design. Det som eftersökt är även logiska konflikter,
motsägelser, slarvfel, logiska fel, brått mot regler för design, icke kompletta beskrivningar,
otydlig tolkningsbar information men framförallt sådant som strider mot sunt förnuft.
Granskas kod, se då upp för inkonsistent namnkonvention, avvikelser från coding guidelines,
spretig osammanhängande logik, alltför långa sammanhängande kodavsnitt som kan delas
upp, fixa tal i koden eller en ofullständig felhantering.
13
Statisk test kan delvis göras av verktyg som fokuserar på att hitta
• Cyklomatisk komplexitet som mäter mängden testfall som krävs för att testa
funktionen och dessutom ger det indikation om funktionen är svår att underhålla eller
förstå
• Minnesläckage då minne allokeras men aldrig frigörs
• Potentiella fall för systemkrash vid felanvändning av variabler
• Kontrollflödesdiagram som visar olika sätt för hur koden kan exekveras
• Dataflödesanalys där initiering, användande och borttagande av objekt i koden
analyseras
Testplanen
Testplan formuleras med betoning på att det inte dokumenteras i stor utsträckning. Testplanen
skrivs enligt IEEE 829 som mall. För varje kapitel kan viss information återanvändas från en
sprint till en annan. Testplanen skrivs idealiskt för ett antal sprintar. Det är främst testing tasks
som kommer att uppdateras. Detta kan göras i ett testverktyg, projektplaneringsverktyg eller
sprint backlog.
Här är nedan finns ett exempel på hur testplanen är organiserad enligt IEEE 829.
Test plan identifier – Unik benämning av testplanen.
Introduction – Summering av vad som ska testas, vilka system och funktioner som avses.
Här kan det finnas referenser till tex Projektplan, kvalitetssäkringsplan,
konfigurationshanteringsplan, policies och standards.
Test items – Vilka testobjekt, dvs. delsystem, system, dokument etc. och dess versioner som
ska testas.
Features to be tested – Beskrivning av vilka egenskaper som ska testas. Funktionalitet,
prestanda, användbarhet, tillförlitlighet, säkerhet, kompatibilitet, portabilitet etc. Beskrivning
av design specifikation för varje ”feature”.
Features not to be tested – Beskrivning av vad som ej behöver testas.
Approach – Beskrivning av strategi eller tillvägagångssättet att testa systemet. För varje
grupp av ”features” bör det framgå tillvägagångssättet med aktiviteter, teknikerna och
verktygen som krävs för att testa. Det bör vara tillräckligt detaljerat för att man ska kunna
bedöma tidsåtgång för de huvudsakliga testuppgifterna.
Item pass/fail criteria – Kriterium för att avgöra ifall testobjekten har passerat
kvalitetskraven eller ej.
Suspension criteria and resumptions requirements – Kriterium för att avbryta påbörjat test
och vad som ska vara uppfyllt för att man ska återuppta testerna igen på den nivå som avses.
14
Test deliverables – Vilken testdokumentation som ska levereras. Testplan,
testdesignspecifikationer, testfallsspecifikationer, testprocedurspecifikationer,
leveransdokumentation, testloggar, felrapporter och testrapporter.
Testing tasks – Aktiviteter för att förbereda och exekvera testerna.
Environmental needs – Förteckning av nödvändiga och önskvärda egenskaper för testmiljön.
Detta bör beskriva såväl hårdvara och mjukvara och dess versioner.
Responsibilities – Förteckning av ansvariga för ledning, design, förberedelser, exekvering,
kontroll och lösning i samband med testerna.
Staffing and training needs - Specificering av kompetenser och utbildningsbehov för
testteamet.
Schedule – Tidsplan som inkluderar både ”milestones” från projektplanen och tidpunkter för
leveranser.
Risks and contingencies – Identifiering av högriskområden som kräver extra uppmärksamhet
vid testexekveringen. Testerna ska bedrivas så att identifierade konsekvenser av riskerna
minimeras.
Approvals – Namn och titel på personer som ska godkänna testplanen.
Karaktäristik för inledande arbetsmetod
Under all form av utvecklingsarbete krävs återkoppling på det material som skapas, i detta fall
dokument, designmodeller och källkod. Det är viktigt att återkopplingen sker så frekvent som
möjligt och för att gå igenom de olika sätt som feedback fås listas det så här
• Parprogrammering (testdriven) är den snabbaste återkopplingen av kamraten
• Statisk test i form av granskning i någon form
• Enhetstest exekveras med jämna mellanrum och specifikt varje gång systemet
kompilerats
• Kontinuerlig integration där team medlemmarnas kod checkas in och byggs frekvent
och kompileringsfel blir kända
• Daily scrum, det dagliga statusmötet där det meddelas vad som gjorts, vad som ska
göras och vilka hinder som finns
• Integrationstest funktionskedjor och interface kontrolleras, automatiskt eller manuellt
så ofta det behövs
• Systemtest sker under sprint
• Prestandatest genomförs minst en gång i månaden
• Demo, i slutet av varje sprint sker en demonstration av körbar programvara och
återkoppling sker av Product Owner
Implementationen av systemet bör ske testdrivet med tekniken TDD – Test Driven
Development. Detta kräver eller ger
• Genomtänkt implementation
• Ständigt uppdaterad regressionstestsvit för enhetstester
15
Enhetstest
Fokus för enhetstesterna som tas fram vid implementationen är att uppnå så hög nivå som
möjligt för
• Statement coverage – där andelen exekverade kodrader mäts
• Decision coverage – där andelen möjliga utfall från villkor som exekveras mäts
• Condition coverage – där andelen exekverade utfall av möjliga utfall från
beståndsdelar i villkor där villkoren kan vara sammansatta av flera villkor
Teknikerna för att uppnå kodtäckningsgrad är kontrollflödestester. Dessa beskrivs bland annat
i BS7925-2 Standard for Software Component Testing och ingår i alla grundläggande
certifieringar inom test.
Målet är ständigt att minska komplexiteten i implementationen, att undvika minnesläckage,
följa kodstandard och uppnå en hög nivå av enkelhet och underhållbarhet för källkoden.
Stöd för detta är statisk analys och är en integrerad del i ett modernt utvecklingsverktyg.
Cyklomatisk komplexitet är minsta antalet testfall som krävs för att exekvera alla unika icke
loopande vägar genom koden. Detta betyder att det är ett implicit mått på kostnad för
underhåll. Kod med högre komplexitet ger i regel fler fel, kräver mer test, är mer
personberoende och därmed dyrare att underhålla.
Rekommendationen för den cyklomatiska komplexiteten är att
• Minska komplexitet på koden så mycket det går
• Cyklomatisk komplexitet högre är 10 bör granskas och delas upp
För att öka kodtäckningsgraden bör följande tas i beaktning
• Om det finns kod som inte har några krav bör krav läggas till eller kod tas bort.
• Om det finns kod som inte används rekommenderas att ta bort den
• Om tester saknas för ett krav bör testfall läggas till
Integrationstest
Integrationstest är viktigt för att säkerställa interaktionen mellan enheter och komponenter och
utvärdera systemets olika interface. Sätt ihop funktionskedjor och exekvera testfall.
Rekommenderat är att använda standardtesttekniker såsom
– Ekvivalensklasser
– Gränsvärdestester
– Logiska kombinationer
– Tillståndstester
– Use case test
– Pairwise testing
Systemintegration kan betyda olika saker, dels kan det betyda att man integrerar delsystem
med varandra t.ex. klient, server, databas. Det kan även betyda att man integrerar olika system
med varandra som var för sig kan bestå av ett antal delsystem med klient, server, databas.
Viss litteratur benämner de 2 varianterna som "integration in the small" och "integration in the
enterprise". Här ska vi fokusera på integration in the small.
Man talar ofta om 3 strategier inom systemintegration: top-down, botton-up eller big-bang.
16
•
•
•
Top down: man börjar med användargränssnitt och jobbar sig nedåt, stubbar behövs
Bottom up: man börjar med databas och jobbar sig uppåt, inga stubbar behövs
Big bang: man försöker få ihop alla delsystem tillsammans direkt, fungerar i princip
inte alls, tekniken kan förväntas fungera för icke tekniskt utbildad personal
Som en liten bonus brukar lagervis integration nämnas, med detta menar man att t.ex. alla
server delar integreras, sedan alla databas delar etc. Man skulle kunna säga att det är ett första
"integration in the small" steg. I exemplet med top-down, bottom-up och big-bang så har
dessa steg föregåtts av lagervis integration.
Var vaksam på att läsa loggfiler då man skapar databaser då kompileringsfel kan upptäckas.
Kolla alltid loggar vid installation av alla system. Det gäller att fånga felen så tidigt som
möjligt.
När man jobbar som integrationstestare är det mycket bra att utveckla en integrationsstrategi
för det system som ska testas. Om det är mycket logik i databas delen, börja då med att sätta
upp databasen, koppla sedan på ett delsystem på databasen, t.ex. server, fortsätt sedan med
ytterligare ett delsystem. För varje steg måste en kedja av funktioner testas så att det framgår
om allt hänger ihop.
Om det är ett system med mycket logik i användargränssnittet, inled då med att sätta upp de
delar som inkluderar användargränssnittet, lägg på stubbar, testa funktioner, lägg på ett
delsystem underifrån, stubba under, testa funktionalitet. Fortsätt tills hela systemet är
integrerat.
Idealiskt sett kan integrationstester automatiseras kontinuerligt och exekveras som en del av
ett dagligt systembygge. Det kräver då att systemet kan installeras automatiskt i en testmiljö.
Om det inte går att installera automatiskt kan installationen ske steg för steg enligt ovan
nämnd integrationsstrategi och efter det testas med automatiska integrationstester.
Systemtest
Det fullt integrerade system testas här med fokus på att utvärdera
• Kravspecifikation
• Användningsfall
• Icke-funktionella krav
Använd standardtekniker beskrivna i teststrategin och integrationstest för funktionstest och
komplettera alltid med exploratory testing och error guessing med checklista. Logga
testresultaten. De icke-funktionella testerna förklaras i inkrement 2.
Inled systemtesterna med ett ”smoketest” där positiva huvudflöden testas på systemets olika
funktioner, delsystem och användningsfall. Fortsätt sedan med ny funktionalitet och
felrättningar och till sist fokuseras testerna på regressionstestning av mest affärskritisk
funktionalitet, mest feltät funktionalitet och den mest komplexa funktionaliteten. Detta är
riskbaserad testning som införs mer systemetiskt i inkrement 2.
Riskbaserad regressionstest är typiska testfall som är lämpliga att automatisera som en
naturlig del av arbetet i varje iteration. Det som planeras in i en ny iteration bör inkludera
implementation av automatiska testfall som alltid behövs exekveras för varje bygge. Dessa
17
bör ingå som en testsvit som exekveras en gång per dygn. I denna optimeringsprocess läggs
extra fokus på detta i inkrement 3.
Acceptanstest
I detta fall handlar det om innehållet från Product Backlog och Sprint Backlog. Kan Product
Owner acceptera det som levererats i Sprint? Detta genomförs av systemtestare och beställare.
Fokus ligger på arbetsflöden, användbarhet och prestanda.
Prestandatester görs med fördel utanför sprintplaneringen eftersom det är en aktivitet som
oftast tar mer än 2 arbetsdagar. Lämpligen används verktyg för att testa systemets prestanda.
I detta inkrement av processoptimering görs prestandatest med positiva huvudflöden på en
grundläggande nivå.
Användningsfall, user stories, arbetsflöden eller hur de ska kallas utvärderas och testas så att
systemet garanterar sin lämplighet vilket är en förutsättning för att systemet ska kunna
användas i verksamheten.
Användbarhet kontrolleras med checklistor och slutanvändare kommer in med kommentarer
om systemet.
Följande frågor måste kunna besvaras positivt
• Fungerar affärsprocesserna i systemet?
• Är kunden nöjd?
• Kan affärsnyttan börja räknas hem?
Inkrement 2
Syftar till att förbättra det som tidigare byggts upp och målet med inkrement 2 är att tillägga
• CM strategi
• Definiera relevant metrik för att mäta testarbetet
• Statusrapportering
• Standardiserad dokumentation enligt IEEE 829
• Riskbaserad teststrategi
• Change control board
Teststrategin finns dokumenterad och inkluderar statisk och dynamisk test på alla nivåer och
målet är att alla moment i strategin ska tillämpas i detta inkrement.
Verktygsstödet ökar marginellt för att stödja testprocessen. Fokus flyttas mer mot icke
funktionella tester men fortfarande görs funktionella tester i samma utsträckning.
Testmiljöerna utökas och kontrolleras strukturerat.
CM strategi och process
Versionshanteringen är tydligt definierad. Olika utvecklingsgrenar finns definierade. Ett
huvudspår för produktutveckling, ett underhållsspår för akuta rättningar av driftsatt system,
olika utvecklingsgrenar för olika projekt och delsystem. Då utveckling sker i separata grenar
är det valfritt ifall funktionaliteten ska in i en viss release vilket kan vara bra om arbetet
18
försenats av någon anledning. Funktionaliteten mergas sedan in då den är färdigutvecklad.
Branch och merge regler för källkodshanteringen i versionshanteringssystemet och
namngivning rekommenderas liksom incheckningsregler. Namngivning av baselines och
releaser sker strukturerat enligt fastställda namnkonventioner.
Patch releasetag
Maintenance branch
Main branch
Prerelease synchronization
Releasetag
Development branch
Figur 6. Bild över kodspår i versionshanteringssystemet.
Detta är en viktig del av arbetet inom området configuration management att hålla reda på de
olika utvecklingsspåren i versionshanteringssystemet. I detta fall räknar vi med en ny release
efter varje sprint. Poängen med agila utvecklingsmetoder är just att framstegen mäts i form av
körbar programvara. En annan mycket viktig del är att veta vilka komponenter som
tillsammans är kompatibla och bildar fungerande system. Idealiskt vet configuration
managern dessutom vilka systemkonfigurationer och dess komponenter med versionsnummer
som finns installerade i alla olika miljöer för test och produktion.
Enhetstester kan genomföras på utvecklingsgrenarna. Integrationstest, systemtest och
acceptanstest bör genomföras då utvecklingsgrenens nya funktionalitet mergats in i
huvudspåret. Byggsystemet bör kompilera system i sin helhet från huvudspåret.
Observera att det är av vikt för hela produktens existens att ha en fullständig förtäckning av
hårdvara, operativsystem och installerad programvara med versioner inklusive kompilatorn
själv på maskinen där systemet kompileras och byggs ihop. Detta är en högrisk aktivitet och
den måste fungera.
Definitioner av metrik
Detta avsnitt syftar till att definiera olika mått på framsteg i testarbetet och dessa mått kan
kommuniceras till olika intressenter. Statusrapportering, uppföljning, kontroll och styrning av
testprocessen kräver metrik.
En metod att optimera nyttan av metrik är att tydligt ställa frågan vad målet är med testerna.
Sedan väljs vilka frågor som ska besvaras för att avgöra om målet är uppnått. Till sist bestäms
vilken metrik som behövs för att besvara dessa frågor. Metrik kan grupperas och klassificeras
och nedan följer några konkreta exempel.
19
•
•
•
•
Kravhanteringen ger behovet av följande metrik
o Hur många krav finns?
o Hur stor del av kraven är implementerade?
o Hur stor del av kraven är testade?
Testfallen ger behovet av följande metrik
o Antal planerade testfall
o Antal specificerade testfall
o Antal testfall med högsta prioritet / totala antalet testfall
o Antalet specificerade testfall / antal planerade testfall
o Antalet exekverade testfall
o Antalet passerade testfall
o Antalet fallerade testfall
o Antalet blockade testfall
Felhanteringen ger behovet av följande metrik
o Antalet funna fel
o Antalet öppna fel
o Antalet fel per allvarlighetsgrad
o Antalet fel per delsystem
o Antalet fel per status
o Feldensitet: Antalet fel i förhållande till storleken på systemet (antalet
kodrader)
o Antalet funna fel per tidsenhet
o Antalet kritiska fel relaterat till totala antalet funna fel
o Procent funna fel
• Antalet funna fel för en testnivå / totala antalet fel i denna och
efterföljande testnivåer och i produktion
• (systemtest) / (systemtest + acceptanstest + produktion)
• (integrationstest) / (integrationstest + systemtest +
acceptanstest + produktion)
Resursutnyttjande ger behovet av följande metrik
o Antalet mandagar för planering och specificering
o Antalet mandagar per hittat fel
o Antalet mantimmar för att rätta fel
o Antalet mandagar för exekvering av testfall
Vad som är normalt är att modellera totala antalet fel eller antalet fel per tidsenhet i en graf
över tiden. På så sätt är det möjligt att approximera framtida iterationer och på så sätt komma
fram till tidpunkten då systemet är tillräckligt stabilt för att kunna driftsätta. Vanligt är att
totala antalet fel uppträder som en s-kurva vid nyutveckling. En trend med antalet funna fel
per tidsenhet förväntas vara en avtagande kurva som konvergerar mot noll antal fel per
tidsenhet. Det totala antalet öppna fel förväntas minska över tiden och ett konstant antal öppna
fel över tider är ett tecken på att fel upptäcks och korrigeras i samma takt.
Metriken är viktig att använda i kommunikationen med utvecklare för att kunna fokusera
arbetet på att förbättra de delar som uppvisar flest svagheter och fel. Om antalet öppna fel är
oförändrat eller ökar kan även detta ge en indikation om att utvecklare är upptagna med något
som gör att antalet öppna fel inte minskar.
20
Projektledning eller Scrum Master behöver ständigt information om status för antalet fel,
antalet fel per allvarlighetsgrad och delsystem, antalet planerade testfall, hur stor del av
kraven som är testade osv.
Den metrik som används i kommunikationen mellan projektledning och test är enligt
överenskommelse. Det viktiga är att den metrik som används är begriplig och tillför nytta för
mottagaren.
Viss metrik är till främst för testare och testledare och behöver inte kommuniceras till andra.
Standardiserad dokumentation
Nu börjar uppryckningen mot ett mer standardiserat arbetssätt inom test
• IEEE 829 guidar dig till testdokumentation, ha detta som utgångspunkt
• BS 7925-2 Standard for Software Component Testing
o Beskriver alla grundläggande testtekniker som används i teststrategin
• ISO 9126 tar upp icke-funktionella kvalitetsattribut
• IEEE 1028 Standard for Software Reviews and Audits
• ISTQB Glossary of Testing Terms
Det ställs högre krav på kvalitet i leveranserna, testresultat måste vara spårbara och en del
testmaterial förväntas vara leverabler till kund. Detta kräver en något mer formaliserat sätt att
dokumentera. Här rekommenderas en lagom och tillräcklig mängd dokumentation i linje med
kundens förväntningar och om dessa saknas krävs tillräcklig dokumentation för att
kommunikationen i projektet ska kunna fungera så friktionsfritt som möjligt.
Som utgångspunkt för dokumentationen används IEEE 829 som innehåller följande
dokument:
Test plan
Test Item
Test Design Spec
Test Item Transmittal Report
Test Case Spec
Test Procedure Spec
Test Execution
Test Incident Report
Test Log
Test Summary Report
Figur 7. Beskrivning av de dokument som ingår i IEEE 829.
21
Kortfattad beskrivning av varje dokument görs här. För alla detaljer hänvisas till
källdokument för IEEE 829.
Test Plan – beskriven tidigare i dokumentet.
Test Design Specification - beskrivning av testfall på rubriknivå och beskrivning av den
testteknik som ska användas i testet
Test Case Specification – Detaljerad beskrivning av testfall med förutsättningar, indata,
teststeg och förväntat resultat.
Test Procedure Specification – En testdriver för automatiska testfall inklusive setup, start,
exekvering, loggning och återställning.
Test Execution är inte ett dokument utan det ska bara symbolisera att tester ska genomföras.
Test Incident Report – felrapport som administreras i lämpligt verktyg
Testlog – beskrivning av utfallet för exekverade testfall. Status och eventuellt falrapport
loggas för varje testfall som exekverats.
Test Summary Report – en beskrivning av testerna i en iteration eller helt projekt, beskriver
vad som testats och dess resultat som ska jämföras med ett kriterium för att mottagaren ska
acceptera leveransen.
Test Item – en beskrivning av ett testbart delsystem eller system.
Test Item Transmittal Report – releasenote som beskriver status för ett delsystem, system
eller en komponent.
Rekommendation är att använda de olika dokument som ingår i IEEE 829. Notera att det
måste gå att underhålla testfallen inom tidsramarna, detta betyder att de inte kan vara alltför
detaljerade. Om de ska vara mycket detaljerade behövs fler resurser vilket kan vara motiverat
för säkerhetskritiska system där liv står på spel, t.ex. inom medicinteknik, flygindustrin eller
då mycket stora ekonomiska belopp hanteras.
Releasenotes
Releasenotes förbättrar kommunikationen i överlämningen till nästa steg i arbetsflödet. En
testare som får en releasenote av en utvecklare där det står vad som förändrats kan avsevärt
öka sin effektivitet i testarbetet. Vad som ska ingå i en releasenote är t.ex.
• Övergripande beskrivning av innehållet
• Beskrivning av ny funktionalitet
• Rättade fel
• Versionsnummer på allt som levererats
• Lagringsplats för det som levererats, testresultat etc.
Riskbaserad testning
Systemet som är under utveckling växer för varje iteration som går och detta gör att testerna
måste prioriteras. Alla testfall som inte är automatiserade kan inte exekveras manuellt vid
varje enskild iteration, tiden räcker inte till för det.
En grundregel är när en ny testnivå ska testas, t.ex. vid påbörjade systemtester, körs ett
sanitetstest ”smoke test” där den mest affärskritiska funktionaliteten testas först, följt av ny
funktionalitet, rättningar och riskbaserad regressionstestning av tidigare utvecklad
funktionalitet och egenskaper. Konceptuellt handlar riskbaserad testning om att fokusera på
det mest affärskritiska, mest komplexa och det mest feltäta områdena.
22
Grunden till riskbaserad testning är en riskanalys som syftar till att
– Klargöra projekt och produktrisker
– Prioritera affärskritisk, komplex och feltät funktionalitet
Riskbaserad testning har som syfte att
– Fokusera alltid på att reducera riskerna för haveri!
– Välj rätt områden, testnivåer och testtyper samt prioritera hur mycket tid som
ska läggas på vardera testtyp
– Uppdatera riskerna kontinuerligt
Riskerna bör justeras veckovis och hela teamet hjälper till att kommunicera riskerna. Ju mer
man vet och ju fler som hjälper till med riskarbetet desto bättre.
Sträva efter att skriva nya testfall och utveckla testfallen kontinuerligt och anpassa dessa till
de risker som finns. Då ett fel upptäcks skrivs ett nytt testfall för detta om det inte redan
fanns. Detta gäller såväl enhetstester som tester på andra nivåer. Det är alltid bra att ha ett test
som säkerställer att felen inte uppkommer igen vilket är en möjlighet om versionshanteringen
inte fungerar. Viktigt att variera indata i testfallen över tiden, annars upptäcks nästan inga nya
fel.
Webbsystem
Detta avsnitt förklarar inte några testtekniker ingående utan ska bara ytligt beskriva vad som
har högst prioritet för webbsystem eftersom så många system som utvecklas idag görs för
webben. Allt förklaras i detalj i andra kapitel.
I dagens samhälle används i större och större utsträckning webbaserade system och det ställer
krav på en viss typ av egenskaper där följande testfokus rekommenderas
• Funktionalitet
o Detta testas med standardtekniker för testdesign beskrivna enligt BS7925-2
• Användbarhet
o Testas med checklistor som uppdateras kontinuerligt
• Säkerhet
o Tester som säkerställer skydd mot SQL-injection, XSS, buffer overflow.
o Behörighetstester är också en viktig del
• Prestanda
o Antalet användare är svårt att förutsäga
o Analysera framtida användning och designa lastmodeller
o Vid exekvering: övervaka minnesutnyttjande, svarstider, CPU utnyttjande samt
loggfiler
o Är systemet skalbart?
o Är det robust?
• Kompatibilitet
o Webbläsare, operativsystem och kombinationer av dessa
Ickefunktionell test
När fokus flyttas mot mer icke funktionella tester är det följande typer som bör ingå och dessa
kräver specialtekniker
23
•
•
•
•
•
•
•
•
•
Säkerhet – systemet analyseras på alla nivåer och en attackplan utvecklas för att hitta
eventuella säkerhetshål. Dessa tester kräver specialutbildning av den som testar. Funna
fel måsta hanteras med största möjliga diskretion och dessa fel får ej hanteras i
ordinarie felrapporteringsverktyg.
Prestanda –systemets förväntade användning analyseras i detalj och testas med
produktionslik last. Vilka användare finns det, vad gör dessa och hur ofta? Testfall och
verklighetstrogna lastmodeller designas, implementeras och exekveras med verktyg.
Normalfallet är att designade testfall och scenarion spelas in med ett verktyg.
Genererade skript parametriseras för att de ska bli portabla mellan miljöer och för att
testdata ska kunna separeras från testfallet. Prestandatestverktyget kan sedan simulera
ett antal användare genom att exekvera skripten.
Användbarhet testas med checklistor. Referensanvändare från den verksamhet som
ska mottaga systemet kan vara med och genomföra användbarhetstest.
Installerbarhet – systemet ska ha en dokumenterad procedur för att installeras i en ny
miljö. Ett system som ej går att installera har inget värde alls för slutkunden.
Kompatibilitet – olika webbläsare och operativsystem ska kunna användas. Det kan
uppstå ett stort antal kombinationer av operativsystem, servrar, databaser och
webbläsare. Detta hanteras med fördel med pairwise testing och allpairs algorithm
som kan skapa testfall med tillräcklig testtäckning med endast en bråkdel av det totala
antalet möjliga kombinationer.
Tillförlitlighet – ett system har ofta krav på sig att vara tillgängligt 99.5% av tiden
eller liknande. För att garantera detta bör tester göras där en större mängd
transaktioner exekveras och sedan räknas antalet fel och på så sätt kan andelen
transaktioner utan fel av det totala antalet transaktioner svara för om tillförlitligheten
är acceptabel.
Skalbarhet – systemet ska vara modulärt uppbyggt. Skalbarhet är mycket viktigt om
det inte går att fastställa utvecklingen av antalet användare över tiden. Ett exempel kan
vara webbsystem som till en början kan ha hundratal användare för att efter några år
ha miljontals användare.
Underhållbarhet – kod som är skriven enligt guidelines, har cyklomatisk komplexitet
under 10 och är logiskt uppdelad i moduler har goda möjligheter att vara enkla att
underhålla för nytillkomna framtida utvecklare. Detta är viktigt eftersom systemen
förväntas ha lång livstid med föränderliga krav och omvärld. Guidelines för koden bör
beskriva nödvändig koddokumentation för att det ska vara rimligt enkelt att sätta sig in
i koden.
Fail-over – här testas när olika kopplingar mellan delsystem eller delsystemen i sig
själva slutar fungera. Vanligt är att ha ett krav på att databaser ska vara redundanta,
dvs. om en slutar fungera av någon anledning kan den andra användas som ersättare.
Denna princip kan användas på alla systemets delsystem och länkar.
Change Control Board
De fel som uppkommer i test har olika karaktär. Systemets olika intressenter upplever att
felrapporterna har olika prioritet att bli lösta. Product owner, scrum master, testledare,
supportpersonal eller arkitekt kan ha vitt skilda prioriteringar kring vilka felrapporter som ska
lösas först eftersom de har olika intressen. Av denna anledning införs ett felklassningsråd som
leds av configuration manager och hålls 1-2 gånger i veckan för att gemensamt prioritera
felrapporterna och vid konfliker så avgörs configuration manager vad som ska ske med
felrapporten.
24
Testmiljöerna
För att få ut maximalt av testerna gäller det att ha olika separata miljöer för olika testtyper.
Funktionell test, prestandatest och acceptanstest bör ha separerade miljöer så att dess tester
inte ska störa varandra eller påverkas av omladdning av data. De olika miljöerna kan ställa
olika krav på mängd hårdvara. Test av prestanda, skalbarhet, fail-over etc ställer mycket
högre krav på relevant infrastruktur i förhållande till produktionsmiljön jämfört med den miljö
där de funktionella testerna genomförs. Versionshantering vid uppsättning av test och
driftmiljö måste fungera. Det är viktigt att alltid veta vilka versioner av systemen som finns
installerade i respektive miljö, annars går det ej att återskapa och korrigera fel som upptäcks.
Det bör alltid finnas förtäckning över de systemkonfigurationer som innehåller kompatibla
delsystem och komponenter. Maskinerna bör även ha en förtäckning över vilka
operativsystem och programvara med versioner som ska finnas för att systemet ska kunna
installeras.
Komponenter
Databas
Server
API
GUI
Komponent 1
Komponent 2
Komponent N
MS SQL
Windows Server
…
…
Integrationstest
1.2.0
1.2.1
1.3.0
2.0.1
1.0.4
2.0.2
2.0.0
2005
2003
…
…
Funktionstest
1.0.0
1.0.1
1.0.2
1.2.1
1.0.0
1.0.2
1.0.0
2005
2003
…
…
Miljöer
Prestandatest
1.0.0
1.0.1
1.0.2
1.2.1
1.0.0
1.0.2
1.0.0
2005
2003
…
…
Acceptanstest
1.0.0
1.0.1
1.0.2
1.2.1
1.0.0
1.0.2
1.0.0
2005
2003
…
…
Produktion
1.0.0
1.0.1
1.0.2
1.2.1
1.0.0
1.0.2
1.0.0
2005
2003
…
…
Figur 8. Förtäckning över installerade systemkonfigurationer i olika miljöer.
Testdata
Testdata bör vara avidentifierad från känslig personinformation eller annan icke offentlig
information. Testdata bör kunna laddas i en miljö regelbundet så att ett idealt utgångsläge för
tester kan skapas. Testdata kan versionshanteras och eventuellt skapas med verktyg. Ett
alternativ är att en databas administratör justerar befintlig produktionsdata så att den
avidentifieras.
Versionshantering av testmaterial
På samma sätt som versionshantering sker med källkod bör detta ske även för
testdokumentationen. Drivers som används för automatiska tester bör behandlas på samma
sätt som källkoden för systemet självt. De testfall som skapas bör ses som återanvändbara
enheter och följa med produkten. Testfallen underhålls och lever med under hela livscykeln
för systemet. Då ett system levereras kan testfallen användas i förvaltning.
25
Driftsättning
Innan driftsättning ska göras så måste detta förberedas med en detaljplan och det finns många
viktiga saker att tänka på. Här följer en lista på aktiviteter:
•
•
•
•
•
Gör en säkerhetskopiering av databasen
Installera de program som behövs i driftsmiljön, det ska finnas en lista på alla program
som behövs inklusive den egenutvecklade programvaran.
Skriv en plan vad som ska hända minut för minut den dag som systemet ska
driftsättas, observera att planen ska testas i en testmiljö innan den genomförs i en
driftsmiljö.
Skicka ut information till alla på företaget när driftsättningen ska göras.
Se till att ha rätt personal på plats under driftsättningen ifall något oväntat sker
Överlämning förvaltning
Överlämning till förvaltning av testfall, drivers och teststrategi är ett viktigt steg. Det idealiska
är att förvaltningen kan återanvända det som skapats. Rutiner för riskbaserad regressionstest
skapas. En systemägare i förvaltningen utses. Supportansvarig i utvecklingsorganisationen
utses.
Inkrement 3
Målet för inkrement 3 är att följande ska finnas och fungera
• Test management verktyg som hanterar releaser, krav, testfall, sprintplanering,
felhantering, spårbarhet mellan krav, testfall, felrapporter och releaser
• Verktyg för testexekvering såsom prestandatest, testautomatisering av datadriven
funktionell regressionstest med fokus baserad på formell riskanalys
• Ansvarsfördelning är klar, alla kommunikationsvägar är definierade, information om
byggen, testexekvering, risker, nya releaser finns på intranätet
• Formell statisk testprocess med beskriven strategi inkluderat walkthrough och
inspection
• Testhandbok
• Mätbart exitkriterium
Testverktyg
Nu gäller det att införa verktygsstöd i så stor utsträckning som möjligt för den testprocess som
utvecklats. Verktygen ska öka effektiviteten och noggrannheten i arbetet och på så sätt frigöra
tid och resurser. Då kan förbättringar och ytterligare automatisering göras. Här förklaras olika
typer av verktyg som stödjer testprocessen:
•
Testledningsverktyg – när testledningsverktyg ska användas rekommenderas att ha ett
eller flera verktyg som tillsammans kopplar ihop releasehantering, krav, testfall,
testplanering med testlogg och felrapporter. Ännu bättre är det om
versionshanteringsverktyget kan integreras i detta. Viktigast är att ha spårbarhet
26
•
•
•
•
•
•
mellan krav (design eller komponentspecifikation) och testfall för att kunna göra
påverkansanalys vid kravförändring eller mäta kravuppfyllnad.
Felrapporteringsverktyg – detta är ett absolut måste och var i princip en förutsättning
från början. Kan användas för avvikelser i dokumentation såsom kravspecifikation
eller designmodell vilket ökar fokus på att få ärendet korrigerat.
Versionshanteringsverktyg var från början en förutsättning för att ett team ska kunna
samarbeta med implementationen av ett system.
Statiska testverktyg – Statisk analys är i regel integrerat i ett modernt
utvecklingsverktyg. Det finns även verktyg för att stödja formella
granskningsprocesser där statistik och annan information kan loggas för att optimera
granskningsprocessen.
Modelleringsverktyg kan användas för att verifiera design
Testdesignverktyg för att modellera indata och utdata.
Testexekveringsverktyg kan vara otroligt mycket och mängden verktyg växer ständigt.
Detta kan handla om länktestverktyg, prestandatestverktyg, monitoreringsverktyg,
säkerhetstestverktyg, kodtäckningsanalys, simulatorer för inbyggda system, drivers
och stubbar för enhets och integrationstestning. Verktyg för datadriven funktionell
regressionstest. Dessa verktyg kan vara kommersiella eller egenutvecklade.
Ett tecken på en hög mognadsgrad i testprocessen är att verktygsstöd används i hög
utsträckning. Viktigt att tänka på är dock att verktyget inte kan ersätta kompetens.
Testprocessen måste definieras innan verktyget ska kunna stödja testprocessen.
Kommunikationskanaler
Kommunikationen mellan roller på olika nivåer i organisationen måste fungera och detta är en
lista av olika processer som måste fungera för att testprocessen ska anses vara optimerad.
Använd alla tänkbara hjälpmedel såsom instant messaging, intranät, telefonkonferens,
videokonferens, automatiska mail, men framför allt verkliga möten med människor.
•
•
•
•
•
•
•
•
•
•
Felrapporteringen fungerar, fel blir rättade i prioritetsordning och antalet öppna fel
minskar över tiden
Leverans av delsystem till test fungerar med intern releasenote och historik på intranät
eller motsvarande
Release av nya delsystem till driftmiljön fungerar enligt beskrivning, releasenote
skriven och historik finns skriven på intranät
Kravhanteringsprocessen fungerar och det finns inte utspridda, omätbara, icke testbara
och splittrade krav
Kommunikationen mellan beställare och leverantörer, dvs. Product Owner och Scrum
Master fungerar tillfredställande
Problemlösning vid tekniska problem eller driftsproblem fungerar enkelt och
tillräckligt snabbt med så få mellanhänder som möjligt eftersom mellanhänder innebär
extra ledtid
Organisationen förstår varför man måste jobba med test och kvalitetssäkring eftersom
det är lägre kostnad att förebygga och korrigera felen innan driftsättningen jämfört
med att låta katastrofen vara framme och sedan rätta fel akut med dålig kvalitet och
bristande förtroende som följd
Automatiska regressionstester på enhetsnivå körs alltid innan leverans till testmiljö
Det finns testdata i verklighetstrogen omfattning
Det finns dokumenterat vad som ska levereras och vad som levererats
27
•
•
•
•
•
Gränssnitten mellan alla delsystem finns dokumenterade
Varje problem och leverabel har en ansvarig ägare
Fel rapporteras då de upptäcks och i så få felhanteringssystem som möjligt. Idealiskt
är kund och leverantör inne och administrerar i samma system.
Andelen specialfall hålls alltid minimalt både avseende kod, processer,
problemlösning etc. Grupper av problem löses alltid på ett så enhetligt sätt som
möjligt
Utvecklingen är personoberoende, dvs. utvecklare eller testare kan ersättas om de
försvinner från organisationen
Strategi för statisk test
Här beskrivs en strategi för hur granskning av dokument sker. Det handlar om att använda
checklistor, standards, guidelines, planer, procedurer eller andra relevanta riktlinjer vid
granskning. Deltagarna har olika kompetenser och fokuserar på olika saker. Ett dokument
som granskas av t.ex. 5 olika personer får tillbaka olika återkoppling av varje enskild person.
Det är av yttersta vikt för kvaliten att så många olika aspekter och synvinklar blir belysta
under granskning. Det är effektivt att ha en uttalad plan att de olika personerna ska titta extra
på olika saker och bidra med sin specialistkompetens. En extra krydda är att kunskapen sprids
på ett mycket bra sätt vid granskningar.
Exitkriterium
Mätbara avslutskriterier för test är av yttersta vikt för att beslut om driftsättning ska fattas på
godtyckliga grunder. Avslutskriterier kan vara
• Alla kraven har testfall
• Alla kraven är testade
• Kodtäckningsgraden är 80% decision coverage
• Alla planerade testfall på systemtestnivån är exekverade
• Alla högriskområden är testade
• Det finns maximalt 3 fel av allvarlighetsgrad Major Fault
Automatisering av regressionstest
För att på ett kostnadseffektivt sätt återtesta ett system många gånger är det värdefullt att
automatisera regressionstester. Det återbetalas om testerna måste exekveras minst 10 gånger
vilket görs under en period på några månader som längst.
Rekommendationen är att basera urvalet av testfall för regressionstester på en formell
riskanalys. Vid själva implementationen sedan är det av vikt att tänka på att testfallen måste
vara möjliga att underhålla. Det kan vara användbart att separera testdata från testfallen och
på så sätt skapa datadriven funktionell regressionstest.
En god förutsättning för att det ska lämna sig för automatiska regressionstester på
systemtestnivå är att den funktionalitet som ska testas anses vara stabil och inte förändras ofta
eftersom det är orimligt att uppdatera testfallen inför varje exekveringstillfälle.
28
Testhandbok
När arbetet utvecklats mot en högre mognadsgrad är det lämpligt att skapa en testhandbok.
Det som bör beskrivas i testhandboken är s.k best practices, alltså sådant som bevisats fungera
bra i de olika utvecklingsiterationerna och är sådant som bör återanvändas framöver. Exempel
på innehåll i en testhandbok är testnivåer, testtyper, testdesigntekniker, verktygsbeskrivningar,
miljöbeskrivningar, regler för kvalitet såsom antal tillåtna defekter vid leveranser, metrik och
allmänna tips.
Etablering av forum för kontinuerliga förbättringar
För at testprocessen ska fortleva på ett optimalt sätt krävs att återkoppling på vad som
fungerar bra och mindre bra görs i varje sprint. Inställningen hos medarbetarna ska vara att
försöka förbättra testprocessen i varje sprint. Detta görs naturligt inom Scrum. Det viktiga är
att testprocessen får det fokus den förtjänar. De aktiviteter som krävs för att optimera
testarbetet kan bli aktiviteter i varje sprint. Testledning och teststrateg kan lista en ”test
backlog” med de aktiviteter som krävs för att höja testmognaden vilket på sikt resulterar i mer
kostnadseffektiv systemutveckling.
Referenser
•
•
•
•
•
•
•
•
•
•
•
•
•
Test Process Improvement, Koomen, Pol
A practitioners guide to software test design, Copeland Lee
Software testing Practice: Test Management, Spillner Andreas
The Software Test Engineer’s Handbook, Bath, McKay
Agile development with Scrum, Schwaber Ken
Agile testing, Lisa Crispin
Real World Software Configuration Management, Kenefick Sean
Foundations of Software Testing: ISTQB Certification, Graham Dorothy
Software Testing – A Guide to the TMap Approach, Pol, Teunissen, Veenendaal
Test och kvalitetssäkring av IT system, Eriksson Ulf
Software Testing Fundamentals, Hutcheson Marnie
BS7925-2 Standard for Software Component Testing
IEEE 829 Standard for Software Test Documentation
29