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.

  • ???? Účel: Ověřte, zda aplikace čistě odmítá neplatná data, a ne selhává nebo padá.
  • 🇧🇷 Kontrast: Pozitivní testy dokazují šťastnou cestu; negativní testy zkoumají vše mimo ni.
  • 🛗 Analogie: Výtah musí odolat přetížení, požáru a výpadku proudu, nejen běžným cestám cestujících.
  • 🔒 Zabezpečení Neplatné nahrávání a pokusy o SQL injection jsou klasickými scénáři negativního testu.
  • 🧪 Design: Případy generují okrajové hodnoty, třídy ekvivalence, odhadování chyb a fuzzing.
  • 📊 Priorita: Seřaďte neplatné vstupy podle dopadu, protože vyčerpávající negativní pokrytí je nedostupné.
  • ⚠️ Kompromis: Nadměrné množství negativních testů spotřebovává rozpočet, který by pozitivní krytí mohlo vyžadovat více.

Negativní testování v testování softwaru s neplatnými vstupními příklady

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í.

Nejčastější dotazy

Pozitivní testování poskytuje platná data a potvrzuje očekávaný výsledek. Negativní testování poskytuje neplatná data, nesprávné formáty a poškozené sekvence a potvrzuje, že je aplikace odmítá kontrolovanou zprávou namísto selhání.

Prázdné přihlašovací údaje, platný uživatel s nesprávným heslem, fragmenty SQL v uživatelském jméně, nadměrně dlouhé řetězce, úvodní nebo koncové mezery, deaktivované účty a opakované neúspěšné pokusy o ověření fungování uzamčení.

Ne. Překrývají se v případech neplatného nebo nepřátelského vstupu, ale bezpečnostní testování zahrnuje také autentizaci, autorizaci, šifrování a zpracování relací. Negativní testování je širší technika vstupu a podmínky.

Obvykle je píší testeři a QA inženýři, často s vývojářem, který kontroluje cesty k chybám, a obchodním analytikem, který potvrzuje, které neplatné podmínky požadavky skutečně zakazují.

Dostatečně k pokrytí každé odmítnuté vstupní třídy, každé hranice a každé cesty selhání s vysokým dopadem. Kromě toho přidané případy vracejí malou hodnotu, takže riziko a dopad nastavují stop.ping bod.

Ano. Případy neplatného vstupu se často opakují, takže se hodí. testování automatizace a regresní sady. Fuzzingové nástroje automatizují generování náhodných vstupů, zatímco assertační tvrzení kontrolují, zda se zobrazují ověřovací zprávy.

Modely čtou požadavky nebo schéma formuláře a navrhují neplatné hodnoty, okrajové podmínky a nepřátelské řetězce, které tester nemusí ručně vypsat. Recenzent stále potvrzuje, že každý očekávaný výsledek odpovídá specifikaci.

Ano, navrhuje kód assertion, fixtures s neplatnými daty a parametrizované případy z existujícího testovacího souboru. Vygenerovaná očekávání je třeba zkontrolovat, protože věrohodně vypadající assertion může kódovat nesprávné chování.

Shrňte tento příspěvek takto: