Očekávané vstupní a výstupní hodnoty softwarové komponenty by měly být získány ze specifikace komponenty. Hodnoty se pak seskupí do množin s identifikovatelnými hranicemi. Každá množina neboli oddíl obsahuje hodnoty, u nichž se očekává, že je komponenta zpracuje stejným způsobem. Rozdělení rozsahů testovacích dat je vysvětleno v technice návrhu testovacího případu rozdělení ekvivalence. Při návrhu testovacích případů je důležité brát v úvahu jak platná, tak neplatná rozdělení.
Demonstraci lze provést pomocí funkce napsané v jazyce Java.
class Safe { static int add(int a, int b) { int c = a + b ; if (a >= 0 && b >= 0 && c < 0) { System.err.println("Overflow!"); } if (a < 0 && b < 0 && c >= 0) { System.err.println("Underflow!"); } return c; }}
Na základě kódu jsou vstupní vektory rozděleny. Bloky, které musíme pokrýt, jsou příkaz přetečení a příkaz podtečení a ani jeden z těchto 2. Z toho vyplývají 3 ekvivalentní třídy, ze samotného přehledu kódu.
poznamenáváme, že je tedy pevně daná velikost celého čísla:-
MIN_VALUE ≤ x + y ≤ MAX_VALUE
Všimneme si, že vstupní parametr a i b jsou celá čísla, tudíž na nich existuje celkové pořadí.Když vypočítáme rovnosti:-
x + y = MAX_VALUE MIN_VALUE = x + y
dostaneme zpět hodnoty, které jsou na hranici, včetně, to znamená, že tyto dvojice (a,b) jsou platné kombinace a nedošlo by u nich k přetečení ani podtečení.
Naopak:-
x + y = MAX_VALUE + 1
dává dvojice (a,b), které jsou neplatné kombinace, došlo by u nich k přetečení. Stejně tak:-
x + y = MIN_VALUE – 1
dává dvojice (a,b), které jsou neplatnými kombinacemi, došlo by u nich k Underflow.
Hraniční hodnoty (nakreslené pouze pro případ přetečení) jsou na obrázku vpravo znázorněny oranžovou čarou.
Jiný příklad: Pokud by vstupními hodnotami byly měsíce v roce vyjádřené jako celá čísla, mohl by mít vstupní parametr „měsíc“ následující oddíly:
... -2 -1 0 1 .............. 12 13 14 15 ..... --------------|-------------------|-------------------invalid partition 1 valid partition invalid partition 2
Hranice mezi dvěma oddíly je místo, kde se mění chování aplikace, a sama o sobě není reálným číslem. Hraniční hodnota je minimální (nebo maximální) hodnota, která se nachází na hranici. Číslo 0 je maximální číslo v prvním oddílu, číslo 1 je minimální hodnota v druhém oddílu, obě jsou hraniční hodnoty. Testovací případy by měly být vytvořeny tak, aby generovaly vstupy nebo výstupy, které budou spadat na každou hranici a na obě její strany, což vede ke dvěma případům na každou hranici. Testovací případy na každé straně hranice by měly být v nejmenším možném přírůstku pro testovanou součást, pro celé číslo je to 1, ale pokud by vstupem bylo desetinné číslo se dvěma místy, pak by to bylo .01. Ve výše uvedeném příkladu jsou hraniční hodnoty na 0,1 a 12,13 a každá z nich by měla být testována.
Analýza hraničních hodnot nevyžaduje neplatné rozdělení. Vezměme si příklad, kdy se topení zapne, pokud je teplota 10 stupňů nebo nižší. Existují dvě rozdělení (teplota≤10, teplota>10) a dvě hraniční hodnoty, které je třeba otestovat (teplota=10, teplota=11).
Pokud hraniční hodnota spadá do neplatného rozdělení, je testovací případ navržen tak, aby zajistil, že softwarová komponenta s hodnotou zachází kontrolovaným způsobem. Analýzu hraničních hodnot lze použít v celém cyklu testování a je stejně použitelná ve všech fázích testování.