Fáze testování testování v různých vývojových modelech. Proč je testování nutné? Příprava na testování

  • Testování webových služeb
  • 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í?
    1. 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?
    2. 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í.
    3. 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!

    1. V tomto případě lze automatický výpočet pokrytí požadavků testy odstranit - stále nenese žádnou sémantickou zátěž.
    2. 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“.
    3. 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é!)
    4. 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:
    1. 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.
    2. 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.
    3. 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!
    1. Vytvoříme seznam funkcí (viz výše), ale bez podrobný popis požadavky.
    2. Pro každou funkci společně shromažďujeme odkazy na technické specifikace, specifikace, pokyny a další dokumenty.
    3. 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?
    1. Ř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?)
    2. 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?
    1. 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í?
    2. 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čnost
    chová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ích
    2) 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

    Parametr
    tří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 produktu
    Případ 1
    Norma
    Případ 2
    Pojistné
    množství

    2) 1 třída == 1 kontrola

    Verze produktu
    Pří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 produktu
    množ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 produktu
    množ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 produktu
    množ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...

    Parametr
    tří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 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
    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

    0
    Základní test
    Na uklidnění nervů
    Negativní test
    99

    99
    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, XML
    Operač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
    3

    Prá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

    1
    2
    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:

    1. 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.
    2. 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.
    3. Vývoj testu(testovací kód pro testovaný systém).
    4. Průběžné testy: implementace testovacích cyklů.
    5. 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í:

    1. Testování hlavní funkčnosti, kdy se testuje samotný systém, který je hlavním vyráběným produktem.
    2. 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.
    3. 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:

    1. Funkční testování, které kontroluje:
      • pokrývající funkční požadavky;
      • Pokrytí případů použití.
    2. Zátěžové testování, které testuje extrémní podmínky použití produktu.
    3. Hraniční testování.
    4. Testování výkonu.
    5. Testování shody s normami.
    6. Testování kompatibility s jinými softwarovými a hardwarovými systémy.
    7. Testování práce s prostředím.
    8. 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í


    
    Nahoru