Způsoby detekce chyb v software, metody testování.
Z Na státnice zvesela!
Obsah[skrýt] | 
[editovat] Způsoby detekce chyb
- testování
 - ladění
 
[editovat] Úrovně testování
- jednotkové testování (unit test) - je testována funkcionalita specifické části kódu
 - integrační testování (integration test) - jsou testovány komponenty a jejich interakce na základě rozhraní
 - systémové testy (system test) - kompletní testy softwaru, zda splňuje dané požadavky
 - systémové integrační testy (system integration test) - test integrace softwaru s dalšími softwary třetích stran
 - akceptační testy - smoke test nového buildu a test zákazníkem po kompletním otestování
 
[editovat] Whitebox
- máme k dispozici zdrojové kódy programu, takže je to testování zaměřené na programovou logiku
 - používá se k testování malých částí programů, jako jsou podprogramy nebo třídy (unit testy)
 - měli bychom otestovat všechny možné logické cesty (if/then/else) v programu a tím dokázat jeho bezchybnost -> v praxi je to často nemožné, příliš mnoho cest
 
[editovat] Pokrytí kódu
- Tato metrika nám popisuje, do jaké míry testovací případy pokrývají zdrojový kód.
 - Pokrytí všech příkazů (Statement coverage)
 
- if(a<10 && b=5) b=b/a;. Oba příkazy (podmínku a přiřazení) bychom mohli pokrýt vstupními daty (a=2 a b=5) a pokrytí by bylo pořádku. Bohužel při vstupu a=0 by došlo k chybě dělení.
 
- Pokrytí větví (branch coverage)
 
- se zaměřuje na větvení programu (podmínky, cykly, switch/case). Musíme tedy vytvořit takové testovací případy, které způsobí, že běh programu projde alespoň jednou všechny větve.
 
- Pokrytí všech kombinací podmínek v rozhodovacím výrazu (Multiple Condition Coverage)
 
- oproti pokrytí větví vyžaduje, aby byly provedeny všechny možné kombinace vstupních hodnot. Např. Výraz (a && b && (c || (d && e))) vyžaduje 6 různých vstupních hodnot. Výraz (((a || b) && (c || d)) && e) jich vyžaduje 11, i když mají oba stejný počet operátorů i operandů.
 
- Pokrytí cest (Path Coverage) – vyžaduje, aby byla provedena každá možná cesta průběhu programu alespoň jednou.
 
[editovat] Jednotkové testy
- zaměřené na verifikaci malých jednotek softwarového návrhu (komponent, tříd)
 - Jsou automatické
 - Rozhraní (zda jednotka správně komunikuje s ostatními jednotkami)
 - Lokální datové struktury (zda dočasně uložená data zachovávají svou integritu)
 - Okrajové podmínky (zda modul pracuje správně na hranicích omezujících výpočet)
 - Nezávislé cesty (zaručující, že každý příkaz bude proveden alespoň jednou)
 - Cesty pro zpracování chyb
 
[editovat] Integrační testy
- Integrační testy se provádí hned po „složení“ systému.
 - „velký třesk“ - celý systém se sestaví najednou ze všech možných součástí. (riskantní, pouze pro malé projekty)
 - „inkrementální přístup“ - postupně přidáváme nové komponenty a hned systém testujeme. V praxi problematické, kvůli závislosti komponent.
 
[editovat] Blackbox
- Metoda testování bez znalosti kódu softwaru. Máme tedy k dispozici specifikaci softwaru a samotný software v podobě „černé skříňky”, tzn. že se nemůžeme podívat dovnitř, jak funguje.
 - je doplňkem k metodě testování bílé skříňky, a tudíž se zaobírá jinými chybami. 
- nesprávné nebo zcela chybějící funkce
 - Chyby rozhraní
 - Chyby ve struktuře dat nebo externích databázích
 - Neočekávané chování
 - Chyby při inicializaci nebo ukončení
 
 
[editovat] Smoke test
- vznikla při výstupní kontrole elektrických spotřebičů, kdy se prostě zapojily do zásuvky a pokud se z nich nekouřilo, prošly testem.
 - Aplikace se prostě po přeložení spustí a pokud něco dělá (a tím se nemyslí dumpování jádra), tak to projde testem.
 
[editovat] Zátěžové testy
- aplikací, které jsou dělané pro zpracovávání velkého množství dat, např. databáze, webové severy, distribuované výpočetní systémy.
 - Princip testu: postupně zvyšujeme zátěž dokud nenarazíme na chybu aplikace nebo na určitou mez.
 - Pomocí této metody se dá otestovat, jestli případná havárie nezpůsobí ztrátu dat nebo dokáže odhalit chyby, které by se normálně neprojevily.
 
[editovat] Systémové testy
- Účelem této metody, je otestovat systém jako celek. Testují se tedy různé charakteristiky, např. doba odezvy, kompatibilita, instalovatelnost atd.
 
[editovat] Hraniční testy
- vstupní hodnoty velmi blízko hraničním hodnotám často způsobují aplikacím velké problémy
 - výhody: 
- velmi dobré rozeznání budoucích chyb
 - velmi jednoduché a malé testy
 
 - nevýhody 
- nevyzkouší všechny možnosti vstupních hodnot
 - nehledí na závislosti vstupních hodnot - tím je myšleno, že vstup složený z hodnot např. 1, 2, 3, nekontroluje jako všechny kombinace vstupních hodnot
 
 
[editovat] Návrh testovacích případů (data)
- Dobrý test je takový test, který najde chybu.
 - Dobrý test bude vyvolávat co nejvíce vstupních podmínek, a tím omezí celkový počet potřebných testovacích případů.
 - Testovací případy budou typicky obsahovat: 
- příliš málo dat nebo žádná data
 - příliš mnoho dat
 - neplatná data (např. negativní počet zaměstnanců)
 
 
[editovat] Shrnutí
- Existuje velké množství metodik, které mají své silné, ale bohužel i slabé stránky, a proto je dobré připravovat testovací metody pomocí více metod.
 - Testy vytvářet souběžně s aplikací, ne až nakonec.
 - Testy provádět v logické posloupnosti (nejprve smoketest a potom až zátěžový test)
 
(zdroj: Kubovec - Okruhy otázek ke státní závěrečné zkoušce z předmětu - Návrh informačních systémů (NIS) 2005/2006)
