Testovací strategie ortogonálních polí

Testovací strategie ortogonálních polí (Orthogonal Array Testing Strategy (OATS)) slouží k optimalizaci sady testovacích případů. Jejím cílem je nalezení všech dvojic významných hodnot jejích parametrů (tzv. all-pairs testing). Alternativně lze za tímto účelem použít také metodu párově ortogonálních latinských čtverců.

Motivace

Představme si, že máme funkci, která má sedm parametrů, z nichž každý má osm významných hodnot, pak by ideální testovací plán obsahující všechny kombinace parametrů musel mít celkem 8^{7} = 2097152 testů.

V praxi se však ukazuje, že je velká část chyb způsobena pouze chybou v jednom parametru, případně chybou způsobenou kombinací dvou parametrů. Chyby způsobené kombinací více parametrů jsou pak výrazně méně časté. Otestování všech parametrických párů si zároveň vyžádá pouze zlomek testů.

Vrátíme-li se k původnímu příkladu, pak je počet dvojic v sedmici parametrů roven \\binom{7}{2} = 21. Každá dvojice může nabývat 8^{2} = 64 hodnot. Počet různých parametrických párů je proto 21 \\cdot 64 = 1344. Jelikož má funkce 7 parametrů, tak můžeme do jednoho volání naskládat více dvojic. Při ideálním uspořádání nám tedy bude stačit 1344/21 = 64 testů.

Jednou z možností, kterak dosáhnout efektivního uspořádání parametrických dvojic je využití tzv. ortogonálních polí.

Ortogonální pole

Ortogonální pole je matice velikosti m \\times n, ve které při testování parametrických párů jednotlivé sloupce odpovídají faktorům (parametrům funkce, případně jiným hodnotám, na kterých závisí testovací případ) a řádky jednotlivým testovacím případům.

Ortogonální pole jsou označována podle toho, kolik úrovní (významných hodnot) umožňují jednotlivým faktorům. Ortogonální pole 2^{1},\\; 3^{7} má celkem 8 faktorů. Jeden faktor může mít dvě významné hodnoty, a sedm dalších může mít až 3 významné hodnoty.

Ortogonální pole 2^{4}, \\;3^{1}:


\\begin{bmatrix}
0&0&0&0&0\\\\
0&0&1&1&1\\\\
0&0&1&1&2\\\\
0&1&0&0&2\\\\
0&1&0&1&0\\\\
0&1&1&0&1\\\\
1&0&0&0&1\\\\
1&0&0&1&2\\\\
1&0&1&0&0\\\\
1&1&0&1&1\\\\
1&1&1&0&2\\\\
1&1&1&1&0\\\\
\\end{bmatrix}

Kódování úlohy a čtení výsledku

Pro použití této techniky je zapotřebí příklad nejprve zakódovat. Tato procedura je velmi snadná – nejprve nalezneme všechny faktory (parametry příkladu) a zjistíme, kolik mají úrovní. Poté nalezneme vhodné ortogonální pole.

Vybrané pole musí umožňovat alespoň tolik faktorů, kolik má náš případ. Dále je nutné, aby jednotlivé faktory měly dostatečný počet úrovní.

Nyní můžeme přejít k samotnému kódování. Každému parametru naší úlohy přiřadíme jeden sloupec – případné přebytečné sloupce můžeme ignorovat. Každé významné hodnotě přiřadíme jednu úroveň – pokud má sloupec více úrovní než potřebujeme, tak můžeme některé významné hodnotě přiřadit více úrovní, tím tuto hodnotu otestujeme více než ostatní (ale stále platí, že otestujeme každou parametrickou dvojici alespoň jednou).

V tomto okamžiku již můžeme pomocí našeho zakódování číst jednotlivé řádky ortogonálního pole – samotné testovací případy.

Nalezení ortogonálního pole

Základním problémem této testovací metody je nalezení vhodného ortogonálního pole. Jelikož neexistuje žádná jednoduchá metoda, kterak takové pole zkonstruovat, tak se musíme spolehnout především na katalogy ortogonálních polí. Jeden takovýto katolog lze nalézt zde.


Příklad

Mějme aplikaci, jež může pracovat nad databázemi algoritmyQL, MySQL, případně Oracle. Pro objektově relační mapování používá buď framework Hibernate nebo Toplink. Komunikace s klientskou stranou probíhá buď potstředctvím protokolu RMI nebo HTTP.

Otestujme aplikaci pomocí metody ortogonálních polí.

Faktory a úrovně

Nejprve identifikujeme jednotlivé faktory. V našem případě se zjevně jedná o databázi (algoritmyQL, MySQL, Oracle), ORM framework (Hibernate, Toplink) a komunikační protokol (RMI, HTTP).

Ortogonální pole

Dále nalezneme vhodné (minimální) ortogonální pole, které postihuje náš příklad. Hledáme mapu, která se nejvíce podobá ideálnímu typu 2^{2},\\; 3^{1}.

V katalogu jsme však nalezli pouze mapu 2^4, \\; 4^1. Proto při kódování přebytečné sloupce vynecháme a u sloupce odpovídajícího databázi zakódujeme některou hodnotu dvakrát (daný případ tak otestujeme vícekrát).


\\begin{bmatrix}
0&0&0&0&0\\\\
0&0&1&1&2\\\\
0&1&0&1&1\\\\
0&1&1&0&3\\\\
1&0&0&1&3\\\\
1&0&1&0&1\\\\
1&1&0&0&2\\\\
1&1&1&1&0\\\\
\\end{bmatrix}

Kódování

Do prvního sloupce zakódujeme protokol – 0 (HTTP), 1 (RMI). Druhý sloupec bude mít význam ORM frameworku – 0 (Hibernate), 1 (Toplink). Další dva sloupce vynecháme. Poslední sloupec nám poslouží pro databáze – 0 (algoritmyQL), 1 (MySQL), 2 (Oracle), 3 (MySQL).

Čtení testovacího plánu

Nyní již můžeme po řádcích číst testovací plán. První test použije: HTTP protokol, Hibernate a algoritmyQL. Druhý: HTTP, Hibernate, Oracle. Třetí: HTTP, Toplink, MySQL. Poslední: RMI, Toplink, algoritmyQL.

Literatura

  • MAŘÍK, Radek. Testování a verifikace softwaru, Optimalizace sady testů - slides k přednášce.







Doporučujeme

Internet pro vaši firmu na míru