Analýza hraničních hodnot – technika testování černé skříňky
Již víme, že testování černé skříňky zahrnuje ověřování systému bez znalosti jeho vnitřního návrhu. Probrali jsme také úskalí ekvivalence rozdělení a to, jak mohou selhat na hranicích rozdělení. V případě, že jste nečetli náš článek o ekvivalenčním rozdělení, vřele doporučuji si ho přečíst před čtením tohoto článku. V tomto článku probereme další techniku testování černých skříněk známou jako analýza hraničních hodnot. Uvidíme také, jak tato technika doplňuje rozdělení ekvivalence.
- Co je to analýza hraničních hodnot
- Jak provést analýzu hraničních hodnot?
- Analýza hraničních hodnot s rozdělením ekvivalencí
- Úskalí analýzy hraničních hodnot
Co je to analýza hraničních hodnot?
Základem analýzy hraničních hodnot (BVA) je testování hranic na rozděleních (Nezapomeňte na rozdělení ekvivalencí !). BVA je rozšířením ekvivalenčního rozdělení. To je však použitelné pouze tehdy, když je rozdělení uspořádané a skládá se z číselných nebo sekvenčních dat. Minimální a maximální hodnoty oddílu jsou jeho hraničními hodnotami.
Viděli jsme, že existuje vysoká pravděpodobnost nalezení závad na hranicích oddílu (Např. vývojář používá pro podmínku >10 místo >= 10). Samotné rozdělení ekvivalencí k zachycení takových vad nestačilo. Proto vznikla potřeba definovat novou techniku, která dokáže odhalit anomálie na hranicích rozdělení. Tak přišla na řadu analýza hraničních hodnot.
Analýzu hraničních hodnot lze provádět na všech úrovních testu a její primární použití je pro rozsah čísel, dat a času.
Jak provést analýzu hraničních hodnot?
Teď, když jsme získali představu o analýze hraničních hodnot, pochopíme, jak pomocí této techniky odvodit podmínky testu. Navážeme na stejný příklad tvaru tělocvičny (viz náš článek o rozdělení ekvivalence), kde potřebujeme zadat Věk.
Prvním krokem analýzy hraničních hodnot je vytvoření rozdělení ekvivalence, které by vypadalo následovně.
Nyní se soustřeďme na platné rozdělení, které se pohybuje v rozmezí 16-60. Máme tříkrokový přístup k identifikaci hranic:
- Identifikujte přesnou hraniční hodnotu této třídy rozdělení – což je 16 a 60.
- Zjistěte hraniční hodnotu, která je o jedna menší než přesná hranice – což je 15 a 59.
- Zjistěte hraniční hodnotu, která je o jedna menší než přesná hranice.
- Zjistěte Hraniční hodnotu, která je o jedna větší než přesná Hranice – což je 17 a 61.
Pokud je všechny zkombinujeme, získáme níže uvedené kombinace pro Hraniční hodnotu pro Kritérium stáří.
Platné Hraniční podmínky : Věk = 16, 17, 59, 60
Neplatné okrajové podmínky : Věk = 15, 61
Je přímo vidět, že platné okrajové podmínky spadají do třídy Valid partition a neplatné okrajové podmínky do třídy Invalid partition.
Můžete přijít na to, proč jsme jako hodnoty přírůstku a úbytku okrajových podmínek nepoužili 16,1, 15,9, 59,9 a 60,1? Je to pojem, který má ve většině článků nedostatečné vysvětlení. Proto si to vysvětlíme na jiném příkladu. Předpokládejme, že na webové stránce zadáváte svou hmotnost. Na základě vaší hmotnosti a výšky vám web sdělí index tělesné hmotnosti (BMI). Do pole pro zadání hmotnosti můžete zadat hodnoty od 30 do 150 kg. Vstupní pole pro hmotnost umožňuje zadávat pouze přirozená čísla, tj. celá kladná čísla!
Pokud v tomto případě vytvoříte hranice stejnou metodou – dostanete výsledek
Valid Boundary Conditions : Věk = 30, 31, 149, 150
Neplatné okrajové podmínky : Věk = 29, 151
Nyní uvažujte stejný scénář, ale pole pro zadávání hmotnosti umožňuje zadávat desetinná čísla až na 1 desetinné místo. V tomto případě budou okrajové podmínky vypadat takto:
Neplatné okrajové podmínky : Věk = 30, 30,1, 149,9, 150
Neplatné okrajové podmínky : Věk = 29.9, 150.1
Vidíte ten rozdíl? Vezmeme minimální přípustnou hodnotu na obou stranách hranice. Pokud vezmeme hodnotu 30,01, pak skončíme u testování softwaru na dvě desetinná místa, kde je požadavek na jedno desetinné místo. Jedná se o samostatnou testovací podmínku a neměli bychom ji směšovat s hraniční hodnotou.
Měření pokrytí hraniční hodnoty pro oddíl může probíhat jako podíl počtu testovaných hraničních hodnot a celkového počtu identifikovaných hraničních testovacích hodnot.
Analýza hraničních hodnot s rozdělením ekvivalence
Tímto jsme dostatečně porozuměli analýze hraničních hodnot. Podívejme se tedy, jak ji můžeme zkombinovat s rozdělením ekvivalence, abychom získali úplný soubor testovacích podmínek.
Vraťme se k našemu předchozímu příkladu a znovu si prohlédněme diagram.
Obsah je od 16 – 60 a analýza hraničních hodnot nám dává testovací podmínky jako 15, 16, 17, 59, 60, 61.
Analýza hraničních hodnot nám dává testovací podmínky jako 15, 16, 17, 59, 60, 61. Když se pozorně podíváte, nezdá se vám, že jsme již pokryli Valid Equivalence Partitioning pokrytím 17, 59 a Invalid Equivalence Partitioning pokrytím 15 a 61? Vždyť Ekvivalenční rozdělení říká, že pro platné rozdělení bychom měli zvolit číslo v rozmezí 16-60 a pro neplatné rozdělení méně než 16 nebo více než 60. Vždyť to je právě to, co jsme si zvolili. Pokud tedy hraniční hodnota již pokrývá Ekvivalenční rozdělení, proč potřebujeme rozdělení jako samostatnou techniku? Je to pojem, který není většině lidí jasný, a málokterý článek ho jasně vysvětlil.
Teoreticky hraniční hodnota skutečně pokryla ekvivalenční rozdělení, ale stále potřebujeme rozdělení. Pokud použijeme pouze Hraniční hodnotu a ta selže, nikdy se nedozvíme, zda selhala okrajová podmínka, nebo celé rozdělení. Pochopíme to na příkladu. Pokračujme v našem formuláři pro tělocvičnu, předpokládejme, že vývojář napsal následující logiku :
If (age < = 17 ) Then Don’t allow Gym Membership
If (age > 60) Then Don’t allow Gym Membership
Pokud se podíváte na logiku, zjistíte, že logika měla být If (age <17), ale vývojář přidal = špatný znak. Uvědomili jste si také, že chybí logika pro celý platný oddíl? If (age>=16 and age <= 60 ) Then allow Gym membership !
Pokud použijeme pouze hodnotu okrajové podmínky 17, dojde k neúspěšnému provedení testu. Neřekne však, zda selhala okrajová podmínka, nebo zda selhalo celé rozdělení. Z tohoto důvodu je nezbytné použít hodnotu oddílu Ekvivalence, která není hraniční hodnotou. V tomto případě, pokud použijeme hodnotu 20, dojde k selhání provedení. Bude to jasný signál, že vývojář nestihl implementovat celé rozdělení.
Pokud tedy zkombinujeme jak hraniční hodnotu, tak ekvivalentní rozdělení, budou naše testovací podmínky následující :
Valid Boundary Conditions : Věk = 16, 17, 59, 60
Neplatné okrajové podmínky : Věk = 15, 61
Validní ekvivalenční rozdělení : Věk = 25
Nevalidní ekvivalenční rozdělení : Věk = 5 , 65
Úskalí BVA
Po použití hraničních hodnot i ekvivalenčního rozdělení můžeme s jistotou říci, že jsme získali veškeré požadované pokrytí? Tak jednoduché to bohužel není! Boundary value a Equivalence partitioning předpokládají, že aplikace neumožní zadat žádné další znaky nebo hodnoty. Takové znaky, jako jsou @ nebo záporné hodnoty či dokonce abecedy, nebude možné zadat. Tento předpoklad však neplatí pro všechny aplikace a je nezbytné je otestovat, než budeme moci říci, že hodnota pole je zcela funkční.
Kromě toho se můžeme setkat se situacemi, kdy vstupní hodnota závisí na rozhodnutí jiné hodnoty. Např. pokud má formulář Gym další pole Muž a Žena a věková hranice se bude lišit podle této volby. Samotná hraniční hodnota si s takovými změnami neporadí, a to nás přivádí k další technice černé skříňky, která se nazývá Testování rozhodovací tabulky. Té se budeme podrobně věnovat v příštím článku. Zůstaňte naladěni!