Er du udvikler eller tester, og sidder du på et projekt, hvor I har svært at finde de gode testcases og at sikre jer, at de testcases, I vælger, også har en passende dækning? I denne artikel giver vores senior testkonsulent Daisy Fischlein Steffensen dig en introduktion til, hvordan testdesignteknikker kan hjælpe jer med netop dette.
Hvad er “dækning”?
“Dækning” siger noget om, hvor godt de forskellige aspekter af et system er testet. Testdækning måler, hvor mange af systemets funktioner, moduler, eller kodelinjer der er blevet testet. En god testdækning betyder, at I kan øge sandsynligheden for at finde fejl eller mangler i systemet og dermed opnå en større tillid til systemets pålidelighed og funktionalitet.
Men en høj testdækning er ikke nødvendigvis lig med en god testdækning, og flere testcases er ikke altid bedre. For at finde ud af, hvordan I skal teste jeres system, bør I starte med at lave en risikoanalyse.
Start med en risikoanalyse
Risikoanalysen har til formål at afdække risikoen for fejl i løsningen, så I kan målrette jeres test derefter.
Er risikoen lav, kan I måske nøjes med en uformel og mindre struktureret test.
Er risikoen høj, bør testen være grundig. Dette betyder ikke, at I blot skal have flere testcases. Flere testcases sikrer ikke automatisk, at testen bliver bedre. I stedet bør I gå systematisk til værks og bruge testdesignteknikker til at udlede jeres testcases. Testdesignteknikker hjælper med at sikre, at alle relevante funktioner, scenarier og grænsetilfælde dækkes uden at spilde tid og ressourcer på unødvendige testcases.
Hvad er en testdesignteknik?
En testdesignteknik kan beskrives som “en systematisk tilgang til at identificere og udvælge testcases, så alle vigtige scenarier og grænsetilfælde dækkes”.
Teknikkerne hjælper dig samtidig med at balancere antallet af testcases, da I ved at bruge teknikkerne til at udvælge jeres testcases samtidig tager et aktivt valg, om hvilken dækning I ønsker.
Teknikkerne kan ofte bruges til at opnå en grundig test med et beskedent antal testcases. I opnår dermed en mere effektiv test, da I ikke spilder tiden med unødvendigt mange testcases, der måske ikke engang tester det vigtigste.
De mest anvendte testdesignteknikker
Der er forskellige testdesignteknikker til rådighed, og valget afhænger af den specifikke testopgave og kontekst.
Nogle af de mest anvendte testdesignteknikker er:
Ækvivalenspartitionering (“Equivalence Partitioning”):
Denne teknik deler inputområdet i forskellige ækvivalensklasser/grupper, hvor elementerne i hver klasse forventes at opføre sig ens. Du vælger så en repræsentativ værdi fra hver klasse til din(e) test(s). Det reducerer antallet af testcases, der skal udføres, samtidig med at alle relevante scenarier dækkes. Et eksempel kan være “køb af en busbillet”, hvor du kun tester med én værdi for hver af ækvivalensklasserne “barn”, “voksen” og “pensionist”.
Grænseværdianalyse (“Boundary Value Analysis”):
Denne teknik fokuserer på at teste inputdata på grænserne for ækvivalensklasserne. Fejl opleves oftest ved disse grænser, og ved at teste grænseværdierne kan du afsløre potentielle problemer.
Hvis eksempelvis alle i aldersgruppen 16-66 år regnes som voksne, skal du her teste værdierne 15, 16, 66 og 67 for at dække grænserne mellem ækvivalensklasserne og sikre, at systemet prissætter billetterne korrekt.
Beslutningstabel (“Decision Table Testing”):
Beslutningstabel er en testdesignteknik, der bruges til at teste forskellige kombinationer af logiske betingelser og handlinger. I en beslutningstabel repræsenteres betingelser og handlinger som rækker, mens hver kolonne repræsenterer en specifik kombination af betingelser. Ved at teste hver kombination kan du sikre, at systemet reagerer korrekt i forskellige scenarier. Teknikken er særligt god til test af komplekse forretningsregler.
Herunder ses et simpelt eksempel på en beslutningstabel:
Tilstandsovergangstest (“State Transition Testing”):
Tilstandsovergangstest er en testdesignteknik, der fokuserer på at teste overgange mellem forskellige tilstande i et system eller en applikation. Du tager udgangspunkt i et tilstandsovergangsdiagram, der viser systemets tilstande og overgangene imellem dem.
Tænk f.eks. på fartpiloten i en bil. Den kan have tilstandene: slukket, standby eller aktiv. Et tilstandsovergangsdiagram kan systematisk kortlægge overgangene mellem disse tilstande og identificere de ugyldige overgange. Dermed kan du udlede dine testcases og sikre, at fartpiloten altid transitionerer korrekt fra én tilstand til en anden. Afhængigt af hvor grundig testen skal være, kan du nøjes med at teste de enkelte overgange, f.eks. fra standby til aktiv, eller du kan teste kombinationer af overgange, f.eks. standby -> aktiv -> standby -> slukket.
Datakombinationstest (“Data Combination Testing”):
Datakombinationstest er en testdesignteknik, der involverer test af forskellige kombinationer af inputdata for at afsløre fejl og problemer relateret til interaktionen mellem disse data. Her tager du udgangspunkt i ækvivalensklasserne og tegner et træ til at skabe overblik over de mulige kombinationer. Ved at identificere relevante kombinationer og teste dem kan du sikre, at systemet håndterer forskellige datakombinationer korrekt. Du kan vælge forskellige dækningsgrader, der hjælper med at udvælge de mest hensigtsmæssige kombinationer, afhængigt af hvor grundig en dækning du ønsker.
Du kan måske forestille dig et system, der bruges til bestilling af pakkelabels, og hvor du ønsker at teste kombinationer af vægt, dimensioner på pakken og destinationsland.
Nedenfor vises et simpelt eksempel på et klassifikationstræ for bestilling af pakkelabels. Testcases angives i rækkerne og skal tolkes således, at du i testcase 1 skal kombinere en pakke med en vægt på
Hvilken testdesignteknik skal I så vælge?
Hvilken testdesignteknik, I skal vælge, afhænger af flere faktorer såsom risiko, kompetencer og ikke mindst grundlaget for testen (systemspecifikationer, krav m.m.), men i første omgang begrænses valget af testdesignteknik til, hvilken teknik der passer til det, I ønsker at teste. Teknikken tilstandsovergangstest giver eksempelvis kun mening i forhold til test af processerne i et system, der kan skifte mellem flere tilstande.
Så første skridt til at bruge testdesignteknikkerne er at lære en god håndfuld teknikker at kende, så I har en teknik til de fleste situationer. For den givne kontekst skal I tage stilling til risikoen. Er risikoen lav, er det måske slet ikke nødvendigt med test designteknikker. Er risikoen er høj, bør I finde ud af, hvilke teknikker der kan bruges, og vælge en eller flere af disse teknikker.
I vil af og til komme ud for, at I ikke har den nødvendige testbasis – eller med andre ord ‘det nødvendige grundlag’ – til at bruge jeres teknikker. Lad os tage et eksempel: For at bruge teknikken tilstandsovergangstest, har I brug for et tilstandsovergangsdiagram. Hvis et sådant diagram ikke allerede findes, kan det være en god anledning til at få tegnet diagrammet ud fra den eksisterende testbasis. Diagrammet bør reviewes af de relevante interessenter, for om det korrekt beskriver den forventede systemopførsel. Sådanne diagrammer/modeller af systemet er med til at sikre en fælles forståelse for, hvordan systemet skal fungere, og medvirker til at sikre, at I ikke blot får lavet nogle gode testcases, men også at I får kodet systemet rigtigt i første omgang.
Har du spørgsmål eller kommentarer til artiklen, er du velkommen til at kontakte vores senior testkonsulent Daisy Fischlein Steffensen på daisy@key2quality.dk.
Hvis du vil lære mere om risikoanalyse og anvendelse af ovenstående testdesignteknikker, så se nærmere på nogle af vores kurser her: Gå til kursussiden.
Du er altid velkommen til at kontakte både Daisy og vores andre undervisere, hvis du er i tvivl om, hvilket kursus der er det rigtige for dig. Vi tilbyder også skræddersyede kurser, der er tilpasset dit og dine medkursisters niveau, kontekst og behov.