Co je negativní testování? Testovací případy s příkladem
⚡ Chytré shrnutí
Negativní testování kontroluje, jak se softwarová aplikace chová, když obdrží neočekávaná vstupní data nebo provozní podmínky, takže produkt se elegantně degraduje, místo aby se zhroutil, poškodil data nebo odhalil bezpečnostní díru.

Negativní testování
Negativní testování je typ testování softwaru používaný ke kontrole softwarové aplikace s ohledem na neočekávaná vstupní data a podmínky. Neočekávaná data nebo podmínky sahají od nesprávného datového typu v jednoduchém poli formuláře až po úmyslný hackerský útok. Účelem negativního testování je zabránit pádu aplikace při zadání neplatného vstupu a zlepšit kvalitu a stabilitu produktu.
Samotné pozitivní testování pouze dokazuje, že systém funguje za normálních podmínek. Negativní testování potvrzuje, že stejný systém zvládá i abnormální podmínky, což je přesně to, co vyžaduje produkt odolný vůči chybám.
Příklad negativního testování
Výtah je nejčastěji používaným příkladem k vysvětlení negativního testu, protože jeho normální chování i chování při poruše si lze snadno představit.
Požadavky na výtah jsou známé: stisknutím čísla patra se výtah do daného patra odešle a dveře se automaticky otevřou, jakmile výtah dosáhne zadaného patra.
Některé negativní scénáře pro stejný nárůst jsou uvedeny níže, vedle předpokladu, který naopak vycházejí z pozitivního testování.
| Negativní testování | Pozitivní testování |
|---|---|
| Co se stane, když počet osob (hmotnost) překročí stanovený limit? | Předpokládá se, že do výtahu vstoupí pouze stanovený počet osob. |
| Co se stane, když někdo uvnitř výtahu kouří nebo způsobí požár? | Předpokládá se, že uvnitř výtahu nebude kouř ani oheň |
| Co se stane, když během provozu dojde k výpadku proudu? | Předpokládá se, že během provozu výtahu nedojde k výpadku proudu. |
Všechny tyto případy spadají pod negativní testy. U žádného z nich nelze zaručit, že se nikdy nestane, takže každý z nich musí být podroben kontrole.
Předpokládejme, že stav nadváhy není nikdy zkontrolován a výtah se po přetížení chová abnormálně. Tato jediná mezera poškozuje spolehlivost systému a může dokonce ohrozit život. To je to, co negativní testování v praxi znamená a proč je důležité.
Software se chová stejně. Negativní test se záměrně odchyluje od běžného provozního postupu. Vezměme si registrační formulář.
| Negativní testování | Pozitivní testování |
|---|---|
| Do pole e-mailu zadejte neplatnou e-mailovou adresu. | Do pole e-mailu se zadávají pouze platné e-mailové adresy. |
| Zadejte do pole telefonního čísla neplatné telefonní číslo, například znaky. | Do číselného pole se zadávají pouze čísla |
| Nahrajte obrázek s velikostí mimo zadaný rozsah | Nahrávají se pouze obrázky v rámci zadané velikosti. |
| Nahrajte neplatné soubory, jako například XML or SQL soubory v poli pro nahrání obrázku | Nahrávají se pouze platné formáty obrázků, jako například .jpg nebo .png. |
Každý z těchto negativních případů musí i tak nechat systém fungovat. Pokud je do číselného pole zadán znak, aplikace nemůže zpracovat neočekávaná data, která nikdy neočekávala, a může dojít k jejímu selhání. Ještě horší je, že SQL injection Řetězec ve stejném poli by mohl vymazat obsah databáze. Ztráty tohoto druhu jsou důvodem negativních testů.
Proč provádět negativní testování?
Testování spotřebovává čas a peníze, takže je důležité rozhodnout se, co, jak a kolik testovat. Argumenty pro vynaložení části tohoto rozpočtu na negativní testování vypadají z pohledu obou stran projektu jinak.
Organizační perspektiva
Dodání kvalitního produktu klientovi je odpovědností organizace a negativní testování je součástí této povinnosti. Je to také důkaz organizace, že udělala vše, co je v jejím rozumném smyslu, aby zabránila selhání, i když žádný systém není zcela bezchybný.
Dopad je rozhodujícím faktorem. Stránka elektronického obchodování může projít všemi pozitivními testy a stále obsahovat mezeru v legislativě, která útočníkovi umožňuje spustit SQL injection a vymazat data za ní. To je vážné narušení bezpečnosti a hledá se pouze při negativním testování.
Veřejně přístupné aplikace, zejména webové stránky, nenabízejí téměř žádnou kontrolu nad tím, jak je návštěvníci používají, takže negativní testování je jediný způsob, jak potvrdit, že neobvyklé používání je pokryto a pod kontrolou. Totéž platí pro uživatele se zlými úmysly: útočníci aktivně hledají příležitosti k prolomení systému a hackerské scénáře patří jednoznačně do pokrytí negativním testováním.
Pohled klienta
Klienti očekávají produkt s nulovými zranitelnostmi a negativní testování toto očekávání podporuje. U citlivých produktů, jako je elektronické obchodování nebo online obchodování s akciemi, bezpečnostní testování a negativní testy jsou povinné, nikoli volitelné.
Jediným skutečným problémem klienta jsou náklady. Jakmile je dopad selhání analyzován, klient je schopen rozhodnout, jak daleko by mělo úsilí o negativní testování zajít.
Jak provést negativní test
Negativní testování začíná zvážením každého vstupu, který může aplikace fyzicky přijmout, nejen těch vstupů, které by měla přijímat. Každý z nich patří do Testovací případ i když je to zjevně špatný způsob, jak tuto funkci používat. Pole e-mailu je testováno se vším, co není platná e-mailová adresa, a ovládací prvek pro nahrávání obrázků je testován s každým typem souboru, který není obrázek.
Seznam možných neplatných vstupů je prakticky nekonečný, takže je nutné upřednostnit negativní testovací případy. Pro obrazové pole, které přijímá pouze soubory .png, zahrnují kandidátské nahrávání soubory .jpeg, .xml, .xls a mnoho dalších. Soubor XML nebo SQL má mnohem větší potenciální dopad než .jpeg, takže tyto případy se provedou jako první. Řazení případů podle dopadu před provedením je to, co udržuje negativní testování dostupné.
Většina negativních testovacích případů pochází spíše z malé sady zavedených designových technik než z improvizace:
- Hraniční hodnoty: proveďte hodnoty bezprostředně mimo platný rozsah, například 0 a 101 pro pole, které přijímá hodnoty od 1 do 100.
- Neplatné třídy ekvivalence: vyberte jednoho zástupce z každé třídy odmítnutých vstupů, například písmena v číselném poli.
- Chyba v odhadu: Využijte zkušenosti z minulých vad k zaměření na vstupy, které s největší pravděpodobností naruší tento typ funkce.
- Špatně formátovaná a nepřátelská data: tagy skriptů, fragmenty SQL a nadměrně velké datové části, které zkoumají ověření a zabezpečení.
- Fuzz testování: automaticky generovat velké objemy náhodných nebo mutovaných vstupů pro nalezení neošetřených havárií.
- Přerušené toky: zrušit, obnovit, vypršet časový limit nebo ztratit připojení v průběhu transakce.
Ať už je použitá jakákoli technika daný případ produkuje, očekávaný výsledek musí být zapsán jako kontrolované, čitelné selhání – ověřovací zpráva, odmítnuté nahrání, čisté vrácení zpět – a nikdy pouze jako „systém se nerozpadne“.
Výhody a nevýhody negativního testování
Stejně jako každá jiná testovací technika má i negativní testování výhody a nevýhody, které závisí na tom, kde, kdy a v jakém množství se používá.
Výhody negativního testování
- Chrání přímo kvalitu produktu, protože kvalitní produkt je takový, který neobsahuje žádné zranitelnosti, které by bylo možné zneužít.
- Rozšiřuje to pokrytí. Neplatný vstup se do živého systému dostane úmyslně nebo náhodně, takže negativní případy musí existovat vedle pozitivních, aby pokrytí mělo smysl.
- Zvyšuje to důvěru klientů před spuštěním verze.
- Odhaluje vady, ke kterým pozitivní testování strukturálně nedosáhne, jako jsou neošetřené výjimky a slabá validace vstupu.
Nevýhody negativního testování
- V některých situacích je to ztráta času a energie. Pokud je aplikace vytvořena pro jednoho uživatele, případ 100 současných uživatelů nestojí za testování, takže je důležitý výběr správných podmínek a některé systémy potřebují jen velmi málo negativních testů.
- Navrhování pouzder vyžaduje kvalifikované a zkušené lidi.
- Z pohledu klienta to zvyšuje náklady a může to zpozdit vydání.
- Soupeří se o úsilí. Tým, který vynakládá velké prostředky na negativní testování, může nakonec investovat málo do pozitivního testování.
