Význam testování, terminologie, testovací proces
Testovaní
Je proces spouštění programu se záměrem nalézt chyby (ne dokázat jeho správnost). Testování ale neznamená pouze verifikaci běžícího programu, zahrnuje rovněž testování požadavků, revize dokumentace, inspekce kódu, statické analýzy, atd. Na testování programů je lépe nahlížet jako na destruktivní proces snažící se najít chyby (jejichž přítomnost se předpokládá) v programu. Testování zahrnuje následující činnosti:
- Verifikace - je proces testování hledající odpověď na otázku, zda-li softwarový produkt je vytvářen správně. Jinými slovy řečeno, hledáme nedostatky v samotném softwarovém systému - chyby, které by vedly k pádu aplikace.
- Validace - je proces testování hledající odpověď na otázku, zda-li vytvářený software je správný. Jinými slovy, zda-li implementuje požadovanou funkcionalitu - jestli systém dělá to, co požaduje zákazník.
Výhody testování:
- Testování může ukázat přítomnost chyb, ale nemůže prokázat absenci chyb.
- Všechny chyby nemohou být nalezeny.
- Test měří a podporuje kvalitu.
- Testování je část zajištění jakosti (Quality Assurance)
- Snižuje náklady na vývoj – chyba objevena v dřívější fázi projektu je mnohem méně nákladná na opravu
Principy používané při testování:
- Testy se plánují pro každou iteraci a zahrnují integrační testy a testy systémové. Integrační testy se provádí pro každý vytvořený produkt během iterace, zatímco systémový test se provádí pouze na konci iterace, kdy vzniká spustitelná verze vyvíjeného produktu.
- Testy se navrhují a následně implementují v podobě testovacích úloh, které jednoznačně definují co se má ověřit. Z tohoto pohledu hovoříme o testovacích procedurách, které specifikují jak se má test provádět, nebo se vytváří spustitelné testovací komponenty umožňující automatizaci procesu ověřování.
- Výsledky provedených testů jsou systematicky zprácovávány a vadné části jsou opakovaně testovány a případně zaslány zpět do toků činností jako je analýza, návrh nebo implementace s cílem nedostatky odstranit.
Typy testování:
- Úplné testování - Úplné testování je nemožné (testování všech kombinací).Dokonce i podle teorii, je úplné testování zbytečně nákladné, protože nepřiřazuje testům priority.
- Opakované testování (Re-testing, re-running) - je opakované spuštění testu, který způsobil selhání při posledním spuštění, poté co (údajná) příčina selhání (vada) byla opravena, abychom se ujistili, že byla úspěšně odstraněna.
- Regresní testování - znovu spuštění testovacího případu, který nezpůsobil selhání v předchozím spuštění, abychom se ujistili, že stále neselže pro novou verzi systému nebo konfiguraci.
- Zátěžové a výkonostní testování - ověření zda systém nebo komponenta vyhovuje specifikovaným požadavkům na pracovní zátěž a zda li vyhovuje specifikovaným výkonostním parametrům - patří do testování nefunkčních požadavků
Terminologie
Neexistuje všeobecně akceptovaná množina pojmů. Každý výrobce softwaru, testovací nástroj, různí experti používají odlišné terminologie. To mnohdy vede k problémům s komunikací (např. modul = jednotka= komponenta…). Neexistuje dobrá, nebo špatná terminologie, existuje pouze definovaná a nedefinovaná.
Testovací proces
Proces testování začíná stanovením vize a cílů testování. Dále se určí záběr testování, tedy co vše je třeba testovat, vybírají se testy, sbírají data a připravují nástroje, které tým k testování potřebuje. Navíc se kontroluje, zda všechny požadavky na produkt jsou ve formě, aby bylo možno jednoznačně zkontrolovat jejich splnění. Samotné testování probíhá zkoumáním produktu na několika úrovních a reportováním nalezených skutečností. Proces testování se často provádí ve více iteracích, kdy každá iterace začíná předáním nové verze produktu testům.
Aktivity spojené s testovacím procesem:
- Plánování testů - Vysokoúrovňový testový plán a více detailnější testové plány. Spojený s projektovým plánem. Správa konfigurací, požadavky, správa incidentů.
- Specifikace testů - Specifikace testů je součástí „testware“ - testové případy (viz níže), testovací skripty (viz níže), testovací data.
- Provádění testů
- Manuálně - tester provádí akce krok za krokem podle specifikace TC
- Automatizovaně – testovací nástroj provádí automatizovaně nastavené kroky (testovací skripty).
- Testovací sekvence – pokud není žádoucí provádět testovací skripty separátně. Např. vlož nový záznam -> vyhledej záznam -> modifikuj záznam -> smaž záznam
- Testovací prostředí
- Testovací data – jsou různé vstupní a výstupní soubory (pro očekávané a skutečné výsledky). Jsou spravovány jako součást testware.
- Záznam testů a vyhodnocování – Záznam aktuálních výstupů a porovnání s očekávanými výstupy. Test = měření kvality = porovnání aktuálního výsledku s očekávaným výsledkem. Off-line vyhodnocování výsledků (pass/fail). Logování testů (všechna důležitá a relevantní data o tom, co se dělo během testu). Zpráva o testech. Záznam pokrytí testy. Správa incidentů.
- Ukončovací kritéria - Kritéria ukončení testů musí být specifikována předem.
- Všechny testovací případy TC byli provedeny.
- Všechny testovací případy dopadly úspěšně.
- Neexistují nevyřešení incidenty.
- Neexistují nevyřešené závažné incidenty.
- Počet nalezených vad.
- Předefinované pokrytí bylo dosaženo
- Požadovaná spolehlivost (MTBF) byla dosažena
- Odhadovaný počet vad je dostatečně nízký
Testovací případy (test-case)
Základními stavebními kameny testů jsou testovací případy test cases (TC). Jedná se o dokumentaci určenou pro testery. Tento podklad je určen pro testování jednoho konkrétního místa v aplikaci při konkrétní situaci.
Obsahuje následující části:
- Jedinečné jméno/titulek a ID
- Popis co se bude tímto TC testovat
- Podmínky/ předpoklady (aby mohl být TC spuštěn – např. data v DB, přihlášení…)
- Akce (kroky)
- Očekávané výsledky
Na základě test case a jeho očekávaných výsledků se rozhoduje zda-li test proběhl úspěšně či nikoliv.
Příklad test-case:
Testovací skript
Vychází z testovacího případu. Vlastně může kombinovat několik testovacích případů, tak , aby spolu tvořily logický celek. Obsahuje souhrn všech vstupních požadavků pro své vykonání. Především se jedná o zadání vstupních dat. Dále jsou v něm uvedeny jednotlivé kroky, které mají být při testování provedeny. Pro každý krok je uveden očekávaný výsledek. Tester, který skript provádí, pak postupuje po jednotlivých krocích a u každého vyhodnocuje, zda proběhl podle očekávání. Testovací skript se označí jako úspěšně otestovaný v případě, že každý jeho jednotlivý krok proběhl v pořádku a výsledek odpovídá očekávání.
U testovacího skriptu je důležité, že se jedná o ucelený a logicky provázaný dokument. Jednotlivé kroky na sebe musí navazovat. Znamená to, že výsledek jednoho kroku se stává vstupem pro krok následující. Skript musí být vykonatelný. S tím souvisí například i to, že vstupní podmínky skriptu musí být splnitelné, a očekávané výstupy musí být prokazatelné.
Testovací scénář
Testovací scénář vznikne spojením několika testovacích skriptů. Snahou je simulovat konkrétní způsob používání aplikace. Obvykle se jedná o simulování procesů, jakým bude aplikace používána u zákazníka.