Boundary Value Analysis – A Black Box Testing Technique
Vi ved allerede, at Black Box-testning indebærer validering af systemet uden at kende dets interne design. Vi har også diskuteret faldgruberne ved ækvivalenspartitionering, og hvordan de kan fejle ved partitionsgrænser. Hvis du ikke har læst vores artikel om ækvivalenspartitionering, vil jeg stærkt anbefale dig at læse den, før du læser denne artikel. I denne artikel vil vi diskutere en anden black box testteknik kendt som Boundary Value Analysis. Vi vil også se, hvordan denne teknik komplimenterer Equivalence Partitioning.
- Hvad er Boundary Value Analysis?
- Hvordan laver man Boundary Value Analysis?
- Grænseværdianalyse med ækvivalenspartitionering
- Faldgruber ved grænseværdianalyse
Hvad er grænseværdianalyse?
Grundlaget for grænseværdianalyse (BVA) er at teste grænserne ved partitioner (Husk ækvivalenspartitionering !). BVA er en udvidelse af ækvivalenspartitionering. Dette er dog kun anvendeligt, når partitionen er ordnet og består af numeriske eller sekventielle data. Minimum- og maksimumsværdierne for en partition er dens grænseværdier.
Vi har set, at der er store chancer for at finde fejlene ved grænserne af en partition (F.eks. en udvikler, der bruger >10 i stedet for >= 10 for en betingelse). Ækvivalenspartitionering alene var ikke tilstrækkelig til at fange sådanne fejl. Der opstod derfor et behov for at definere en ny teknik, der kan opdage uregelmæssigheder ved partitionens grænser. Det er sådan, at grænseværdianalyse kom ind i billedet.
Grænseværdianalyse kan udføres på alle testniveauer, og den bruges primært til et interval af tal, datoer og tid.
Hvordan laver man grænseværdianalyse?
Nu da vi har fået en idé om grænseværdianalyse, lad os forstå, hvordan man udleder testbetingelser ved hjælp af denne teknik. Vi vil henvise til det samme eksempel på gymnastikform (se vores artikel om ækvivalenspartitionering), hvor vi skal indtaste alder.
Det første trin i grænseværdianalyse er at oprette ækvivalenspartitionering, som ville se ud som nedenfor.
Koncentrer dig nu om den gyldige partition, som spænder fra 16-60. Vi har en fremgangsmåde i 3 trin til at identificere grænser:
- Identificer den nøjagtige grænseværdi for denne partitionsklasse – som er 16 og 60.
- Hent den grænseværdi, som er én mindre end den nøjagtige grænse – som er 15 og 59.
- Hent den Grænseværdi, som er én mere end den præcise Grænseværdi – som er 17 og 61.
Hvis vi kombinerer dem alle, får vi nedenstående kombinationer for Grænseværdi for Alderskriteriet.
Gyldige Grænsebetingelser : Alder = 16, 17, 59, 60
Invalid Boundary Conditions : Age = 15, 61
Det er nemt at se, at gyldige randbetingelser falder ind under Valid partition class, og ugyldige randbetingelser falder ind under Invalid partition class.
Kan du finde ud af, hvorfor vi ikke har brugt 16.1, 15.9, 59.9 og 60.1 som grænseværdierne for forøgelse og for nedsættelse af grænsen? Det er et begreb, som der ikke er en tilstrækkelig forklaring på i de fleste artikler. Lad os derfor tage et andet eksempel for at forklare det. Antag, at du indtaster din vægt på et websted. På grundlag af din vægt og højde vil webstedet fortælle dig Body Mass Index (BMI). Du kan indtaste værdier fra 30 til 150 kg i indtastningsfeltet for vægt. Indtastningsfeltet for vægt tillader kun naturlige tal, dvs. positive hele tal!
I dette tilfælde vil du, hvis du opretter grænserne ved hjælp af den samme metode, få
Valide randbetingelser : Age = 30, 31, 149, 150
Invalid Boundary Conditions : Alder = 29, 151
Opnå nu det samme scenario, men indtastningsfeltet for vægt tillader decimaltal med op til 1 decimal. I dette tilfælde vil grænsebetingelserne se ud som:
Gyldige grænsebetingelser : Alder = 30, 30.1, 149.9, 150
Invalid Boundary Conditions : Alder = 29.9, 150.1
Så du forskellen? Vi tager den mindste acceptable værdi på hver side af grænsen. Hvis vi tager værdien som 30,01, ender vi med at teste softwaren for to decimaler, hvor kravet er en decimal, hvor kravet er én decimal. Det er en separat testbetingelse og bør ikke blandes sammen med grænseværdi.
Måling af grænseværdidækningen for en partition kan ske som antallet af testede grænseværdier divideret med det samlede antal identificerede grænseværdier.
Boundary Value Analysis with Equivalence Partitioning
Vi har nu fået en rimelig forståelse af Boundary Value Analysis. Så lad os se, hvordan vi kan kombinere den med Ækvivalenspartitionering for at få et komplet sæt af testbetingelser.
Lad os vende tilbage til vores tidligere eksempel og gennemgå diagrammet igen.
Den er fra 16 – 60, og Grænseværdianalyse giver os testbetingelser som 15, 16, 17, 59, 60, 61. Hvis du ser nærmere efter, tror du så ikke, at vi allerede har dækket Gyldig ækvivalenspartitionering ved at dække op for 17, 59 og Ugyldig ækvivalenspartitionering ved at dække op for 15 og 61? Ækvivalenspartitionering siger trods alt, at vi skal vælge et tal mellem 16-60 for gyldig partitionering og mindre end 16 eller mere end 60 for ugyldig partitionering. Så hvis grænseværdien allerede dækker ækvivalenspartitionering, hvorfor har vi så brug for partitionering som en separat teknik? Det er et begreb, der ikke er klart for de fleste, og ikke mange artikler har forklaret det klart.
Theoretisk set har Boundary value ganske vist dækket Ækvivalenspartitionering, men vi har stadig brug for en partition. Hvis vi kun anvender Boundary value, og det mislykkes, vil vi aldrig vide, om kantbetingelsen mislykkedes, eller om hele partitionen mislykkedes. Lad os forstå det ved hjælp af et eksempel. Lad os fortsætte med vores gym-formular, lad os antage, at udvikleren har skrevet nedenstående logik :
If (age < = 17 ) Then Don’t allow Gym Membership
If (age > 60) Then Don’t allow Gym Membership
Hvis du ser på logikken, vil du indse, at logikken skulle have været If (age <17), men udvikleren har tilføjet = forkert tegn. Er du også klar over, at logikken for hele den gyldige partition mangler? If (age>=16 and age <= 60 ) Then allow Gym membership !
Hvis vi kun bruger grænsebetingelsesværdien 17, vil det ikke lykkes at udføre testen. Det vil dog ikke fortælle dig, om grænsebetingelsen mislykkedes, eller om hele partitionen mislykkedes. Som sådan er det vigtigt at bruge en ækvivalenspartitionsværdi, som ikke er en grænseværdi. I dette tilfælde, hvis vi bruger værdien 20, vil det mislykkes ved udførelsen. Det vil give en klar indikation af, at udvikleren har undladt at implementere hele partitionen.
Så hvis vi kombinerer både Grænseværdi- og Ækvivalenspartitionering, vil vores testbetingelser være :
Valide grænsebetingelser : Alder = 16, 17, 59, 60
Invalid Boundary Conditions : Age = 15, 61
Valid Equivalence Partitioning : Age = 25
Invalid Equivalence Partitioning : Age = 5 , 65
Pitfalls of BVA
Når vi har anvendt både grænseværdi- og ækvivalenspartitionering, kan vi så med sikkerhed sige, at vi har opnået al den krævede dækning? Desværre er det ikke så enkelt! Grænseværdi- og ækvivalenspartitionering forudsætter, at programmet ikke tillader dig at indtaste andre tegn eller værdier. Sådanne tegn, som @ eller negative værdier eller endda alfabeter, vil ikke få lov til at blive indtastet. Denne antagelse gælder dog ikke for alle applikationer, og det er vigtigt at afprøve disse, før vi kan sige, at feltværdien fungerer fuldstændigt.
Afhængigt af dette kan vi have situationer, hvor indtastningsværdien afhænger af beslutningen om en anden værdi. F.eks. hvis gymnastikformularen har et andet felt Mand og Kvinde, og aldersgrænsen vil variere afhængigt af dette valg. Grænseværdi alene kan ikke håndtere sådanne variationer, og det fører os til en anden black box-teknik kaldet Decision Table Testing. Vi vil diskutere den i detaljer i vores næste artikel. Stay tuned!