Minimální znalosti Flashcards
Rozdíl mezi laděním softwaru, testováním softwaru a formální verifikací
Ladění softwaru (debugging) - proces hledání defektu (lokace v kódu) při znalosti selhání
Testování (testing) - je vyhodnocování SUT (Subject Under Test) sledováním jeho běhu. Zkoumá SW jeho spuštěním za účelem zlepšení jeho kvality.
Formální Verifikace - s pomocí formálních metod ověřuje, zda systém odpovída specifikaci. Dokazuje, nebo vyvrací správnost systému vzhledem k dané formální specifikaci nebo vlastnosti, použítiím matematických formálních metod
Definice testovacího případu (Test casu) a z čeho se skládá
Soubor podmínek, které určují zda aplikace, sw systém nebo jedna z jeho funkcí funguje tak, jak bylo původně zamýšleno.
Skládá se ze vstupních hodnot, očekávaných výsledků, ale také z prefixových a postfixových hodnot (pro přípravu programu před test a jeho vyčištění po testu)
Slouží k získání odpovědi ano/ne (passed/failed)
V-model (Nakresli obrázek, fáze, co uzavírá smyčku)
Smyčku uzavírá regresní testování (na různých úrovních) pro ověření, že nová verze SW nezavádí novou chybu
V-model - Akceptační testování
Účel: Zjišťujeme zda SW splňuje požadavky zákazníka
Typy chyb, které zjišťuje: SW neplní svůj primární účel
Testěři: Lidé, kteří jsou oddáleni od samotného vývoje.
Předpoklad: Případy užití domluvené se zákazníkem
V-model - Systémové testování
Účel: Splňuje SW jako celek specifikaci požadavků?
Typy chyb, které odhaluje: Chyby v návrhu a specifikaci
Testeři: Skupina lidí oddělená od vývojářu daného systému
Předpoklad: Jednotlivé části systému pracují samostatně
V-model - Integrační testování
Účel: Ověření rozhraní modulů v podsystému, jejich předpokladů a vzájemné komunikace
Typy chyb: Chyby v rozhraní a předpokládaných stavech systému
Testěři: Jsou součástí vývojové týmu
Předpoklad: Jednotlivé moduly pracují správně
V-model - Testování modulů
Modul je kolekce souvisejících jednotek (units), které jsou seskupeny v jednom souboru (C), tříde (C++/Java), baličku/modulu (Ada/Python/Perl), rozšíření (PHP)
Účel: Ověření zda jednotlivé moduly v izolaci pracují správně
Typy chyb, které zjišťuje: Chyby v komunikaci jednotek v modulu, chyby v použití/předání datových struktur v rámci modulu
Testeři: Většinou samotní programátoři modulu
Předpoklad: Jednotky splňují základní chování
V-model - Jednotkové Testování (Unit testing)
Účel: Zmenšit rozsah testování na vyšších úrovních. Poskytnout uživateli základní metriku o spolehlivosti jednotek
Typy chyb, které zjišťuje: Chyby na nejnižší úrovni (funkcionalita, návratové hodnoty, krajní hodnoty parametrů, vedlejší účinky)
Testeři: Samotní programátoři jednotek
Předpoklad: Modul (tj. funkce a datové struktury) je navržen pro unit testing
Co je to jednotka? (Unit)
Jednotka je fragment kódu popisující chování systému (např. posloupnost příkazu v imperativních jazycích) a související datové struktury, zaobalený v dále nedělitelném logickém celku
Např. procedury nebo funkce (C)
Jednoduché třídy nebo složitější metody v OOP jazycích (Java, C++)
Triggery v SQL
Klauzule v Prologu
Fáze jednotkového testování
Setup - Nastavení stavu/kontextu/prostředí pro SUT
Exercise - přenechání řízení SUT
Verify - kontrola dosažených výsledků a změněného stavu SUT
Teardown - vyčištění vedlejších účinků z testu
Vztah kritéria pokrytí (coverage criterion), požadavků na test (test requirements), testovacího případu (test case) a testovací sady (test suite)
Kritérium pokrytí (coverage criterion) - Pravidlo/předpis pro systematické generování požadavků na test (test requirement - specifický element SW, který musí daný test pokrýt/splnit)
Testovací sada (test set/suite) Množina testovacích případů (test case). Měla by se tvořit na základě předem zvoleného kritéria pokrytí s cílem dosáhnout 100% pokrytí (Míry udávající, jak moc daná testovací sada zkoumá SUT)
Definice zahrnutí kritéria pokrytí (coverage criterion subsumption)
Kritérium C1 zahrnuje kritérium C2 (C1 > C2), právě když kazdá testovací sada splňující (Sada s ohledem na kritérium pokrývá 100% testovacích artefaktů) kritérium C1 také splňuje kritérium C2.
Pomůcka: Když vytvočřím 100% testovací sadu silnějšího kritéria pokrytí, nemusím se zabývat slabšími kritérii
Tvorba CFG podle zdrojového kódu
CFG - Control flow graph (Graf toku řízení) je abstraktní model SUT (tzn. reprezentuje pouze vybrané informace daného systému/pohledu na něj). Slouží jako grafová reprezentace řízení běhu SUT.
Základní blok je posloupnost maximálního počtu příkazů pro které platí, že:
- Vstupní bod je na prvním příkazu
- Výstupní bod je na posledním příkazu
- Příkazy se provádí vždy sekvenčně v pořadí daném posloupností
- Základní blok může obsahovat příkaz pro větvení (skok) pouze na konci
Princip TDD (Test-Driven development)
Testování přenést co nejvíce na začátek projektu (na testování se nezapomene)
Těžit z automatizace spuštění testů (typicky unit-testy použitelné nejen pro ověření nové funkcionality, ale také jako regresní testy)
Princip:
- Napsat sadu testů
- Spustit testy a ověřit, že žádný neprošel
- Napsat kus kódu
- Spustit testy
- V případě zvýšení počtu passed refaktorovat kód a akci opakovat
Definice rozdílu mezi mock a stub
Stub - Objekt, kterého když se na něco zeptá SUT, odpoví vždy stejně (např. při zavolání open ho nezajímají parametry a vrátí pevně daný file descriptor)
Mock - Navíc od stubu kontroluje vstupní parametry a dokáže celý test selhat (tj. dokáže selhat i ve fázi exercise)