Fáze testování testování v různých vývojových modelech. Proč je testování nutné? Příprava na testování
Většina nejlepší způsob vyhodnotit, zda jsme produkt dobře otestovali - analyzovat chybějící vady. Takové, se kterými se setkali naši uživatelé, implementátoři a podniky. Můžete z nich vyhodnotit mnohé: co jsme dostatečně důkladně nezkontrolovali, kterým oblastem produktu je třeba věnovat větší pozornost více pozornosti, jaké je obecné procento opomenutí a jaká je dynamika jeho změn. S touto metrikou (možná nejčastější při testování) je vše v pořádku, ale... Když jsme produkt vydali a dozvěděli se o promeškaných chybách, může být již pozdě: na Habré se o nás objevil naštvaný článek, konkurenti jsou rychle se šířící kritika, ztratili jsme důvěru zákazníků, management je nespokojený.
Abychom tomu zabránili, obvykle se snažíme posoudit kvalitu testování předem, před vydáním: jak dobře a důkladně produkt testujeme? Jakým oblastem chybí pozornost, kde jsou hlavní rizika, jaký je pokrok? A abychom na všechny tyto otázky odpověděli, vyhodnotíme testovací pokrytí.
Proč hodnotit?
Jakékoli hodnotící metriky jsou ztrátou času. V tuto chvíli můžete testovat, vytvářet chyby a připravovat autotesty. Jaký druh magického přínosu získáváme z metrik pokrytí testem, abychom obětovali čas testování?- Najděte své slabé stránky. Přirozeně, potřebujeme to? nejen truchlit, ale vědět, kde je potřeba zlepšení. Který funkční oblasti není pokryto testy? Co jsme nezkontrolovali? Kde jsou největší rizika chybějících chyb?
- Málokdy získáme 100 % na základě našich výsledků hodnocení pokrytí. Co zlepšit? kam jít? Jaké je nyní procento? Jak jej můžeme zvýšit jakýmkoli úkolem? Jak rychle se dostaneme na 100? Všechny tyto otázky přinášejí transparentnost a jasnost našeho procesu. a odpovědi na ně poskytuje posouzení pokrytí.
- Zaměření pozornosti.Řekněme, že náš produkt má asi 50 různých funkčních oblastí. Ukazuje se nová verze, a začneme testovat 1 z nich a najdeme tam překlepy a tlačítka, která se posunula o pár pixelů a další maličkosti... A nyní je doba testování u konce a tato funkčnost je podrobně testována... A těch dalších 50? Hodnocení pokrytí nám umožňuje stanovit priority úkolů na základě aktuální reality a termínů.
Jak hodnotit?
Před implementací jakékoli metriky je důležité rozhodnout, jak ji budete používat. Začněte tím, že odpovíte přesně na tuto otázku - s největší pravděpodobností okamžitě pochopíte, jak ji nejlépe vypočítat. A v tomto článku se jen podělím o některé příklady a své zkušenosti, jak toho lze dosáhnout. Ne proto, abyste slepě kopírovali řešení – ale aby se vaše představivost opírala o tuto zkušenost a promýšlela řešení, které je pro vás ideální.Pokrytí požadavků hodnotíme testy
Řekněme, že máte ve svém týmu analytiky a ti neztrácejí čas. pracovní doba. Na základě výsledků jejich práce byly vytvořeny požadavky v RMS (Requirements Management System) - HP QC, MS TFS, IBM Doors, Jira (s dalšími pluginy) atd. Do tohoto systému zadávají požadavky, které splňují požadavky požadavků (promiňte tautologii). Tyto požadavky jsou atomické, sledovatelné, specifické... Obecně platí, ideální podmínky pro testování. Co můžeme v tomto případě dělat? Při použití skriptovaného přístupu propojte požadavky a testy. Spouštíme testy ve stejném systému, vytváříme spojení požadavek-test a kdykoli můžeme vidět zprávu o tom, které požadavky mají testy, které ne, kdy tyto testy prošly as jakým výsledkem.Dostaneme mapu pokrytí, pokryjeme všechny nepokryté požadavky, všichni jsou šťastní a spokojení, nechybí nám žádná chyba...
Dobře, vraťme se z nebe na zem. S největší pravděpodobností nemáte podrobné požadavky, nejsou atomické, některé požadavky jsou zcela ztraceny a nemáte čas dokumentovat každý test, nebo alespoň každý druhý. Můžete si zoufat a plakat, nebo si můžete přiznat, že testování je kompenzační proces, a čím horší to je s analytikou a vývojem na projektu, tím více se musíme snažit a kompenzovat problémy ostatních účastníků procesu. Podívejme se na problémy samostatně.
Problém: Požadavky nejsou atomické.
Analytici také někdy dělají chyby v hlavě, a to je obvykle spojeno s problémy s celým projektem. Například se vyvíjíte textový editor a ve svém systému můžete mít (mimo jiné) dva požadavky: „formátování html musí být podporováno“ a „při otevírání souboru v nepodporovaném formátu by se mělo objevit vyskakovací okno s otázkou.“ Na kolik testů je potřeba základní kontrola 1. požadavek? A za 2.? Rozdíl v odpovědích je s největší pravděpodobností asi stonásobný!!! Nemůžeme říci, že pokud existuje alespoň 1 test na 1. požadavek, stačí to - ale na 2. s největší pravděpodobností ano.Přítomnost testu požadavku nám tedy nezaručuje vůbec nic! Co v tomto případě znamenají naše statistiky pokrytí? Téměř nic! Budeme se muset rozhodnout!
- V tomto případě lze automatický výpočet pokrytí požadavků testy odstranit - stále nenese žádnou sémantickou zátěž.
- Pro každý požadavek, počínaje nejvyšší prioritou, připravujeme testy. Při přípravě analyzujeme, jaké testy bude tento požadavek vyžadovat, kolik jich bude stačit? Provádíme plnohodnotnou testovací analýzu a neodebíráme ji „existuje jeden test, dobře, dobře“.
- V závislosti na použitém systému exportujeme/nahráváme testy na vyžádání a... testujeme tyto testy! Je jich dost? V ideálním případě by samozřejmě takové testování mělo být prováděno s analytikem a vývojářem této funkce. Vytiskněte si testy, zamkněte své kolegy v zasedací místnosti a nepouštějte je, dokud neřeknou „ano, tyto testy stačí“ (to se děje pouze s písemným souhlasem, kdy se říká, že tato slova odsouhlasí i bez analyzování testů Při ústní diskusi budou vaši kolegové chrlit kritiku, zmeškané testy, nepochopené požadavky atd. - to není vždy příjemné, ale pro testování je to velmi užitečné!)
- Po dokončení požadovaných zkoušek a odsouhlasení jejich úplnosti lze tomuto požadavku v systému přiřadit status „pokryto zkouškami“. Tato informace bude znamenat mnohem více než „tady je alespoň 1 test“.
Takový schvalovací proces samozřejmě vyžaduje spoustu prostředků a času, zvláště zpočátku, než získáte praxi. Provádějte proto pouze požadavky s vysokou prioritou a nová vylepšení. Postupem času zpřísníte zbývající požadavky a všichni budou šťastní! Ale... co když neexistují žádné požadavky?
Problém: neexistují žádné požadavky.
V projektu chybí, probírá se ústně, každý si dělá, co chce/může a jak rozumí. Testujeme to stejným způsobem. Tím se dostáváme k obrovskému množství problémů nejen při testování a vývoji, ale také zpočátku nesprávné implementaci funkcí – chtěli jsme něco úplně jiného! Zde mohu doporučit možnost „definujte a zdokumentujte požadavky sami“ a dokonce jsem tuto strategii ve své praxi několikrát použil, ale v 99 % případů takové zdroje v testovacím týmu nejsou – takže si vezmeme hodně cesta méně náročná na zdroje:- Vytvořte seznam funkcí. Sami! Ve formě znaku Google, ve formátu PBI v TFS – vyberte si libovolný, pokud tak neučiníte textový formát. Stále musíme sbírat statusy! Do tohoto seznamu přidáme všechny funkční oblasti produktu a pokusíme se vybrat jednu obecná úroveň rozklad (můžete zapisovat softwarové objekty nebo uživatelské skripty, moduly, webové stránky nebo metody API nebo obrazovkové formuláře...) - ale ne vše najednou! JEDEN formát rozkladu, který je pro vás jednodušší a vizuálnější, vám umožní, aby vám neunikly důležité věci.
- Na KOMPLETNOSTI tohoto seznamu se shodneme s analytiky, vývojáři, byznysem, v rámci našeho týmu... Snažte se udělat vše pro to, abyste nepřišli o důležité části produktu! Jak hluboce analyzovat, je na vás. V mé praxi bylo jen pár produktů, pro které jsme vytvořili více než 100 stran v tabulce, a to byly obří produkty. Nejčastěji je 30-50 řádků dosažitelným výsledkem pro následné pečlivé zpracování. V malém týmu bez specializovaných testovacích analytiků větší číslo prvky seznamu funkcí bude příliš obtížné udržovat.
- Poté projdeme podle priorit a zpracujeme každý řádek seznamu funkcí, jak je popsáno výše v části požadavků. Píšeme testy, diskutujeme, domlouváme se na dostatečnosti. Označujeme stavy, pro kterou funkci je dostatek testů. Stav, průběh a rozšíření testů získáváme prostřednictvím komunikace s týmem. Všichni jsou šťastní!
Ale... Co když jsou požadavky zachovány, ale ne ve sledovatelném formátu?
Problém: Požadavky nejsou dohledatelné.
Na projektu je obrovské množství dokumentace, analytici píší rychlostí 400 znaků za minutu, máte specifikace, technické specifikace, návody, certifikáty (nejčastěji se to děje na přání zákazníka) a to vše jako požadavky a vše je na projektu již dlouho. Máte nejasnosti, kde hledat jaké informace?Opakujeme předchozí část a pomůžeme celému týmu v organizaci!
- Vytvoříme seznam funkcí (viz výše), ale bez podrobný popis požadavky.
- Pro každou funkci společně shromažďujeme odkazy na technické specifikace, specifikace, pokyny a další dokumenty.
- Jdeme podle priorit, připravujeme testy, domlouváme se na jejich úplnosti. Vše je při starém, jen spojením všech dokumentů do jedné tabulky zvyšujeme snadnost přístupu k nim, přehledné stavy a konzistenci testů. Nakonec je u nás všechno skvělé a všichni jsou šťastní!
Ale... Ne na dlouho... Zdá se, že během minulého týdne analytici aktualizovali 4 různé specifikace na základě požadavků zákazníků!!!
Problém: požadavky se neustále mění.
Samozřejmě by bylo fajn otestovat nějaký pevný systém, ale naše produkty většinou žijí. Zákazník se na něco zeptal, něco se změnilo v legislativě mimo náš produkt a někde analytici našli chybu v předloňské analýze... Požadavky si žijí vlastním životem! co dělat?- Řekněme, že jste již shromáždili odkazy na technické specifikace a specifikace ve formě tabulky seznamu funkcí, PBI, požadavků, poznámek Wiki atd. Řekněme, že již máte testy pro tyto požadavky. A nyní se požadavek mění! To může znamenat změnu v RMS nebo úkol v TMS (Task Management System) nebo dopis v poště. V každém případě to vede ke stejnému důsledku: vaše testy jsou irelevantní! Nebo nemusí být relevantní. To znamená, že vyžadují aktualizaci (testovací pokrytí stará verze produkt se nějak opravdu nepočítá, že?)
- V seznamu funkcí, v RMS, v TMS (Test Management System – testrails, sitechco atd.) musí být testy nutně a okamžitě označeny jako irelevantní! V HP QC nebo MS TFS to lze provést automaticky při aktualizaci požadavků, ale na štítku Google nebo wiki jej budete muset zadat ručně. Ale měli byste vidět hned: testy jsou irelevantní! To znamená, že stojíme před kompletní iterativní cestou: aktualizovat, znovu spustit analýzu testu, přepsat testy, dohodnout se na změnách a teprve poté funkci/požadavek znovu označit jako „pokryté testy“.
V tomto případě získáme všechny výhody hodnocení pokrytí testem, a to v dynamice! Všichni jsou šťastní!!! Ale…
Strávili jste však tolik času prací na požadavcích, že nyní nemáte dostatek času na testování ani dokumentaci testů. Podle mého názoru (a je zde prostor pro náboženský spor!) požadavky důležitější než testy, a je to tak lepší! Přinejmenším jsou v pořádku a celý tým o tom ví a vývojáři dělají přesně to, co je potřeba. NA DOKUMENTOVACÍ TESTY ALE NEZBYL ČAS!
Problém: Není dostatek času na zdokumentování testů.
Ve skutečnosti může být zdrojem tohoto problému nejen nedostatek času, ale také vaše velmi vědomá volba je nedokumentovat (nemáme je rádi, vyhýbáme se účinku pesticidu, příliš často se mění přípravek atd. .). Jak ale v tomto případě vyhodnotit pokrytí testem?- Stále potřebujete požadavky, buď jako úplné požadavky, nebo jako seznam funkcí, takže některé z výše popsaných částí, v závislosti na práci analytiků na projektu, budou stále nutné. Máte požadavky/seznam funkcí?
- Stručně popisujeme a ústně domlouváme strategii testování, aniž bychom dokládali konkrétní testy! Tato strategie může být specifikována ve sloupci tabulky, na wiki stránce nebo v požadavcích v RMS a opět musí být dohodnuta. V rámci této strategie budou kontroly prováděny jinak, ale budete vědět: kdy minule testováno a pomocí jaké strategie? A to, jak vidíte, také není špatné! A všichni budou šťastní.
Ale… Jaké další „ale“? Který???
Řekněme, že obejdeme všechno a ať jsou s námi kvalitní produkty!
Plán kurzu:
1.Testovací model a Jak pracovat se strukturou
2.
Jak přijít na kontroly
1.
2.
Testovací techniky návrhu (Black-box)
Přehled technik White Box
3.
Práce s konzistencí
4.
Formulace šeků
5.
Stanovení priorit
6.
Po zpracování dokumentace ke zkoušce
Audit – Co bylo zkontrolováno
1.Úplnost pokrytí (podle potřeby)
2.
Konzistence (duplikáty, protichůdné požadavky)
3.
Struktura (rozdělená na části a na testovací soupravy jak tě bili za kontroly)
4.
Obsah kontrol (formulace, srozumitelnost všem účastníkům projektu)
5.
Design (písařské chyby, elegantní vzhled)
6.
Nátěr (kouř/MAT/AT)
7.
Dodržování procesu (proces práce se zkušební dokumentací) Chyby pro všechny typy dokumentace
Gramotnost
60
10,4
Pokrývá všechny funkce
kontroly
42
9,4
Rozdělení funkcí
6,4
Vzhled
6,2
Jediný styl
2,1
Metody dokumentu
2,1
Metody výsledků
2
55
38
14
20
17
% všech projektů
% všech chyb Chyby pro testovací průzkum, testovací případy
Přeskakování kontrol
12,6
Očekávaný
výsledek
Duplikáty
Jediný styl
Kontroverze
Přednost
70
47
6
38
3,5
25
2,4
25
1,6
1,4
19
% všech projektů
% všech chyb
Testovací model
- Tohle logická struktura, popisující funkčnostchování systému a/nebo uživatele, podle kterého
jsou generovány testovací případy. Sestavení testovacího modelu
začíná výstavbou konstrukce a poté je schválena
struktura je naplněna testovacími případy/kontrolami.
c) Dmitrij Tiščenko. Blog A1QA, 2014
Pokrytí inspekcí
1) Aktuální přání klienta ve specifikacích\požadavcích\rozvrženích2) Dohody o projektu
3) Dostupnost potřebné kontroly pro každou funkci:
Testovací techniky návrhu:
◦
◦
◦
◦
Ekvivalentní testování rozdělení
Testování hraničních hodnot
Párové testování
Testování přechodu stavu
Rozdělení ekvivalence
TECHNOLOGIE EKVIVALENTNÍCH TŘÍD*pro zjednodušení příkladu vezměme konstantní cenu
1) Rozdělte vstupní parametry do tříd
Parametrtřída 1
třída 2
Verze produktu
Norma
Pojistné
<0
0 <= количество < 100
Množství
třída 3
>= 100
*Voice of Reason – pro „Verzi produktu“ musíte otestovat VŠECHNY hodnoty z platné třídy hodnot.
Například pro pole Platba (hodnoty: karta, hotovost, převod) je logické otestovat VŠECHNY možnosti samostatně
2) 1 třída == 1 kontrola
Verze produktuPřípad 1
Norma
Případ 2
Pojistné
množství
2) 1 třída == 1 kontrola
Verze produktuPřípad 1
Norma
Případ 2
Pojistné
množství
Případ 3
-1
Případ 4
16
Případ 5
125
3) Negativní kontrola pouze pro 1. třídu v případě
Verze produktumnožství
Výsledek
Případ 1
Norma
50
Pozitivní
Případ 2
Pojistné
50
Pozitivní
Případ 3
Norma
-1
Negativní
Případ 4
Norma
16
Pozitivní
Případ 5
Norma
125
Negativní
4) Přehodnoťte pozitivní kontroly
Verze produktumnožství
Výsledek
Případ 1
Norma
50
Pozitivní
Případ 2
Pojistné
50
Pozitivní
Případ 3
Norma
-1
Negativní
Případ 4
Norma
16
Pozitivní
Případ 5
Norma
125
Negativní
5) Celkem
Verze produktumnožství
Výsledek
Případ 1
Pojistné
50
Pozitivní
Případ 2
Norma
-1
Negativní
Případ 3
Norma
16
Pozitivní
Případ 4
Pojistné
125
Negativní
Více tříd...
Parametrtřída 1
třída 2
Verze produktu
Norma
Pojistné
<0
0 <= Кол-во < 100
Zlomkové
Celý
Čísla
Ne čísla
množství
třída 3
> 100
Prázdný Verze produktu
množství
Výsledek
Případ 1
Norma
50
Pozitivní
Případ 2
Pojistné
10
Pozitivní
Případ 3
Pojistné
-1
Negativní
Případ 4
Norma
16
Pozitivní
Případ 5
Pojistné
150
Negativní
Případ 6
Pojistné
19,45
Negativní
Případ 7
Pojistné
%Číslo!
Negativní
Případ 8
Norma
-
Negativní Verze produktu
množství
Výsledek
Případ 1
Norma
50
Pozitivní
Případ 2
Pojistné
10
Pozitivní
Případ 3
Pojistné
-1
Negativní
Případ 4
Norma
16
Pozitivní
Případ 5
Pojistné
150
Negativní
Případ 6
Pojistné
19.45
Negativní
Případ 7
Pojistné
%Číslo!
Negativní
Případ 8
Norma
-
Negativní
~30 % pozitivních případů
Verze produktumnožství
Výsledek
Případ 1
Norma
50
Pozitivní
Případ 2
Pojistné
10
Pozitivní
Případ 3
Pojistné
-1
Negativní
Případ 4
Pojistné
150
Negativní
Případ 5
Pojistné
19.45
Negativní
Případ 6
Pojistné
%Číslo!
Negativní
Případ 7
Norma
-
Negativní Funkce
Vstupní parametr
Příjemce
Poslat
Podrobit
Tělo
Soubory
Připojit
Soubory
Formátování textu
Vymazat
Neplatné
třída 1
třída 2
Existující adresa Neexistující adresa
Velikost 0
0 < Размер <= Limit
Obsahuje symboly @
._-+
Jiné symboly než @ . _ - +
Formát
Ne formát
Velikost 0
0 < Размер <= Limit
Obsahuje znaky
kromě „∞₽₾₾©¥£µ®“ Symboly ∞₽₾₾©¥£µ®
Velikost 0
0 < Размер <= Limit
Formátování
Žádné formátování
Žádný
Jeden
Velikost 0
0 < Размер <= Limit
Podporováno
Nepodporováno
Není vybrán žádný text
vybrat
Text
formátování
Klikněte
třída 3
Velikost > Limit
Velikost > Limit
Velikost > Limit
Mnoho
Velikost > Limit
Naformátováno
tý text №
1
2
Příjemce
Existuje
0 < Размер <= Limit
Podrobit
0 < Размер <= Limit
Obsahuje znaky
kromě „∞₽₾₾©¥£µ®“
3 Obsahuje symboly @. _ 0< Размер <= Limit
-+
4 Formát
0 < Размер <= Limit
5 Neexistující adresa 0< Размер <= Limit
6 Velikost 0
Obsahuje znaky
kromě „∞₽₾₾©¥£µ®“
7 Velikost > Limit
Obsahuje znaky
kromě „∞₽₾₾©¥£µ®“
8 Není formát
0 < Размер <= Limit
9 0 < Размер <= Limit
Velikost 0
10 0 < Размер <= Limit
Velikost > Limit
11 0 < Размер <= Limit
Obsahuje znaky
“∞₽₾₾©¥£µ®”
12 Existuje
0 < Размер <= Limit
0 < Размер <= Limit
Formátování
Žádný
Jeden
Očekávaný
výsledek
Odesláno
Odesláno
0 < Размер <= Limit
Tři
Odesláno
0 < Размер <= Limit
0 < Размер <= Limit
Formátování
Tři
Žádný
Jeden
Odesláno
Nedoručeno
Nebylo odesláno
Formátování
Jeden
Nebylo odesláno
0 < Размер <= Limit
Formátování
0 < Размер <= Limit
0 < Размер <= Limit
Žádný
Jeden
Tři
Tři
Nebylo odesláno
Nebylo odesláno
Nebylo odesláno
Nebylo odesláno
Velikost > Limit
Žádný
Nebylo odesláno
Tělo
Soubory #
Vstup
Výsledek
Neplatné
Zrušit mazání
Text není vybrán\nevybírejte
formátování
Dopis smazán
Dopis nebyl smazán
Text
Bylo použito formátování
4
Bohatý text
Bylo použito nové formátování
5
Dostupná velikost a formát
hodnoty
Přiložený soubor
Nezadávejte soubor
Soubor není připojen
Zadejte soubor neplatné velikosti
(min< или >max)
Soubor není připojen
Zadejte nepodporovaný soubor
Soubor není připojen
1
Funkce
Odstranění
2
3
6
7
8
Formátování
Příloha
soubor
Systém nepoužívá formátování
Hraniční hodnoty
TECHNIKA LIMITOVANÉ HODNOTYÚkol: Vytvořte testovací případy pro plán evakuace
Úkol: Vytvořte testovací případy pro plán evakuace
0Základní test
Na uklidnění nervů
Negativní test
9999
0
0
99
Nalezení všech párů (viz graf)
V matematice je to kartézský součin:
Evacuation_Plan x Risk_Assesment = ((a,b) | a ∈ Evacuation_Plan, b ∈ Risk_Assessment)
Evacuation_Plan x Risk_Assesment =
{ (-1,-1),
(-1,0), (-1,1),
(-1,50),
(-1,98), (-1,99), (-1,100),
(0,-1),
(0,0),
(0,1),
(0,50),
(0,98),
(0,99),
(0,100),
(1,-1),
(1,0),
(1,1),
(1,50),
(1,98),
(1,99),
(1,100),
(50,-1), (50,0), (50,1), (50,50),
(50,98), (50,99), (50,100),
(98,-1), (98,0), (98,1), (98,50),
(98,98), (98,99), (98,100),
(99,-1), (99,0), (99,1),
(99,50), (99,98), (99,99),
(99,100),
(100,-1), (100,0), (100,1), (100,50), (100,98), (100,99), (100,100),
}
7x7 = 49 kontrol Evakuační_plán = (-1, 0, 1, 50, 98, 99, 100)
Risk_Assessment = (-1, 0, 1, 50, 98, 99, 100)
EP_Type = (standardní, prémiové)
RA_Type = (standardní, prémiové)
Počet případů = 7 * 7 * 2 * 2 = 196
Párové testování
TECHNIKA TESTOVÁNÍ VŠECH PÁRŮÚkol
Datové úložiště (5): PostgreSQL, Oracle, MySQL, JSON, XMLOperační systém (4): Windows 7, 8, 10, OS X 10
RAM (3): 1 024 MB, 4 096 MB, 8 192 MB
HDD (2): SCSI, IDE
Úplné vyhledávání = 5 * 4 * 3 * 2 = 120 možností
Nápady
1. Testujte dvojice hodnot, nikoli vyčerpávající hledání2. Empirický důkaz účinnosti
3. Všechny možnosti párů/ortogonálních masivních technik Práce s ortogonálním
pole
1
2
3
4
5
Data
PostgreSQL
Věštec
MySQL
JSON
XML
OS
Windows 7
Windows 8
Windows 10
OS X 10
BERAN
1 024 MB
4 096 MB
8 192 MB
HDD
SCSI
IDE Práce s ortogonálním
pole
1. Pochopte, jaké a kolik vstupních parametrů:
1
2
3
4
5
Data
PostgreSQL
Věštec
MySQL
JSON
XML
OS
Windows 7
Windows 8
Windows 10
OS X 10
BERAN
1 024 MB
4 096 MB
8 192 MB
HDD
SCSI
IDE
Práce s ortogonálním
pole
1. Pochopte, jaké a kolik vstupních parametrů:
Ukládání dat
OS
BERAN
HDD
Sloupec 5
Sloupec 6
1
1
1
1
1
1
1
2
2
2
2
2
1
3
3
3
3
3
1
4
4
4
4
4
1
5
5
5
5
5
2
1
2
3
4
5
2
2
3
4
5
1
1
2
3
4
5
2
3
4
5
1
2
Data
PostgreSQL
Věštec
MySQL
JSON
XML
2
4
5
1
2
3
OS
Windows 7
Windows 8
Windows 10
OS X 10
2
5
1
2
3
4
3
1
3
5
2
4
BERAN
1 024 MB
4 096 MB
8 192 MB
3
2
4
1
3
5
HDD
SCSI
IDE
3
3
5
2
4
1
3
4
1
3
5
2
3
5
2
4
1
3
4
1
4
2
5
3
4
2
5
3
1
4
4
3
1
4
2
5
4
4
2
5
3
1
4
5
3
1
4
2
5
1
5
4
3
2
5
2
1
5
4
3
5
3
2
1
5
4
5
4
3
2
1
5
5
5
4
3
2
1
2. Vyberte vhodné ortogonální pole – L25(56 ^6)
Práce s ortogonálním
pole
1. Pochopte, jaké a kolik vstupních parametrů:
1
2
3
4
5
Data
PostgreSQL
Věštec
MySQL
JSON
XML
OS
Windows 7
Windows 8
Windows 10
OS X 10
BERAN
1 024 MB
4 096 MB
8 192 MB
HDD
SCSI
IDE
2. Vyberte vhodné ortogonální pole -
3. Sestavení ortogonálního pole
4. Odstraňte nepotřebné SLOUPCE
L25(56^6)
Ukládání dat
OS
BERAN
HDD
1
1
1
1
1
2
2
2
1
3
3
3
1
4
4
4
1
5
5
5
2
1
2
3
2
2
3
4
2
3
4
5
2
4
5
1
2
5
1
2
3
1
3
5
3
2
4
1
3
3
5
2
3
4
1
3
3
5
2
4
4
1
4
2
4
2
5
3
4
3
1
4
4
4
2
5
4
5
3
1
5
1
5
4
5
2
1
5
5
3
2
1
5
4
3
2
5
5
4
3Práce s ortogonálním
pole
1. Pochopte, jaké a kolik vstupních parametrů:
Ukládání dat
OS
BERAN
HDD
1
PostgreSQL
Windows 7
1 024 MB
SCSI
2
PostgreSQL
Windows 8
4 096 MB
IDE
3
PostgreSQL
Windows 10
8 192 MB
SCSI
4
PostgreSQL
OS X 10
1 024 MB
SCSI
5
PostgreSQL
Windows 10
1 024 MB
SCSI
6
Věštec
Windows 7
4 096 MB
SCSI
7
Věštec
Windows 8
8 192 MB
SCSI
1
2
3
4
5
8
Věštec
Windows 10
1 024 MB
SCSI
Data
PostgreSQL
Věštec
MySQL
JSON
XML
9
Věštec
OS X 10
1 024 MB
SCSI
OS
Windows 7
Windows 8
Windows 10
OS X 10
10
Věštec
Windows 10
1 024 MB
IDE
11
MySQL
Windows 7
8 192 MB
SCSI
BERAN
1 024 MB
4 096 MB
8 192 MB
12
MySQL
Windows 8
1 024 MB
SCSI
HDD
SCSI
IDE
13
MySQL
Windows 10
4 096 MB
IDE
14
MySQL
OS X 10
1 024 MB
SCSI
15
MySQL
OS X 10
4 096 MB
SCSI
16
JSON
Windows 7
4 096 MB
IDE
17
JSON
Windows 8
4 096 MB
SCSI
18
JSON
Windows 10
1 024 MB
SCSI
19
JSON
OS X 10
4 096 MB
SCSI
20
JSON
OS X 10
8 192 MB
SCSI
21
XML
Windows 7
4 096 MB
SCSI
22
XML
Windows 8
1 024 MB
SCSI
23
XML
Windows 10
4 096 MB
SCSI
24
XML
OS X 10
8 192 MB
IDE
25
XML
Windows 10
4 096 MB
SCSI
2. Vyberte vhodné ortogonální pole – L25(56 ^6)
3. Sestavení ortogonálního pole
4. Odstraňte nepotřebné SLOUPCE
5. Zadejte hodnoty vstupních parametrů
6. Doplňte prázdná místa + zkontrolujte, zda jsou dvojice relevantní OBRÁZEK
Ukládání dat
OS
BERAN
HDD
1
JSON
OSX_10
4096 MB
SCSI
2
Věštec
Windows7
1024 MB
IDE
3
MySQL
Windows 10
8192 MB
IDE
4
Věštec
Windows8
8192 MB
SCSI
5
JSON
Windows8
1024 MB
IDE
6
JSON
Windows7
8192 MB
SCSI
7
Věštec
Windows 10
1024 MB
SCSI
8
XML
Windows7
4096 MB
IDE
9
MySQL
OSX_10
1024 MB
SCSI
10
JSON
Windows 10
4096 MB
SCSI
11
XML
Windows 10
8192 MB
SCSI
12
PostgreSQL
Windows8
4096 MB
SCSI
13
MySQL
Windows7
4096 MB
SCSI
14
XML
Windows8
1024 MB
IDE
15
PostgreSQL
Windows7
1024 MB
IDE
16
XML
OSX_10
8192 MB
IDE
17
PostgreSQL
Windows 10
8192 MB
SCSI
18
MySQL
Windows8
4096 MB
IDE
19
PostgreSQL
OSX_10
8192 MB
IDE
20
Věštec
OSX_10
4096 MB
SCSI
105*16*2*4*5*2 = 134 400
12
3
4
5
…
105
Podrobit
arabština
Dějiny umění
Biologie
podnikání
Studie
Chemie
…
EAL
Úroveň školy (16)
Základní
Střední
Vysoký
Škola Široká
Vysoká/Střední
…
Pravděpodobnost
Určitý
Orientační
Zaměstnanost
Typ
Plný
Část
Nahradit
Dočasný
Délka smlouvy
1
2
3
4
Průvodní dopis
Kapitola představuje pojem kvality, popisuje proces testování a pojednává o tom, jak souvisí kvalita a testování s různými výrobními procesy. Je prezentován tradiční pohled na testování jako mechanismus pro hodnocení kvality produktu a také popisuje, jak testování pomáhá posílit a posílit architekturu na počátku vývojového cyklu.
Cíl
Účelem testování je posoudit kvalitu produktu. To znamená nejen hodnotit konečný produkt, ale také hodnotit architekturu od raných fází procesu až po finální dodávku produktu zákazníkům. zahrnuje následující.
Kontrola interakcí komponent
Kontrola správné integrace komponent
Kontrola správnosti realizace všech požadavků
Zjištění závad a přijetí opatření nezbytných k jejich odstranění dříve
nasazení softwaru
Kvalitní
Standardní použití termínu kvalitní zahrnuje mnoho věcí: toto slovo zpravidla označuje nepřítomnost vad a (co je mnohem důležitější!) soulad se zamýšleným účelem; S pojmem kvalita spojujeme to, co od produktu potřebujeme. Výrobek (nebo jeho součást) nemusí být vadný, ale pokud neplní to, co potřebujeme, je stejně k ničemu jako vadný výrobek. Hlavním účelem testování je zhodnotit kvalitu finálního produktu a také zhodnotit kvalitu komponent, které jej tvoří, a architektury, která určuje podobu těchto komponent. To má zajistit, že produkt je
Kapitola 12. G67
splňuje nebo překračuje určité požadavky (posuzováno podle opatření a kritérií přijatelnosti).
Kvalitu produktu nelze plně posoudit samostatně; software je vyvíjen organizací pomocí procesu, takže špatná kvalita může být způsobena špatným procesem nebo procesem, který je obtížné dodržet. V důsledku toho hodnocení kvality často nezohledňuje pouze kvalitu samotného produktu, ale také organizační faktory a kvalitu procesu.
Kdo odpovídá za kvalitu produktu
Všichni členové projektového týmu jsou zodpovědní za výrobu kvalitního produktu. Pokud kvalita nebyla původně zabudována do produktu, pak ji již nelze „přidat později“ provedením některých aktivních akcí k zaručení kvality.
Úkolem testování není záruka kvalita a hodnotit a zároveň poskytuje zpětnou vazbu k řešení problémů s kvalitou za rozumné náklady a čas. Úkolem testera je hodnotit kvalitu a poskytovat zpětnou vazbu a úkolem projektového týmu je vytvářet artefakty, které splňují požadavky a parametry kvality.
Testování v iterativním životním cyklu
Testování není samostatnou činností ani fází projektu, ve které se provádí hodnocení kvality. Pokud vývojáři potřebují včasnou zpětnou vazbu ohledně problémů s kvalitou produktu, pak by testování mělo být prováděno během celého životního cyklu: lze otestovat funkčnost prvních prototypů; stabilita, pokrytí a výkon architektury (špatná rozhodnutí můžete vždy opravit); Navíc si můžete výsledný produkt vyzkoušet a posoudit jeho připravenost k předání do rukou zákazníků. Existuje obecný názor, že testování je konečnou kontrolou globální výkonnosti; Tato situace však postrádá hlavní výhodu testování: možnost poskytnout zpětnou vazbu, dokud je ještě čas (a zdroje) k provedení potřebné akce.
Klasifikace testů
K posouzení kvality produktu jsou nutné různé typy testů. Pro klasifikaci testů lze použít následující charakteristiky.
Testovaný parametr kvality - jaký parametr kvality se testuje?
Fáze testování - bodu životního cyklu, ve kterém se provádí
testování
Typ testu- konkrétní úkol jednotlivého testu, obvykle s jedním spojený
parametr kvality
Kvalitní parametry
Existují vzory, které umožňují identifikovat problémy související s kvalitou (zpravidla téměř všechny systémy mají stejný typ problémů). V důsledku toho by se u každého produktu mělo posuzovat následující.
Spolehlivost
Software „odolává“ výskytu chyb během provádění: nedochází k žádným pádům, zamrzání, únikům paměti atd.
Funkčnost
Software implementuje požadované případy použití nebo má očekávané chování.
I Produktivita
Software a systém fungují, pohotově reagují na předem určené události a nadále fungují přijatelně za reálných provozních podmínek (např. velké zatížení, prodloužené doby provozu atd.). Testování výkonu se zaměřuje na poskytování požadované funkčnosti při uspokojování nefunkčních požadavků systému.
Každý ze specifikovaných parametrů kvality vyžaduje provedení jednoho nebo více testů v jedné nebo více testovacích fázích. Kromě toho existují další kvalitativní parametry, jejichž posouzení může být spíše subjektivní: snadnost použití, rozšiřitelnost, flexibilita atd. Kvalitativní posouzení těchto parametrů kvality by mělo být prováděno při každé příležitosti.
Testovací fáze
Testování by nemělo být považováno za samostatnou činnost prováděnou zcela najednou. Testování se provádí v různých fázích vývoje softwaru a je zaměřeno na kontrolu různých objektů (cílů testování). Fáze testování postupují od testování malých prvků systému, jako jsou komponenty (testování jednotek) až po testování. testování hotových systémů (testování systému). Uveďme stávající fáze testování a jejich úkoly.
Testování jednotek
Testuje se minimum prvků systému. Doba testování se zpravidla shoduje s dobou implementace prvků.
Integrální testování
Testují se integrované jednotky (nebo komponenty nebo subsystémy).
Testování systému
Testují se hotové aplikace a systémy (skládající se z jedné nebo více aplikací).
Přijímací zkoušky
Hotová aplikace (nebo systém) je testována koncovými uživateli (nebo zástupci koncových uživatelů). Účel testování: zjistit připravenost produktu k nasazení.
Je třeba mít na paměti, že v různých obdobích životního cyklu probíhají testovací fáze s různým důrazem. Prototyp raného konceptu, používaný ve fázi výzkumu k vyhodnocení životaschopnosti vize produktu, bude podroben různým akceptačním testům. Architektonický prototyp vyvinutý během fáze zdokonalování plánu bude podroben integrálnímu a systémovému testování navrženému k ověření architektonické integrity a výkonu klíčových architektonických prvků, ačkoli v současné době je velká část systémového kódu ve formě náhradních programů. Testovací fáze nejsou předdefinované "fáze", které se provádějí postupně, blíže k nim konec projekt; naproti tomu v iterativním životním cyklu začíná testování brzy a probíhá často.
Typy testů
Existuje mnoho typů testů, z nichž každý se zaměřuje na konkrétní cíl testování a testuje pouze jeden aspekt kvality softwaru. Protože testování probíhá v průběhu celého životního cyklu, testovaný software může být jeden kus kódu, integrální jednotka nebo kompletní aplikace (nebo systém). Jmenujme nejběžnější typy testů.
Certifikační test
Porovnává výkon testovacího cíle a některého standardního objektu, jako je stávající software, nebo hodnotí výkon podle nějakého systému měření.
Test konfigurace
Kontroluje přijatelné fungování testovacího cíle v různých konfiguracích (softwaru nebo hardwaru).
Funkční testy
Kontroluje se obecně fungování cílového testovacího objektu, tzn. řádné provedení požadovaných precedentů.
Instalační testy
Ověřuje, že je cíl testu nainstalován správně a lze jej úspěšně nainstalovat v různých konfiguracích nebo za různých podmínek (například nedostatek místa na disku).
Testování integrity
Kontroluje se spolehlivost cílového testovacího objektu, jeho stabilita a odolnost vůči chybám při provádění.
Zátěžový test
Ověřuje, že výkon testovacího cíle je přijatelný za různých provozních podmínek (včetně různého počtu uživatelů, transakcí atd.) s pevnou konfigurací.
Výkonnostní testy
Ověřuje přijatelný výkon testovacího cíle v různých konfiguracích při zachování konstantních provozních charakteristik.
Testování tvrdého režimu
Ověřuje přijatelný výkon testovacího cíle v nouzových nebo kritických podmínkách, jako jsou omezené zdroje nebo extrémně velký počet uživatelů.
Regresní testování
Regresní testování je testovací technika, při které jsou dříve provedené testy znovu provedeny na nové verzi cílového objektu. Cílem tohoto typu testování je zajistit, aby se kvalita cílového objektu nezhoršila (regrese), když jsou k tomuto objektu přidány nové funkce. Regresní testování je nutné pro
Maximální včasné odhalení závad;
Kontrola, zda změny kódu nezavádějí nové vady nebo
obnovit staré.
Regresní testování může zahrnovat spouštění jakéhokoli typu testu znovu a znovu. Obvykle se takové testování provádí v každé iteraci a skládá se z opětovného spuštění testů provedených v předchozích iteracích.
Testovací model
Testovací model - je to reprezentace toho, co se bude testovat a jak bude testování probíhat. Tento model představuje modely návrhu a implementace, zobrazující skutečné testy a cílové parametry související s testem. Testovací model zahrnuje sadu kontrolních úloh, testovacích procedur, testovacích scénářů a očekávaných výsledků testů a také popis jejich vztahu.
Pojďme se blíže podívat na součásti testovacího modelu.
Kontrolní úkoly
Sada testovacích dat, podmínek provádění testu a očekávaných výsledků vyvinutých pro konkrétní testovací úlohu. Kontrolní úlohy lze určit z precedentů, projektové dokumentace nebo programového kódu. Kontrolní úloha může být implementována pomocí jedné nebo více testovacích metod.
Testovací metody
Soubor podrobných pokynů pro nastavení a provádění kontrolních úkolů a vyhodnocování získaných výsledků. Pomocí jedné testovací metody lze implementovat jednu nebo několik řídicích úloh. Testovací metodologii lze také použít k implementaci pouze části testovacího úkolu, jako je alternativní tok případu použití.
Testovací scénáře
Pokyny, které automatizují implementaci části nebo celého zkušebního postupu (nebo zkušebních postupů).
Testovací třídy a komponenty
Třídy a komponenty, které implementují testovací projekty, včetně ovladačů a náhradních programů.
Testovací interakce
Interakce jsou reprezentovány ve formě interakčního diagramu nebo sekvenčního diagramu a odrážejí časově uspořádaný tok zpráv mezi testovacími komponentami a testovacím cílem, ke kterému dochází během testování.
Poznámky
Textové informace popisující omezení nebo dodatečné informace použité v testovacím modelu. Poznámky lze připojit k jakémukoli prvku testovacího modelu.
Hlavní prvky testovacího modelu a jejich vztahy jsou znázorněny na Obr. 12.1.
Rýže. 12.1. Testovací úlohy, testovací metody a testovací scénáře pro ATM
Účinkující a artefakty
Do testovacího procesu jsou zapojeni dva hlavní interpreti.
Testovací vývojář zodpovědný za plánování, vývoj, implementaci testů a
testování hodnocení. Mezi jeho povinnosti patří vytváření plánu testování a modelu
vývoj, implementace testovacích metod a vyhodnocení testovacího pokrytí, výsledků
tats a test účinnosti.
Tester Zodpovědnost za provádění testování systému. Ve své povinnosti
zahrnuje nastavení a spuštění testů, hodnocení výkonu testu,
zotavení z chyb, vyhodnocení výsledků testů a registrace
zjištěné závady.
Pokud je pro podporu testování potřeba specifický kód (například musí být vyvinuty ovladače nebo náhradní programy), pak musí proces zahrnovat také vývojáře a návrháře v rolích podobných těm, které jsou definovány v kapitolách 10 a 11.
Účinkující a artefakty testovacího procesu jsou uvedeny na Obr. 12.2. Podívejme se na klíčové artefakty tohoto procesu.
zkušební plán, obsahující informace o cílech a cílech testování.
Plán testování určuje, které strategie budou použity a které
k provedení testování jsou potřeba zdroje.
Testovací model popsané dříve.
Výsledky testů a data shromážděná během provádění testu.
Model pracovní zátěže pro výkonnostní testy; to definuje
proměnné a jejich hodnoty používané v různých operacích
testy pro modelování nebo simulaci charakteristik vnějších
interpreti, funkce prováděné koncovými uživateli, objem
tyto funkce a zátěž vytvořená těmito funkcemi.
vady, získané jako výsledek „neúspěšných testů“ jsou jedním z
typy žádostí o změnu (viz kapitola 13).
Kromě uvedených artefaktů musí být při vývoji softwarové podpory pro test vytvořeny následující artefakty.
Testovací balíčky a třídy
Subsystémy a testovací komponenty
Vyhodnocení závěrečného testu se používá jako součást hodnocení iterace projektu a pravidelného vyhodnocování stavu (viz kapitola 7 „Pracovní postup projektového řízení“).
Proces
Typický testovací proces, jeho hlavní prvky a závislosti mezi nimi jsou znázorněny na Obr. 12.3.
Příprava na testování
Účelem tohoto prvku pracovního postupu je definovat a popsat testování, které se bude provádět. K tomu je vytvořen testovací plán, který obsahuje testovací požadavky a testovací strategie. Může být vyvinut jeden plán testování, který popisuje všechny typy testů, které mají být provedeny, nebo může být vytvořen samostatný plán pro každý typ testu. Příprava testu probíhá tak, aby testovací činnosti byly měřitelné a zvládnutelné.
Vývoj testu
Účelem tohoto prvku pracovního postupu je definovat, popsat a vytvořit testovací model a jeho přidružené artefakty. Testovací projekt je vytvořen, aby bylo zajištěno, že software používaný pro testování je správně organizován a splňuje jeho specifikované požadavky. Během tohoto prvku pracovního postupu návrhář testu analyzuje cíl testu, vyvíjí testovací model a (v případě testování výkonu) model pracovního zatížení. Návrh testu transformuje případy použití na úkoly akceptace a kontroly systému, které pak řídí návrh softwarových prvků, které provádějí testování.
Zkušební implementace
Účelem tohoto procesního prvku je implementovat testovací postupy definované v části Příprava na testování. Testovací metody jsou vytvářeny zpravidla v prostředí automatizace testování nebo v programovacím prostředí. Výsledným artefaktem je elektronická verze testovací procedury, nazývaná testovací skript.
Pokud je pro podporu nebo provádění testování potřeba specifický kód (musí být například vyvinuty testovací nástroje, ovladače nebo náhradní programy), pak se do práce na jeho vytvoření podílí vývojář, návrhář a vývojář testu.
Provádění testů ve fázi integrálního testování
Účelem tohoto prvku pracovního postupu je zajistit správné zkombinování součástí systému a správné chování kombinace. Systémový integrátor je zodpovědný za sestavení a kombinování systému do přibývajících funkčních bloků. Pro každý takový blok se testují přidané funkce, provádějí se regresní testy a načítají se výsledky testů.
Během jedné iterace je integrální testování provedeno několikrát, dokud není celý systém úspěšně integrován (určeno cílem iterace).
Provádění testů během fáze testování systému
Účelem tohoto prvku technologického procesu je zajistit správné fungování celého systému. Systémový integrátor sestavuje a integruje systémy do rostoucích funkčních celků. Každý prvek přidán
musí projít testem funkčnosti; kromě toho jsou provedeny všechny dříve provedené testy na každém návrhu (regresní testy).
Během jedné iterace se systém testuje několikrát, dokud není celý systém úspěšně integrován (určeno cílem iterace) a nejsou splněna kritéria úspěšnosti testu nebo dokončení systému.
Vyhodnocení testu
Účelem tohoto prvku technologického procesu je vyvinout a vyhodnotit kvantitativní zkušební opatření, která umožňují určit kvalitu cílového zkušebního objektu a zkušebního procesu. Toho je dosaženo kontrolou a vyhodnocením výsledků testů, identifikací a záznamem požadavků na změny a výpočtem klíčových testovacích opatření.
Instrumentální podpora
Vzhledem k tomu, že testování je iterativní úsilí prováděné během vývojového cyklu, je zapotřebí podpora nástrojů, aby bylo zajištěno, že testování začne brzy a bude se objevovat často; Ruční testování není dostatečně efektivní a neumožňuje důkladně vyhodnotit vyvíjený software. Tento poslední bod platí zejména pro testování výkonu a zátěže, kde je třeba simulovat zátěž a shromáždit značné množství dat.
Rational Software Corporation nabízí následující nástroje na podporu automatizace testování a testovacího procesu obecně.
TestStudio je sada nástrojů, které podporují provádění
provádění testů a vyhodnocování výsledků testů. Nástroje TestStudio umožňují
tester pro vytváření testovacích skriptů s grafickým rozhraním
tvář uživatele. Tyto scénáře se zaměřují na takové parametry
vlastnosti, jako je spolehlivost, funkce a výkon. Součástí sady
TestStudio obsahuje následující nástroje.
Robot podporuje provádění testů a umožňuje testerům vytvářet a reprodukovat testovací skripty s grafickým uživatelským rozhraním a porovnávat získané výsledky a očekávané výsledky.
LogViewer zachycuje výsledky testů a poskytuje zprávu pro vyhodnocení výkonu testu.
TestManager podporuje plánování, návrh a vyhodnocování testů, umožňuje určit pokrytí testů a generuje zprávy o stavu testů.
TestFactory podporuje testování spolehlivosti automatickým generováním a spouštěním testovacích skriptů. Tento nástroj navíc programově hlásí testovací pokrytí.
PerformanceStudio spouští virtuální uživatelské testovací skripty
těla pomocí výkonnostních testů a některých funkcí
onální testy.
DevelopmentStudio podporuje pracovní postup testování a
obsahuje následující nástroje.
Rational Purify k izolaci obtížně dohledatelných chyb za běhu.
Rational PureCoverage* k identifikaci oblastí kódu, které selžou při testování a provádění analýzy pokrytí kódu.
Rational Quantify* k identifikaci úryvků kódu omezujících výkon.
Navíc Rational Unified Process nabízí nástrojové mentory pro většinu těchto nástrojů.
Resumé
Testování umožňuje vyhodnotit kvalitu vyrobeného produktu.
Testování je iterativní proces prováděný ve všech fázích života.
dlouhý cyklus; umožňuje včasnou organizaci zvrátit komunikace v otázkách kvality
va, který se používá ke zlepšení produktu během jeho vývoje a konstrukce
nia. Testování by nemělo být prováděno pouze na konci životního cyklu
(přijmout nebo odmítnout konečný produkt); musí to být neoddělitelné
nedílnou součástí mechanismu konstantní zpětné vazby.
Každý je zodpovědný za kvalitu. Kvalitu nemůže zavést zkušební orgán
ní. Testování je zaměřeno pouze na hodnocení kvality a organizaci
včasná zpětná vazba ke zlepšení kvality systému.
Nabízí mechanismus zpětné vazby,
umožňuje měřit kvalitu a identifikovat vady. Provedeno testování
probíhá v raných fázích projektu – začíná plánováním testů a některých
druhé hodnocení (někdy prováděné i ve fázi výzkumu) a pokračovalo
roste s postupem projektu.
Anotace: Základní koncepty testování. Fáze a fáze testování. Typy testů. Testem řízený vývoj
Zavedení
Testování je jednou z nejrozšířenějších metod zajištění kvality vývoj softwaru.
Z technického hlediska Z hlediska testování spočívá testování ve spuštění aplikace na určité sadě zdrojových dat a porovnání získaných výsledků s dříve známými (referenčními) výsledky za účelem zjištění souladu různých vlastností a charakteristik aplikace s objednanými vlastnostmi. Jako jedna z hlavních fází procesu vývoje softwarového produktu (návrh aplikací – vývoj kódu – testování) se testování vyznačuje poměrně velkým podílem na celkové náročnosti vývoje produktu. Všeobecně známý odhad rozložení pracovní náročnosti mezi fázemi vytváření softwarového produktu je: 40% -20% -40%.
Z matematického hlediska testování lze považovat za výklad určitého vzorce a testování jeho pravdivosti na určitých množinách. Program může být skutečně reprezentován vzorcem f = f1* f2* f3*... * fn, kde f1, f 2, ... fn jsou operátory programovacího jazyka a jejich superpozice je program.
Pravdivost takového vzorce lze doložit pomocí formálního přístupu – to znamená, že požadované vzorce a výroky (věty) jsou odvozeny z původních axiomových vzorců pomocí formálních postupů (odvozovacích pravidel). Výhodou formálního přístupu je, že se vyhýbá přístupu k nekonečnému rozsahu hodnot a pracuje pouze s konečnou sadou symbolů v každém kroku důkazu. Často jsou však konstrukce formálního systému a formalizace samotného programu velmi složité procesy. Alternativním přístupem k ospravedlnění pravdy je interpretace.
Interpretační přístup se používá při dosazování konstant do vzorců a následné interpretaci vzorců jako smysluplných výroků v prvcích množin konkrétních hodnot. Pravdivost interpretovaných vzorců je kontrolována na konečných množinách možných hodnot. Složitost přístupu spočívá v tom, že počet kombinací hodnot je často velmi velký a samotné kombinace se skládají z velkého počtu hodnot - což znamená, že zpracování všech kombinací bude vyžadovat značné zdroje. Existují různé metody, jak snížit počet kombinací, které je třeba zvážit. Hlavní testovací problém- stanovení dostatečnosti souboru testů pro pravdivost závěru o správnosti implementace programu a také nalezení souboru testů, které tuto vlastnost mají.
Statické testování Pomocí metod formální analýzy, bez spuštění testovaného programu, identifikuje nesprávné konstrukce nebo nesprávné vztahy mezi objekty programu (chyby formálních úloh) pomocí speciálních nástrojů pro monitorování kódu - CodeChecker.
Dynamické testování(samotné testování) identifikuje chyby pouze v běžícím programu pomocí speciálních nástrojů automatizace testování- Testbed nebo Testbench.
Základy testování
Třídy testovacích kritérií
Strukturální kritéria využívat informace o struktuře programu (tzv. kritéria „bílé skříňky“), která předpokládá znalost zdrojového textu programu nebo specifikace programu ve formě grafu řízení toku. Strukturální kritéria jsou založeny na hlavních prvcích řídicího grafu - operátory, větve a cesty.
- Podmínka kritéria testování příkazu (kritérium C0) - sada testů celkem musí zajistit, aby každý příkaz prošel alespoň jednou.
- Podmínkou kritéria testování větve (kritérium C1) je, že soubor testů dohromady musí zajistit, aby každá větev prošla alespoň jednou.
- Podmínka kritéria pro testovací cesty (kritérium C2) - sada testů v součtu musí zajistit, že každá cesta projde alespoň 1krát.
Funkční kritéria jsou formulovány v popisu požadavků na softwarový produkt (tzv. kritéria „černé skříňky“) Zajišťují především kontrolu nad mírou plnění požadavků zákazníka v softwarovém produktu. Jelikož jsou požadavky formulovány pro produkt jako celek, odrážejí interakci testované aplikace s prostředím. Problémem funkčního testování je především pracnost; Faktem je, že dokumenty zaznamenávající požadavky na softwarový produkt jsou zpravidla značně objemné, odpovídající ověření však musí být komplexní.
Rozlišují se tyto speciální typy: funkční kritéria:
- položky specifikace testování;
- testování tříd vstupních dat;
- testování pravidel - sada testů dohromady by měla zajistit ověření každého pravidla, pokud jsou vstupní a výstupní hodnoty popsány sadou pravidel nějaké gramatiky;
- testování výstupních tříd;
- Funkční testování;
- kombinovaná kritéria pro programy a specifikace. Stochastická testovací kritéria formulováno v pojmech
kontrola přítomnosti specifikovaných vlastností v testované aplikaci, pomocí testování určité statistické hypotézy. Používá se při testování složitých softwarových systémů – kdy má soubor deterministických testů (X, Y) obrovskou sílu.
Kritéria mutace jsou zaměřeny na kontrolu vlastností softwarového produktu založeného na přístupu Monte Carlo.
Metoda testování mutací spočívá v zavádění mutací (malých chyb) do vyvinutého programu P, tzn. uměle vytvořit mutantní programy P1, P2... . Poté se program P a jeho mutanty testují na stejné testovací sadě (X, Y).
Pokud je potvrzena správnost programu P na sadě (X, Y) a navíc jsou identifikovány všechny chyby vnesené do mutantních programů, pak testovací sada (X, Y) odpovídá kritériu mutace a program testovaný je prohlášen za správný. Pokud některé mutanty neodhalily všechny mutace, pak je nutné rozšířit testovací sadu (X, Y) a pokračovat v testování.
Testovací fáze
Při testování jsou obvykle tři fáze: jednotka, integrace a testování systému.
Testování jednotek- jedná se o testování programu na úrovni jednotlivých modulů, funkcí nebo tříd. Účelem unit testování je identifikovat chyby lokalizované v modulu při implementaci algoritmů a také určit stupeň připravenosti systému na přechod na další úroveň vývoje a testování. Testování jednotek se provádí podle principu „bílé skříňky“, to znamená, že je založeno na znalosti vnitřní struktury programu a často zahrnuje určité metody analýzy pokrytí kódu.
Integrační testování je testování části systému sestávajícího ze dvou nebo více modulů. Hlavním úkolem integračního testování je hledání defektů spojených s chybami při implementaci a interpretaci interakce rozhraní mezi moduly. Hlavním rozdílem mezi jednotkovým a integračním testováním jsou cíle, tedy typy detekovaných defektů, které zase určují strategii výběru vstupních dat a metod analýzy.
Testování systému se kvalitativně liší od integrační a modulární úrovně. Posuzuje testovaný systém jako celek a funguje na úrovni uživatelských rozhraní. Hlavní úkol testování systému spočívá v identifikaci závad spojených s provozem systému jako celku, jako je nesprávné použití systémových prostředků, nezamýšlené kombinace dat na úrovni uživatele, nekompatibilita s prostředím, scénáře nezamýšleného použití, chybějící nebo nesprávná funkčnost, nepříjemnosti při používání a podobně.
Testování systému se provádí na projektu jako celku metodou „černé skříňky“. Na struktuře programu nezáleží, k testování jsou dostupné pouze uživateli viditelné vstupy a výstupy. Kódy a uživatelská dokumentace podléhají testování.
Navíc zvýrazňují regresní testování- testovací cyklus, který se provádí při provádění změn během fáze testování systému nebo údržby produktu. Hlavním problémem regresního testování je volba mezi úplným a částečným přezkoušení a doplňování testovacích sad. S částečným přezkoušení Sledují se pouze ty části projektu, které jsou spojeny se změněnými komponentami.
Testovací fáze
Každý testovací fáze zahrnuje následující kroky:
- Stanovení cílů(požadavky na testování), včetně následující specifikace: jaké části systému budou testovány, jaké aspekty jejich provozu budou vybrány pro ověření, jaká je požadovaná kvalita atd.
- Plánování: vytvoření plánu (plánu) pro vývoj testů pro každý testovaný subsystém; posouzení požadovaných lidských, softwarových a hardwarových zdrojů; vývoj harmonogramu zkušebního cyklu. Je důležité si uvědomit, že plán testování musí být v souladu s plánem vývoje vytvářeného systému.
- Vývoj testu(testovací kód pro testovaný systém).
- Průběžné testy: implementace testovacích cyklů.
- Analýza výsledků.
Testovací cyklus je cyklus provádění testu, který zahrnuje fáze 4 a 5 testovacího procesu. Testovací cyklus se skládá ze spuštění vyvinutých testů na nějaké jedinečně definované části systému (stav kódu vyvíjeného systému). Obvykle se taková část systému nazývá vytvořit.
Testovací plán- jedná se o dokument nebo soubor dokumentů, který obsahuje testovací zdroje, seznam funkcí a subsystémů, které mají být testovány, testovací strategie, plánování testovacích cyklů, fixování testovací konfigurace (složení a specifické parametry hardwarového a softwarového prostředí), definování seznamu testovacích metrik, které je třeba shromáždit a analyzovat během testovacího cyklu (například metriky hodnotící míru pokrytí soubor požadavků testem).
Testy jsou vyvíjeny na základě specifikací, a to jak ručně, tak pomocí automatizovaných nástrojů. Kromě samotného kódu zahrnuje pojem „test“ jeho obecný popis a podrobný popis kroků provedených v tomto testu.
K posouzení kvality testů se používají různé metriky související s počtem nalezených defektů, pokrytím kódu, funkčními požadavky a různými scénáři.
Všechny informace o závadách zjištěných během testování (typ, podmínky detekce, důvod, podmínky nápravy, čas strávený nápravou) se zapisují do databáze závad.
Informace o testovacím plánu, testech a defektech se používají na konci každého testovacího cyklu k vygenerování zkušební protokol a nastavení testovacího systému pro další iteraci.
Typy testů
Testovací plán identifikuje a dokumentuje různé typy testů.
Typy testování podle typu subsystému nebo produktu jsou následující:
- Testování hlavní funkčnosti, kdy se testuje samotný systém, který je hlavním vyráběným produktem.
- Testování instalace zahrnuje testování počátečních instalačních skriptů systému, skriptů pro reinstalaci (nad existující kopii), testování odinstalace, testování instalace za přítomnosti chyb v nainstalovaném balíčku, v prostředí nebo ve skriptu atd.
- Testování uživatelské dokumentace zahrnuje kontrolu úplnosti a srozumitelnosti popisu pravidel a vlastností používání produktu, přítomnosti popisu všech scénářů a funkčnosti, syntaxe a gramatiky jazyka, funkčnosti příkladů atd.
Typy testování na základě způsobu výběru vstupních hodnot:
- Funkční testování, které kontroluje:
- pokrývající funkční požadavky;
- Pokrytí případů použití.
- Zátěžové testování, které testuje extrémní podmínky použití produktu.
- Hraniční testování.
- Testování výkonu.
- Testování shody s normami.
- Testování kompatibility s jinými softwarovými a hardwarovými systémy.
- Testování práce s prostředím.
- Testování práce na konkrétní platformě.
Testem řízený vývoj
Podívejme se na testovací přístup mírně odlišný od výše uvedeného. Test Driven Development (TDD) je proces vývoje softwaru, který zahrnuje psaní a automatizaci jednotkových testů před napsáním odpovídajících tříd nebo modulů. To zajišťuje, že všechny odpovědnosti jakéhokoli softwaru jsou definovány ještě před tím, než jsou zakódovány.
TDD specifikuje následující pořadí programovacích kroků:
- Červená - napište malý test, který nefunguje a možná se ani nezkompiluje.
- Zelená - udělejte zkušební provoz co nejrychleji, bez obav o správnost návrhu a čistotu kódu. Napište jen tolik kódu, aby test fungoval.
- Refaktoring – Odstraňte z kódu, který píšete, veškerou duplicitu.
- Jakmile si vývojáři osvojí TDD, zjistí, že píší podstatně více testů než dříve a postupují vpřed po malých krocích, které se dříve mohly zdát zbytečné.
Jakmile programátor provede testovací práci a může si být jistý, že tato část funkčnosti je pokryta, provede druhý testovací běh, pak třetí, pak čtvrtý atd. Čím složitější je problém, kterému programátor čelí, tím menší je oblast funkčnosti, kterou musí každý test pokrýt. Výsledkem je 100% pokrytí kódem unit testy, čehož zpravidla nelze dosáhnout klasickým přístupem k testování.
Určitě existují problémy, které nelze (alespoň v tuto chvíli) vyřešit pouze testy. TDD zejména neumožňuje mechanickou demonstraci adekvátnosti vyvinutého kódu v oblastech bezpečnosti dat a interakce mezi procesy. Zabezpečení je samozřejmě založeno na kódu, který musí být bez závad, ale je také založen na lidské účasti na postupech ochrany dat. Jemné problémy, které vznikají v oblasti komunikace mezi procesy, nelze s jistotou reprodukovat pouhým spuštěním nějakého kódu.
Výsledky
Čím aktivněji se vyvíjejí nové informační systémy S tím, jak se architektury stávají složitějšími a vyvíjejí se nové technologie, nabývá na důležitosti testovací proces. Vzniká stále více webových a mobilních aplikací. Testování takových systémů je mnohem obtížnější než jednouživatelské programy pro domácí PC. Tyto typy systémů vyžadují účinné algoritmy pro automatizaci testování. Kromě toho je relevantní úkol otestovat bezpečnost informačních systémů ve všech jejích projevech. Videoherní průmysl také potřebuje nové přístupy k testování.
Testování provází téměř celý vývojový proces, včetně nejranějších fází. Stále je zapotřebí zlepšit technologii pro testování specifikací a požadavků. Aktuálním úkolem je vyvíjet testy, které otestují proces vývoje, obchodní požadavky a cíle celé organizace. Hovoříme o vývoji efektivnějších testů, které pokrývají širokou škálu charakteristik informačního systému.
Kromě toho pokračuje výzkum v oblasti testů zaměřených na konkrétní model vývoje (vodopád, spirála) nebo konkrétní programovací paradigma. Testování založené na agentech je například navrženo pro testování systémů orientovaných na komponenty. Pro testování aktivních Java appletů se navrhuje použít neuronové sítě. Pro testování agentů existujících na webu (robotů, pavouků) se navrhuje používat znalostní systémy.
Navzdory značné jistotě testovacího procesu a úplné automatizaci mnoha jeho fází tak zůstává mnoho oblastí pro výzkum a praktickou práci.
Tradiční přístup k automatizovaným testům vypadá asi takto – autor testu prostuduje testovaný systém a poté ručně zapíše každý jednotlivý skript, aby testovaný systém otestoval. Někdo by zde mohl napsat hrdé slovo „handcrafted“, ale já tomu říkám „handjob“. Je to proto, že obvykle tento přístup k vytváření a psaní testů trpí dvěma problémy:
- „Padox pesticidů“ popsaný Borisem Beizerem v roce 1990. Spočívá v tom, že testy jsou stále méně účinné při odhalování chyb, protože chyby, které byly tyto testy napsány, aby detekovaly, již byly nalezeny a opraveny. Pokud se tak nestane, vyvstávají vážné otázky týkající se napsaného kódu a pracovních procesů.
- Testy jsou statické a obtížně se mění, zatímco testovaný systém má tendenci se neustále vyvíjet, získávat nové funkce a měnit chování starých. A testy je třeba změnit pokaždé, když nějaká funkce změní vzhled programu nebo jeho chování. A jak roste složitost aktualizací testů, je stále obtížnější ospravedlnit obrovské náklady na údržbu testů.
Model-Based Testing tyto problémy téměř úplně ignoruje, protože testy jsou vytvářeny automaticky z přesného aplikačního modelu. To značně zjednodušuje jak podporu stávajících, tak generování nových, mimořádně užitečných a flexibilních testů.
co je to model?
Model je popis testovaného systému. Formální specifikace bude stačit. Model by měl být mnohem jednodušší než popisovaný systém a nějakým způsobem nám pomoci pochopit a předvídat chování testovaného produktu.
Typicky se jako model používá buď stavový graf, nebo nějaký druh konečného automatu. Současně se stavový graf používá při testování již třetí desetiletí k reprezentaci testovaného softwaru a návrhu testu. Můžete si přečíst více o této technice návrhu testu . Nebo ještě lépe v celé hromadě knih o testování, které vyšly za posledních 25 let.
Ve zkratce to lze popsat takto: testovaný software začne v nějakém stavu fungovat („hlavní stránka je otevřená“), přijme nějaký uživatelský vstup („podívat se na fotky koťat“) a v závislosti na tomto vstupu se pohybuje do nového stavu („objevilo se album s fotkami koťat“). Neustále používáme modely, abychom pochopili chování části softwaru, se kterou pracujeme („Hmm... zde a dělám tohle Tento pak budu venku tam"). Ano, obecně lze veškeré testování považovat za pohyb testeru různými stavy systému a kontrolu, zda tyto pohyby probíhají správně (co znamená „správně" je samostatné téma, takže to prozatím vynecháme). .
Co je testování založené na modelu?
Je to poměrně stará myšlenka používat formálně popsané modely, aby bylo testování softwaru levnější a jednodušší. Samotné testování založené na modelu je takovou „pokročilou“ testovací technikou prostřednictvím „černé skříňky“. Oproti tradičním metodám má řadu bonusů:
- Se sestavováním modelu můžete začít ještě dříve, než se objeví první řádky kódu
- Modelování zahrnuje důkladnou práci na specifikaci a architektuře vyvíjeného softwaru, což nám zpravidla umožňuje zbavit se zásadních problémů a triviálních nesrovnalostí v raných fázích.
- Model bude obsahovat informace, které lze znovu použít pro budoucí potřeby testování, i když se specifikace změní
- Údržba modelu je mnohem snazší než obrovská hromada nesourodých testů
A co je nejdůležitější, formálně popsané modely v kombinaci se základy teorie grafů pomáhají snadno a bez námahy generovat stovky testů.
Fanoušek Agile s orlíma očima by mohl zvolat "hej! máme BDD a pokrývá první tři body a je to také specifikace!" Odpovím „nic takového – vaše příklady se stanou běžnou specifikací, až když bude možné krále Shaka Zulu považovat za specifikaci pro celé lidstvo“.
Nyní nechme debatu stranou a podívejme se, jak pomocí teorie grafů extrahovat z modelu to, co potřebujete pro testy.
Krátký vzdělávací program o teorii grafů
Teorie grafů vznikla v roce 1736 ve starém pruském městě Köningsberg. Město stálo na dvou březích řeky a zároveň zabíralo pár ostrůvků uprostřed právě této řeky. Obyvatelé tohoto města se z nečinnosti snažili přijít na to, jak navštívit všech sedm mostů, aniž by jeden přešli dvakrát. Rozhodovali jsme se prakticky, při procházkách a teoreticky při setkáních v kuchyni. Dlouhou dobu nikdo nemohl prokázat ani vyvrátit možnost existence této cesty, dokud nepřišel borec Euler a nezkazil měšťanům dovolenou.
Euler přišel s myšlenkou znázornit každý kus země jako vrchol grafu a mosty jako hrany grafu.
A pak se najednou ukázalo, že požadovaná trasa neexistuje. A to vše proto, že všechny vrcholy mají lichý počet hran. Pokud má totiž vrchol sudý počet hran, tak pokaždé, když chodící občan vstoupí na tento pozemek, může odtud vyjít po novém mostě. Ukazuje se tedy, že nebudete moci projít po všech mostech, aniž byste jeden most přešli dvakrát.
Od té doby se graf, ve kterém mají všechny vrcholy sudý počet hran, nazývá „eulerovský graf“. A úplný průběh tohoto grafu nese hrdý název „Eulerovská cesta“.
A poté si obyvatelé Koeningsbergu museli najít jinou zábavu. Pouze jeden čínský matematik Mei-Ku Kuan se těmito můstky neustále klame. A trápila ho následující otázka:
Pokud není možné postavit trasu tak, aby každý most byl překročen právě jednou, jaký je minimální počet dalších přejezdů mostů, které je nutné provést pro dokončení objížďky.
A to už je velmi podobný problému, se kterým se pošťáci setkávají. Řekněme, že každý vrchol je poštovní schránka, do které potřebujete vhazovat písmena. A řekněme, že náš poštovní dopravce musí házet dopisy do každé krabice, aniž by dělal zbytečné pohyby.
Kuan navrhl zvážit opětovné překročení mostu jako přidání další hrany do grafu. Přidání hran by mělo vést k tomu, že všechny vrcholy v grafu budou mít sudý počet hran. Tento postup se obvykle nazývá "eulerizace" grafu. A poté, co je graf „eulerizován“, můžeme podél něj sestavit Eulerovu cestu.
A na počest Kuana byl tento problém nazýván „problémem čínského pošťáka“.
O pár let později se stále našli nudové, kteří se začali zajímat o to, co by se stalo, kdyby bylo možné chodit po okrajích grafu pouze jedním směrem. To je přesně ten problém, který vzniká, podobně jako bolest hlavy taxikáře v New Yorku při budování trasy po jednosměrných ulicích.
Zde zavádíme další termín - digraf. Nebo orientovaný graf. Jedná se o graf, jehož hrany lze protínat pouze v určeném směru. Směrované hrany se také nazývají „oblouky“.
A pokud jsme v případě Eulerovy stezky nebo čínského problému pošťáka operovali s oblouky dotýkajícími se vrcholů, pak zde musíme vzít v úvahu i směr pohybu. A my požadujeme podíl „eulerizace“ takového grafu, aby se počet oblouků vstupujících do vrcholu rovnal počtu odcházejících. A počítáním každého příchozího oblouku jako „+1“ a odchozího oblouku jako „-1“ můžeme vypočítat „polaritu“ každého vrcholu digrafu. Například vrchol se dvěma příchozími a jedním odchozím obloukem má polaritu „2 - 1 = 1“.
Abychom mohli eulerizovat digraf, musíme nakreslit oblouky mezi kladnými a zápornými vrcholy. Toto „vyrovnání“ počtu příchozích a odchozích oblouků potřebujeme ze stejného důvodu, proč jsme dosáhli sudého počtu hran v neorientovaném grafu – každý návštěvník vrcholu grafu by jej měl mít možnost opustit.
Co s tím má společného testování?
Předpokládejme, že tester má model chování testovaného systému. Předpokládejme také, že tento model vypadá jako digraf, kde vrcholy představují stav systému a oblouky jsou akce, které může tester provést, aby změnil stav systému.
První věc, kterou bude tester chtít udělat, je provést všechny možné akce s testovaným systémem. Ale jak to můžeme udělat efektivně? Pak důvtipný tester vymyslí hádanku o taxikáři z New Yorku, která je jen lehce maskovaná. A protože již máme model testovaného systému ve formě grafu, stačí na něj aplikovat vhodný traversální algoritmus, který lze generovat automaticky.
Na druhou stranu je dobré provádět všechny možné akce, ale i ten nejúžasnější manažer testů chápe, že jde o banální „pokrytí stavu“ z hlediska testování surového kódu. Ale multiplikátory mají jednu nepříjemnou vlastnost - zpravidla mají mnoho „dalších“ stavů pro každý vrchol. Co bychom měli dělat, pokud chceme otestovat všechny možné kombinace akcí? Řešení problémů, jako je problém čínského pošťáka, nejsou vhodná, protože zaručují pouze návštěvu každého oblouku, ale nikoli návštěvu všech možných kombinací oblouků.
Tento přístup byl aktivně využíván pro testování konečných automatů. Navíc tento požadavek přirozeně vyplývá z techniky kombinatorického návrhu testu nazývané "všechny páry".
Řešení navrhl jistý de Bruijn. Algoritmus vypadá asi takto:
- Nakreslíme graf na stranu, kde každá hrana původního grafu je vrchol.
- Tam, kde v původním grafu oblouk „1“ vstupuje do vrcholu, ze kterého oblouk „2“ vystupuje, nakreslíme do nově vytvořeného grafu oblouk z vrcholu „1“ do vrcholu „2“.
- Výsledný graf eulerizujeme.
- Nakreslíme na tento graf Eulerovu cestu.
V zásadě se nemůžete obtěžovat a pouze provést náhodné procházení grafu. Pozoruhodné je, že tato strategie je docela odolná vůči „paradoxu pesticidů“. Na druhou stranu každá více či méně složitá aplikace má poměrně rozlehlý graf stavů, na kterém můžete strávit spoustu času, než získáte alespoň nějaké pokrytí „náhodnou procházkou“.
O tom, proč se sem přidávají Markov Chains a jak se paralelizace takových testů obvykle řeší, napíšu později. Prozatím si to stručně shrňme.
Celkový
Modely jsou skvělým způsobem, jak reprezentovat testovanou aplikaci a přemýšlet o ní, ale také nám poskytují poměrně jednoduchý způsob, jak aktualizovat testy a držet krok s neustále se vyvíjející aplikací.
Testování aplikací můžeme považovat za procházení grafu sestaveného na základě aplikačního modelu. Teorie grafů zase poskytuje dostatečné nástroje pro využití informací o chování systému popsaného v modelu ke generování nových brilantních testů.
A protože teorie grafů nám umožňuje pracovat přímo s modelem:
- Při změně modelu lze automaticky generovat nové procházky
- Naše testy se mohou v rámci stejného modelu snadno a přirozeně měnit
- Různé traverzální algoritmy mohou vyhovovat různým testovacím potřebám
- Výsledné bypassové algoritmy lze snadno znovu použít ve zcela novém prostředí