Pairwise testing |
Teď si tu dovolím odbočení do lehké exotiky. Technika testování Pairwise (nebo taky all pairs) není příliš využívaná. Já sám jsem se s ní setkal jednou před lety. Připadá mi ale zajímavá a rozhodně má svůj význam. Takže teď stručně v čem tato technika spočívá. Základním důvodem, proč tuto techniku používat, je fakt, že se v aplikaci mohou vyskytnout chyby, které vznikají jako důsledek kombinace vstupních hodnot. Jinak řečeno, v aplikaci může nastat chyba v okamžiku, kdy na vstupu je kombinace hodnot, které samy o sobě jsou validní. Může k tomu dojít i tehdy kdy při testech, ve kterých byly použity samostatně (tedy ne v kombinaci s jinou vstupní hodnotou), žádná chyba nenastala. Aby byly podobné chyby zcela vyloučeny, bylo by nutné provést testy se všemi možnými kombinacemi vstupních hodnot. To je ale značně neefektivní. Počet testů by tak značně narostl. Například už při třech vstupních polích, z nich každé by mohlo nabývat jen dvou hodnot, bychom pro plné pokrytí všech kombinací potřebovali osm testů. A přiznejme si, že vstupy v aplikacích bývají rozhodně rozsáhlejší a komplikovanější. Jak to tedy řešit? Odpovědí je pairwise testing. Tato technika vychází z teorie ortogonálních polí. Vzhledem k tomu, že si ze školy už nic o tomto tématu nepamatuji, musím vás bohužel odkázat například a tuto stránku. Můžeme si ale alespoň naznačit základní teze. K minimalizaci počtu testů, potřebných k otestování kombinací vstupních parametrů, dochází tak, že se na celý problém nenahlíží jako na kombinaci X vstupů, ale kombinaci dvojic těchto vstupů. Přičemž každá dvojice by se měla objevit pouze jednou. Dejme tomu, že na vstupu jsou tři pole A, B a C a každé toto pole může nabývat tří hodnot. Pro plné pokrytí všech možných kombinací by bylo nutných 27 testů (tři na třetí). Já ale mohu celý problém řešit tak, že hledám kombinace párů vstupních hodnot. Tedy kombinace AB, AC, BC. A vím, že nechci, aby se mi testech opakovaly stejné kombinace těchto dvojic vstupů. Ideální je ukázat si to na tabulce a bude vše jasnější. Následující tabulky jsem si vypůjčil na stránkách http://www.developsense.com/pairwiseTesting.htm, které se tomuto tématu věnují velice podrobně.
Z této tabulky je poměrně jasné, že při pokrytí všech možných kombinací se nám opakují stále stejné kombinace dvojic. Například řádky 1 až 3 obsahují totožnou kombinaci vstupů A a B. Pokud chceme počet testů redukovat, pak jednou z cest je snížení počet variant tak, aby se každá kombinace dvojice vstupů opakovala právě jednou. Výsledná tabulka takto získaných variant testů může vypadat následovně:
Nechci se tu zabývat teoretickou cestou, jak z první tabulky udělat tabulku druhou. Pouštěl bych se na tenký led. Jde jen o to demonstrovat, k čemu technika pairwise slouží. Generování příslušných kombinací totiž zvládají existující nástroje pro pairwise. Ty dokáží na základě vložených vstupů, jejich možných hodnot, ale také například důležitosti daného vstupu, generovat konkrétní testovací varianty. Nástrojů pro pairwise testování existuje relativně hodně. Jejich přehled můžete nalézt například zde. Každý z těchto nástrojů používá poněkud jiný algoritmus pro generování možných kombinací a proto se počet variant může u různých nástrojů lišit. Stránka, na kterou je odkaz na začátku tohoto odstavce obsahuje také orientační tabulku s počty vygenerovaných kombinací u některých nástrojů v závislosti na počtu vstupů a možných hodnot. Já sám mám zkušenost pouze s nástrojem PICT od Microsoftu. Ten je možné jako freeware získat například na této adrese. Nástroj je to jednoduchý, pracuje v příkazové řádce, konfigurace probíhá pomocí textových souborů, výstup je také v podobě textového souboru. Pro běžné použití tento nástroj bohatě postačí. Jak už jsem napsal v začátku tohoto článku, pairwise testing považuji spíše za okrajovou záležitost. Vycházím přitom z vlastní zkušenosti. Ovšem nevylučuji, že jsou projekty, kde by tato testovací technika našla své uplatnění a hrála důležitou roli při tvorbě testů. Určitě má smysl při rozsáhlých a složitých vstupech. Vstup do aplikace je vždy považován za kritické místo a každý test, který zvýší jeho otestovanost má samozřejmě smysl. Musíme si tu ještě na závěr říci, že pairwise testování je (podobně jako jiné testovací techniky) cestou, jak smysluplně snížit počet realizovaných testů aplikace tak, aby testování bylo efektivní a aplikace bylo v dostatečném rozsahu otestovaná. Snižování počtu testů se samozřejmě zvyšuje pravděpodobnost nezachycení chyb. Proto je vždy nutné vzít v úvahu, do jaké míry je riziko neobjevení chyby únosné ale také to, jak velká je pravděpodobnost výskytu příslušného typu chyby. Chyby vzniklé kombinací dvou a více vstupů se nepovažují za příliš časté a proto redukce testů zde dává smysl. |