Boundary Value Analysis – A Black Box Testing Technique
Vi vet redan att Black Box Testing innebär att man validerar systemet utan att känna till dess interna utformning. Vi har också diskuterat fallgroparna med ekvivalenspartitionering och hur de kan misslyckas vid partitionsgränser. Om du inte har läst vår artikel om ekvivalenspartitionering rekommenderar jag starkt att du läser den innan du läser den här artikeln. I den här artikeln kommer vi att diskutera en annan black box-testteknik som kallas Boundary Value Analysis. Vi kommer också att se hur denna teknik kompletterar Equivalence partitioning.
- Vad är Boundary Value Analysis?
- Hur gör man Boundary Value Analysis?
- Gränsvärdesanalys med ekvivalenspartitionering
- Gränsvärdesanalysens fallgropar
Vad är gränsvärdesanalys?
Grunden för gränsvärdesanalysen (BVA) är att testa gränserna vid partitioner (kom ihåg ekvivalenspartitionering!). BVA är en utvidgning av ekvivalenspartitionering. Detta är dock endast användbart när partitionen är ordnad och består av numeriska eller sekventiella data. Minimi- och maximivärden för en partition är dess gränsvärden.
Vi har sett att det finns stora chanser att hitta defekter vid gränserna för en partition (t.ex. en utvecklare som använder >10 i stället för >= 10 för ett villkor). Enbart ekvivalenspartitionering var inte tillräckligt för att fånga upp sådana fel. Därför uppstod ett behov av att definiera en ny teknik som kan upptäcka avvikelser vid partitionens gränser. Det var så som gränsvärdesanalys kom in i bilden.
Gränsvärdesanalys kan utföras på alla testnivåer, och den används främst för ett intervall av siffror, datum och tid.
Hur man gör gränsvärdesanalys?
Nu när vi har fått en uppfattning om gränsvärdesanalys ska vi förstå hur man kan härleda testvillkor med hjälp av denna teknik. Vi kommer att hänvisa till samma exempel på gymform (se vår artikel om ekvivalenspartitionering) där vi måste ange ålder.
Det första steget i gränsvärdesanalysen är att skapa ekvivalenspartitionering, som skulle se ut som nedan.
Nu koncentrerar vi oss på den giltiga partitionen, som sträcker sig från 16-60. Vi har ett tillvägagångssätt i tre steg för att identifiera gränser:
- Identifiera exakt gränsvärde för denna partitionsklass – vilket är 16 och 60.
- Hämta det gränsvärde som är ett mindre än det exakta gränsvärdet – vilket är 15 och 59.
- Hämta det gränsvärde som är ett mer än det exakta gränsvärdet – som är 17 och 61.
Om vi kombinerar dem alla får vi nedanstående kombinationer för gränsvärde för ålderskriteriet.
Giltiga gränsvillkor : Age = 16, 17, 59, 60
Invalid Boundary Conditions : Age = 15, 61
Det är enkelt att se att giltiga randvillkor faller under Valid partition class, och ogiltiga randvillkor faller under Invalid partition class.
Kan du förstå varför vi inte har använt 16.1, 15.9, 59.9 och 60.1 som gränsvärden för ökning och minskning? Det är ett begrepp som har en otillräcklig förklaring i de flesta artiklarna. Låt oss därför ta ett annat exempel för att förklara detta. Anta att du anger din vikt på en webbplats. På grundval av din vikt och längd kommer webbplatsen att ange ditt Body Mass Index (BMI). Du kan ange värden från 30 till 150 kg i inmatningsfältet för vikt. Inmatningsfältet för vikt tillåter endast naturliga tal, dvs. positiva heltal!
I det här fallet, om du skapar gränserna med samma metod, kommer du att få
Giltiga randvillkor : Age = 30, 31, 149, 150
Invalid Boundary Conditions : Ålder = 29, 151
Observer nu samma scenario, men inmatningsfältet för vikt tillåter decimaltal med upp till en decimal. I det här fallet kommer gränsvillkoren att vara följande:
Giltiga gränsvillkor : Age = 30, 30.1, 149.9, 150
Invalid Boundary Conditions : Age = 29.9, 150.1
Såg du skillnaden? Vi tar det minsta acceptabla värdet på vardera sidan av gränsen. Om vi tar värdet 30,01 slutar det med att vi testar programvaran för två decimaler när kravet är en decimal. Det är ett separat testvillkor och bör inte blandas ihop med gränsvärde.
Mätning av gränstäckningen för en partition kan ske som antalet testade gränsvärden dividerat med det totala antalet identifierade gränstestvärden.
Gränsvärdesanalys med ekvivalenspartitionering
Vi har fått en rättvis förståelse för gränsvärdesanalys nu. Låt oss se hur vi kan kombinera den med ekvivalenspartitionering för att få en fullständig uppsättning testvillkor.
Vi återgår till vårt tidigare exempel och går igenom diagrammet igen.
Sortimentet går från 16 – 60, och Gränsvärdesanalys ger oss testvillkor som 15, 16, 17, 59, 60, 61. Om du tittar noga, tycker du inte att vi redan har behandlat Valid Equivalence Partitioning genom att täcka upp 17, 59 och Invalid Equivalence Partitioning genom att täcka upp 15 och 61? Equivalence partitioning säger trots allt att vi ska välja ett tal mellan 16-60 för en giltig partition och mindre än 16 eller mer än 60 för en ogiltig partition. Om gränsvärdet redan täcker in ekvivalenspartitionering, varför behöver vi då partitionering som en separat teknik? Det är ett begrepp som är oklart för de flesta och inte många artiklar har förklarat det tydligt.
Teoretiskt sett har Boundary value verkligen täckt ekvivalenspartitionering, men vi behöver fortfarande en partition. Om vi bara tillämpar Boundary value och det misslyckas, kommer vi aldrig att veta om kantvillkoret misslyckades eller om hela partitionen misslyckades. Låt oss förstå det med hjälp av ett exempel. Vi fortsätter med vårt gymformulär och antar att utvecklaren har skrivit nedanstående logik:
If (age < = 17 ) Then Don’t allow Gym Membership
If (age > 60) Then Don’t allow Gym Membership
Om du tittar på logiken kommer du att inse att logiken borde ha varit If (age <17), men utvecklaren har lagt till = fel tecken. Har du också insett att logiken för hela den giltiga partitionen saknas? If (age>=16 and age <= 60 ) Then allow Gym membership !
Om vi bara använder gränsvillkorets värde 17 kommer testet att misslyckas. Det kommer dock inte att berätta om gränsvillkoret misslyckades eller om hela partitionen misslyckades. Det är därför viktigt att använda ett ekvivalenspartitionsvärde, som inte är ett gränsvärde. Om vi i det här fallet använder värdet 20 kommer utförandet att misslyckas. Det kommer att ge en tydlig indikation på att utvecklaren har missat att implementera hela partitionen.
Så om vi kombinerar både gränsvärde och ekvivalenspartitionering blir våra testvillkor :
Valida gränsvillkor : Age = 16, 17, 59, 60
Invalid Boundary Conditions : Age = 15, 61
Valid Equivalence Partitioning : Age = 25
Invalid Equivalence Partitioning : Age = 5 , 65
Pitfalls of BVA
Efter att ha tillämpat både gränsvärdes- och ekvivalenspartitionering, kan vi då med säkerhet säga att vi har uppnått all nödvändig täckning? Tyvärr är det inte så enkelt! Gränsvärde- och ekvivalenspartitionering utgår från att programmet inte tillåter dig att ange några andra tecken eller värden. Sådana tecken, som @ eller negativa värden eller till och med alfabet, kommer inte att tillåtas att skrivas in. Detta antagande gäller dock inte för alla tillämpningar och det är viktigt att testa dessa innan vi kan säga att fältvärdet fungerar helt och hållet.
Bortsett från detta kan vi ha situationer där det inmatade värdet är beroende av beslutet om ett annat värde. T.ex. om Gym-formuläret har ett annat fält Man och Kvinna, och åldersgränsen kommer att variera beroende på detta val. Gränsvärde kan inte ensamt hantera sådana variationer, och detta leder oss till en annan black box-teknik som kallas Decision Table Testing (testning av beslutstabeller). Vi kommer att diskutera detta i detalj i nästa artikel. Håll dig uppdaterad!