Hoci je určite dôležité overiť, či softvér plní svoje základné funkcie tak, ako má, rovnako dôležité je overiť, či je softvér schopný účinne riešiť neobvyklé situácie. Je zrejmé, že väčšina chýb vzniká pri generovaní takýchto situácií s kreativitou zo strany testerov.
Väčšina z nás už pozná rôzne druhy testovania, ako je funkčné testovanie, integračné testovanie, regresné testovanie, alfa a beta testovanie, testovanie prístupnosti a podobne. Každý však bude súhlasiť s tým, že nech už vykonávaš akúkoľvek kategóriu testovania, celé testovacie úsilie možno v zásade zovšeobecniť do dvoch kategórií: pozitívne cesty testovania (happy paths) a negatívne cesty testovania (negative paths).
Negatívne testovanie
Negatívne testovanie sa zameriava na odhalenie potenciálnych chýb, omylov alebo bezpečnostných zraniteľností, ktoré sa nemusia identifikovať prostredníctvom pozitívneho testovania (s použitím platných vstupov). Negatívne testovanie sa bežne označuje ako testovanie chybnej cesty alebo testovanie poruchy. Zvyčajne sa vykonáva na zabezpečenie stability aplikácie.
Negatívne testovanie je proces, pri ktorom sa uplatňuje čo najväčšia kreativita a aplikácia sa overuje na základe neplatných údajov. To znamená, že jeho účelom je skontrolovať, či sa chyby zobrazujú používateľovi tam, kde majú, alebo či sa efektívnejšie spracúva zlá hodnota. Je absolútne nevyhnutné pochopiť, prečo je potrebné negatívne testovanie.
Funkčnú spoľahlivosť aplikácie alebo softvéru možno kvantifikovať len pomocou efektívne navrhnutých negatívnych scenárov. Cieľom negatívneho testovania je nielen odhaliť všetky potenciálne chyby, ktoré by mohli spôsobiť vážny dopad na spotrebu produktu ako celku, ale môže byť nápomocné pri určovaní podmienok, za ktorých môže aplikácia spadnúť. V neposlednom rade zabezpečuje, aby bola v softvéri prítomná dostatočná validácia chýb.
Účel negatívneho testovania
Účelom negatívneho testovania je vyhodnotiť správanie softvérového systému, keď je vystavený neplatným alebo neočakávaným vstupom.
Tu je niekoľko hlavných cieľov, s ktorými môže negatívne testovanie pomôcť vývojárom a testerom softvéru:
- Funguje ako kritická zložka zabezpečenia kvality softvéru, ktorá pomáha overiť, či sa systém správa podľa očakávaní a spĺňa požiadavky zákazníka.
- Zabezpečuje, aby sa systém správal elegantne, keď čelí neplatným vstupom, čím poskytuje lepšiu používateľskú skúsenosť a znižuje riziko frustrácie používateľov alebo zlyhania systému.
- Pomáha identifikovať a opraviť problémy so stabilitou, ktoré sa nemuseli objaviť pri pozitívnom testovaní.
- Negatívne testovanie môžeš použiť na overenie robustnosti softvéru tým, že otestuješ, ako sa správa k neplatným alebo neočakávaným vstupom.
Typy negatívneho testovania
Existuje niekoľko typov negatívneho testovania vrátane:
- Testovanie hraničných hodnôt (Boundary value testing): Jeden z účinných prístupov k testovaniu softvérových aplikácií zahŕňa ich vystavenie vstupom nachádzajúcim sa na krajných hraniciach vstupných hodnôt. Vyhodnotením týchto výnimočných hodnôt možno ľahko odhaliť potenciálne základné problémy v aplikácii, najmä na hraniciach prijateľných vstupov. Zahŕňa testovanie systému so vstupmi, ktoré sú na minimálnej alebo maximálnej hranici vstupného rozsahu.
- Testovanie validácie vstupov (Input validation testing): Ďalšia forma negatívneho testovania zahŕňa skúmanie schopnosti softvérovej aplikácie spracovať neplatné vstupy, vrátane neplatných typov údajov, hodnôt mimo rozsahu a dokonca aj prítomnosti neplatných znakov. Táto forma testovania následne umožňuje komplexné posúdenie schopnosti aplikácie odmietnuť a identifikovať vstupy.
- Testovanie výnimiek (Exception testing): Pri posudzovaní softvérových aplikácií je kľúčové testovanie výnimiek. Tento typ negatívneho testovania sa zameriava na skúmanie schopnosti aplikácie efektívne zvládnuť mimoriadne podmienky vrátane scenárov, ako sú chýbajúce údaje, neočakávané vypnutia zariadenia/aplikácie a iné výnimočné udalosti.
- Testovanie zaťaženia (Load testing): Na zabezpečenie bezproblémovej funkčnosti sa softvérové aplikácie podrobujú záťažovým testom. Cieľom takýchto testov je posúdiť výkonnosť aplikácie pri intenzívnom používaní a záťažových podmienkach, ako je napríklad vysoký objem prevádzky, rozsiahle spracovanie údajov a iné scenáre náročné na zdroje. Vykonávanie záťažových testov môže rýchlo identifikovať a riešiť potenciálne zlyhania systému alebo problémy s výkonom.
- Testovanie kompatibility(Compatibility testing): Pri komplexnom testovaní je testovanie kompatibility v centre pozornosti. Táto konkrétna forma negatívneho testovania dôkladne skúma kompatibilitu softvérovej aplikácie s rôznym hardvérom, sieťovými konfiguráciami a softvérovými nastaveniami. Prostredníctvom tohto skúmania môžu vývojári zabezpečiť, aby aplikácia bezproblémovo fungovala v rôznych prostrediach, čím sa chráni pred prípadnými problémami s kompatibilitou.
Návrh negatívnych testovacích prípadov
- Navrhovanie negatívnych testovacích prípadov zahŕňa identifikáciu scenárov, v ktorých by systém alebo aplikácia nemali fungovať tak, ako sa očakáva a ich testovanie s neplatnými, neočakávanými alebo nesprávnymi vstupmi s cieľom overiť, či tieto scenáre správne zvládajú.
- Preskúma požiadavky na systém, prípady použitia a funkcie s cieľom identifikovať potenciálne scenáre, pri ktorých systém nemusí fungovať podľa očakávaní.
- Pre každý negatívny scenár urč, aký by mal byť očakávaný výsledok. Napríklad chybová správa alebo vypnutie systému.
- Na základe identifikovaných negatívnych scenárov vyber vstupy, ktoré spustia negatívne správanie. Môžu to byť neplatné údaje, nesprávne vstupné hodnoty alebo neočakávané vstupy.
- Vytvor testovacie prípady, ktoré opisujú kroky, ktoré treba vykonať na vykonanie negatívneho testovania. Testovacie prípady by mali obsahovať vstupy, očakávané výsledky a všetky ďalšie relevantné informácie.
Negatívne testovanie – krok za krokom
Nižšie sú uvedené základné kroky pri vykonávaní negatívneho testu:
- Identifikuj konkrétnu funkciu alebo funkčnosť, ktorá sa má otestovať, napríklad overenie údajov, spracovanie chýb alebo bezpečnostné kontroly.
- Urč kritériá pre negatívny test, ktorý zámerne spôsobí zlyhanie softvéru alebo neočakávané výsledky. Môže to zahŕňať zadávanie neplatných údajov, prekročenie maximálnych limitov alebo vykonávanie činností mimo poradia.
- Vytvor testovací prípad, ktorý obsahuje kroky potrebné na reprodukciu negatívneho testu vrátane vstupov alebo akcií, ktoré spustia negatívny scenár a všetkých očakávaných výsledkov.
- Nastav testovacie prostredie, aby si zabezpečil, že systém je v stave, v ktorom sa môže vykonať negatívny scenár. To si môže vyžadovať špecifické údaje alebo konfigurácie.
- Vykonaj negatívny test podľa krokov uvedených v testovacom prípade, aby si reprodukoval negatívny scenár.
- Pozoruj a zdokumentuj výsledky testu a porovnaj skutočný výsledok s očakávaným výsledkom uvedeným v negatívnom testovacom prípade.
- Nahlás akékoľvek chyby alebo problémy počas testu, pričom poskytneš podrobný opis problému, kroky potrebné na jeho reprodukciu a všetky príslušné protokoly alebo chybové hlásenia.
- V prípade potreby zopakuj test s inými vstupnými údajmi alebo variantmi testovacieho prípadu, aby si ďalej preskúmal možné scenáre zlyhania.
Príklady negatívneho testovania
Zoberme si prípad výťahu. Po stlačení čísla poschodia ťa výťah vyvezie na konkrétne poschodie a dvere sa automaticky otvoria, keď výťah dosiahne dané poschodie.
- Čo sa stane, ak počet osôb alebo hmotnosť prekročí stanovený limit?
- Čo sa stane, ak niekto spôsobí vo výťahu požiar alebo fajčí?
- Čo sa stane pri výpadku elektrického prúdu?
Všetky tieto prípady patria do negatívneho testovania. Nemôžeš zabezpečiť, aby sa všetky uvedené prípady nestali, preto ich musíš obmedziť.
Okrem príkladu s výťahom máme niekoľko príkladov negatívneho testovania súvisiacich so softvérom:
- Testovanie platobnej brány stránky elektronického obchodu: Zadaj neplatné informácie o kreditnej karte alebo sa pokús prekročiť maximálnu hodnotu objednávky, aby si overil, či stránka tieto scenáre spracúva správne a zabraňuje podvodným transakciám.
- Testovanie navigačného systému GPS: Keď tester zadá nesprávnu adresu alebo sa pokúsi použiť systém v oblasti s obmedzeným alebo žiadnym pokrytím GPS, aby sa overilo, či systém tieto scenáre spracúva správne a poskytuje jasné chybové hlásenia.
- Testovanie prihlasovacej stránky webovej stránky: Môžeš zadať nesprávne kombinácie používateľského mena a hesla, aby si overil, či webová stránka zobrazuje príslušné chybové hlásenie a zabraňuje neoprávnenému prístupu.
- Testovanie bankomatu: Pokús sa vybrať viac peňazí, ako je zostatok na účte, alebo vložiť neplatnú kartu, aby si overil, či bankomat tieto scenáre spracúva správne a či zabraňuje neoprávneným transakciám.
- Testovanie funkcie fotoaparátu mobilnej aplikácie: Urob fotografiu pri slabom osvetlení alebo bez dostatočného úložného priestoru v zariadení, aby si overil, či aplikácia tieto scenáre správne spracúva.
Negatívne testovacie prípady môžeme tak isto rozdeliť na frontendové a backendové prípady:
Frontendové negatívne testovacie scenáre
- Vytvorenie používateľa s e-mailovou adresou, ktorá už existuje v systéme/db.
- Prihlásenie s nesprávnym heslom.
- Overiť, či polia Krstné meno a Priezvisko akceptujú špeciálne znaky, čísla a emotikony.
- Overiť, či pole Telefónne číslo akceptuje písmená.
- Overiť, či používateľ môže dokončiť objednávku s kreditnou kartou, ktorej platnosť vypršala.
Backendové negatívne testovacie scenáre
- Prihlásenie bez zadania tokenu používateľa.
- Prihlásenie s vypršaným tokenom.
- Prihlásenie s používateľom č. 1 pomocou tokenu od používateľa č. 2.
- Dokončiť objednávku s používateľom, ktorý nemá uložené žiadne spôsoby platby.
Praktický príklad automatizácie negatívneho testovania
Od používateľa sa očakáva, že zadá názov, ako je znázornené nižšie:

Stanovme si základné pravidlá, aby sme sa uistili, že navrhujeme dobré negatívne scenáre.
Požiadavky:
- Textové pole s názvom je povinný parameter.
- Popis nie je povinný.
- Pole s názvom môže obsahovať len znaky a-z a A-Z. Nie sú povolené žiadne čísla, špeciálne znaky.
- Názov môže mať maximálne 10 znakov.
Príklad pozitívnych testovacích prípadov:
- ABCDEFGH (overenie veľkých písmen v rámci limitu znakov),
- abcdefgh overenie malých písmen v rámci limitu znakov),
- aabbccddmn (validácia obmedzenia znakov),
- aDBcefz (overenie veľkých písmen v kombinácii s overením malých písmen v rámci obmedzenia znakov).
Negatívne testovacie prípady:
- ABCDEFGHJKIOOOOOKIsns (názov presahujúci 10 znakov),
- abcd1234 (názov s číselnými hodnotami),
- nie je zadaný žiadny názov,
- sndddwwww_ ( názov obsahujúci špeciálne znaky).
Príklad automatizácie negatívneho testovania v Selenium s použitím jazyka Java:
**import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait;
public class NegativeIntegrationTest {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("[https://example.com/](https://example.com/): [https://example.com/](https://example.com/)");
// Test povinného poľa s názvom
WebElement nameInput = driver.findElement(By.id("Name"));
nameInput.clear();
driver.findElement(By.id("submit")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("error-name")));
String errorText = driver.findElement(By.id("error-name")).getText();
assertEquals(errorText, "Pole názov je povinné a nesmie byť prázdne.");
// Test nepovolených špeciálnych znakov v poli s názvom
nameInput.sendKeys("Meno obsahujúce diakritiku – á,é,í,ó,ú,č,š,ľ,ž..");
driver.findElement(By.id("submit")).click();
errorText = driver.findElement(By.id("error-name")).getText();
assertEquals(errorText, "Pole názov môže obsahovať len znaky a-z a A-Z.");
// Test prekročenia maximálnej dĺžky názvu
nameInput.clear();
nameInput.sendKeys("ABCDEFGHJKIOOOOOKIsns");
driver.findElement(By.id("submit")).click();
errorText = driver.findElement(By.id("error-name")).getText();
assertEquals(errorText, "Pole názov môže mať maximálne 10 znakov.");
// Test názvu s číselnými hodnotami
nameInput.clear();
nameInput.sendKeys("abcd1234");
driver.findElement(By.id("submit")).click();
errorText = driver.findElement(By.id("error-name")).getText();
assertEquals(errorText, "Pole názov môže obsahovať len znaky a-z a A-Z, nie číselné znaky.");
}
private static void assertEquals(String expected, String actual) {
if (!expected.equals(actual)) {
throw new AssertionError("Expected: " + expected + ", Actual: " + actual);
}
}
}
Výhody negatívneho testovania
- Negatívne testovanie pomáha identifikovať, či sa systém správa neočakávaným spôsobom, napríklad či sa pokazí alebo produkuje nesprávne výsledky, keď dostane neplatné alebo neočakávané vstupy.
- Odhalením slabých miest v systéme môže negatívne testovanie pomôcť zlepšiť celkovú kvalitu softvéru a zvýšiť jeho odolnosť.
- Pomáha odhaliť bezpečnostné zraniteľnosti systému, napríklad odhalením slabých miest v procese overovania vstupov.
- Testovaním systému v nepriaznivých podmienkach zvyšuje negatívne testovanie dôveru v schopnosť systému správne fungovať v reálnych scenároch.
- Negatívne testovanie dodá klientovi väčšiu istotu pred spustením prevádzky.
- Testovanie s neplatnými údajmi môže pomôcť rozlíšiť platné a neplatné údaje a určiť, ktoré z nich sú platné. To znamená, že neplatné údaje možno izolovať, zodpovedajúcim spôsobom aktualizovať a prípadne z veľkej časti vymazať z databázy projektu.
Nevýhody negatívneho testovania
- Negatívne testovanie môže byť časovo náročné, pretože často vyžaduje rozsiahle testovanie okrajových prípadov a neplatných vstupov.
- Automatizácia negatívneho testovania môže byť náročná, pretože si vyžaduje vytvorenie testovacích prípadov, ktoré presne reprezentujú neplatné vstupy.
- Negatívne testovanie môže pokryť len obmedzený súbor potenciálnych negatívnych scenárov a nemusí byť možné otestovať všetky možné neplatné vstupy.
- Môže byť tiež náročné na zdroje, pretože si môže vyžadovať ďalší hardvér alebo softvér na generovanie a správu neplatných vstupov.
- Negatívne testovanie je pre klienta ďalšou vecou, ktorá spôsobuje zbytočné oneskorenie vydania a zvyšuje náklady.
- Existuje šanca, že testeri strávia veľa času a energie pri negatívnom testovaní, čo má za následok nižšiu koncentráciu pri pozitívnom testovaní.
Osvedčené tipy pre negatívne testovanie
Tu sú niektoré z osvedčených postupov pre negatívne testovanie:
- Starostlivo naplánuj stratégiu negatívneho testovania a urč, ktoré scenáre a vstupy sa majú testovať.
- Jasne definuj ciele a zámery svojho negatívneho testovania a to, čo dúfaš, že vykonaním negatívneho testovania dosiahneš.
- Testuj okrajové prípady a hraničné podmienky systému, kde sa s najväčšou pravdepodobnosťou vyskytnú neplatné vstupy.
- Automatizuj proces negatívneho testovania všade, kde je to možné, aby si zvýšil efektívnosť a znížil riziko ľudskej chyby.
- Na generovanie neplatných vstupov používaj podľa možnosti údaje z reálneho sveta, aby si lepšie reprezentoval typy vstupov, s ktorými sa používatelia pravdepodobne stretnú.
- V rámci projektu vytvor samostatný priečinok pre negatívne testovacie scenáre. Hoci niekedy môžu byť negatívne testovacie scenáre súčasťou akceptačných kritérií z user story, vytvorenie testovacích prípadov v samostatnom priečinku v rámci toho istého projektu/adresára je dobrým postupom, pretože náš prístup k nim je jednoduchší a rýchlejší.
Záver
Negatívne testovanie je kľúčovou súčasťou zabezpečenia kvality softvéru, ktorá pomáha odhaľovať chyby, slabé miesta a bezpečnostné riziká. Napriek náročnosti na čas a zdroje prináša výrazné zlepšenie stability a odolnosti softvéru, čo zvyšuje dôveru používateľov. Správne plánovanie a kreatívny prístup sú pri negatívnom testovaní nevyhnutné na dosiahnutie spoľahlivého a robustného softvéru.
O autorovi
Michaela Kojnoková
Agile Test Engineer
Po štúdiu informatiky na ŽU a TUKE som sa najviac ponorila do oblasti automatizácie testovania. Okrem toho sa venujem tvorbe webov, databázam, dátovej analytike, umelej inteligencii a strojovému učeniu. Mám rada cestovanie, šport a najviac si užívam čas strávený v prírode s mojimi blízkymi. LinkedIn