Zpět na seznam článků     Číst komentáře (3)     Verze pro tisk

PTWA: Řízení kvality softwaru

Autor: .cCuMiNn.   
9.2.2016

Tento text je součástí on-line testovací příručky, která pro vás na tomto serveru vzniká. Budeme rádi za vaše připomínky v komentářích a za vaši aktivní účast v doprovodných projektech.


Řízení kvality softwaru, které je samo o sobě velice rozsáhlým a složitým tématem, není hlavní náplní této příručky. Omezím se proto pouze na nezbytně nutné minimum, jímž se budu snažit čtenáře uvést do této problematiky. Zájemce o detailní informace věnované řízení kvality softwaru odkáži například na skvělou knihu Petra Roudenského a Anny Havlíčkové Řízení kvality softwaru: Průvodce testováním, kterou v roce 2013 vydal Computer Press, případně na veřejně dostupný text stejné autorky Testování webových aplikací.

Pod pojmem řízení kvality softwaru, který je znám také pod termínem Quality Assurance (QA) si můžete představit souhrn pravidel a postupů vedoucích ke zvýšení kvality vyvíjených systémů a aplikací. Kvalitou je v tomto kontextu myšleno například intuitivní a přehledné uživatelské rozhraní, rychlá odezva, očekávané chování a výstupy programu, běh bez havárií, správné zotavování a v neposlední řadě také bezpečnost.

Ve větších společnostech se proto často nachází také oddělení kvality, které je za kvalitu zodpovědné. Toto oddělení přitom nemá na starosti pouze samotné testování, ale i jeho plánování, řízení zdrojů, tvorbu reportů a jeho měření. Dříve, než se však podíváme na samotné testování a jeho jednotlivé metody, pojďme nahlédnout na životní cyklus vývoje aplikace. Ten se chtě nechtě stává nedílnou součástí vývoje každé aplikace a poskytne nám tak dobrý odrazový můstek pro popis toho, jaké (bezpečnostní) testy je vhodné v jeho jednotlivých fázích provést.

Životní cyklus vývoje aplikace

Stejně jako lze do několika fází rozdělit život člověka: narození, dětství, dospívání, dospělost, stáří a smrt, lze do konkrétních fází rozčlenit také vývoj softwaru. Sled několika po sobě jdoucích kroků, které je nutné pro vývoj aplikace uskutečnit, označujeme anglickým výrazem System Development Life Cycle (SDLC), který v překladu zní životní cyklus vývoje aplikace. SDLC metodiky vznikaly v posledních desetiletích proto, aby sjednotily pravidla a postupy používané během vývoje softwaru. Cílem těchto metodik tedy je napomoci společnostem vyvíjejícím software vnést díky jasně definovaným a popsaným postupům do životního cyklu vývoje určitý řád. SDLC metodiky proto konkrétně popisují jednotlivé fáze vývojového cyklu, počínaje zjištěním vstupních požadavků uživatelů, přes rozbor a návrh systému až po jeho testování, implementaci, provoz a údržbu.

Standardizovaných SDLC metodik vzniklo velké množství, přičemž každá z nich se hodí na něco trochu jiného a do jiného prostředí. Tradičním způsobem programování a tedy nejstarším a současně asi i nejznámějším modelem vývojového cyklu je metodika zvaná vodopád. Při jejím využití navazují jednotlivé fáze životního cyklu bezprostředně za sebou, případně se někdy mohou i překrývat. Výstup jedné fáze se tedy stává vstupem pro fázi následující a mnohdy tak není možné bez ukončení jedné fáze přejít k dalším krokům. Celý proces je do detailu naplánován a zdokumentován již na samém začátku vývoje, a jak si můžete všimnout na následujícím schématu, jedná se o jednosměrný postup směřující pouze vpřed, respektive dolů. Jakékoliv budoucí odchylky od plánu a případné změny ve funkčnosti výsledného softwaru celý proces značně komplikují a při jejich výskytu se bohužel musí často začínat znovu od samého začátku.

Schéma SDLC metodiky vodopád

Díky uvedené skutečnosti je dnes cyklus vodopád využíván spíše u menších projektů, kdežto u robustnějších se často uchylujeme k iterativním (spirála) nebo agilním metodám (extrémní programování, Scrum). Při nich je celý proces rozdělen do menších částí (interací), které se navrhují, implementují a testují jako samostatné celky. U agilních metodik je pak důraz kladem hlavně na komunikaci mezi členy týmu a ne na úvodní specifikace a dokumentaci. Ta je v těchto případech často dostupná pouze v minimálním možném rozsahu.

Tradiční vývojový cyklus vodopád nám ale díky svému intuitivnímu pojetí vhodně poslouží pro popis jednotlivých fází vývojového cyklu. Mezi běžně zahrnutými kroky najdeme analýzu, návrh, implementaci, testování, nasazení, provoz a údržbu.

Analýza

Základem každého projektu je shromáždění požadavků cílového uživatele. Tyto požadavky mohou být funkčního charakteru, což znamená, že definují, jaké výstupy má aplikace vrátit na základě konkrétních vstupů, nebo mohou být také mimofunkční. Ty specifikují například vzhled uživatelského rozhraní, rychlost odezvy aplikace, nebo její možné zatížení.

Ve fázi analýzy se také snažíme o vytvoření seznamu známých problémů a návrhů jejich řešení. Nezřídka se vytváří případy užití známé pod výrazem use case, které je možné zapisovat ve formě textu nebo častěji pomocí use case diagramů. Pomocí případů užití je možné srozumitelně, ale současně bez zabíhání do přílišných detailů popsat, jaké funkčnosti jsou od aplikace vyžadovány. Nezabýváme se tím, jak bude aplikace určité věci dělat, ale soustředíme se pouze na zodpovězení otázky, co by měla umět. Následující UC diagram zachycuje případy užití pro jednoduchou aplikaci webové diskuze.

User Case diagram jednoduchého webového fóra

Zájemce o bližší informace vztahující se k analýze a k případům užití odkáži na některou z mnoha dostupných knih věnujících se jazyku UML, jenž se při analýze a návrhu aplikací využívá asi nejčastěji.

Na základě shromážděných požadavků dochází k posouzení realizovatelnosti, odhadu rozsahu systému, ekonomické efektivnosti a návratnosti investice. Mimo to se definují také zdroje nutné k řešení (finance, personál, SW, HW a podobně).

Výstupem z této fáze se stává dokument, který specifikuje účel požadovaného softwaru. Identifikuje budoucí uživatele včetně jejich hlavních požadavků, definuje jednotlivé části systému, vstupy, výstupy a procesy. Součástí je také hrubý odhad požadovaných prostředků včetně nákladů.

Návrh

Během fáze návrhu dochází k postupnému upřesňování základních požadavků. Projekt se případně dělí na menší části a subprojekty. Dochází k modelování funkcí a objektů, navrhuje se datový model a rozhraní. Nejprve je vytvořen hrubý návrh, který je následně podroben opětovnému rozboru, během něhož se jednotlivé součásti systému definují do co nemenších detailů.

Výstupem této části jsou dokumenty, které detailně popisují návrh budoucího softwaru včetně jeho datového modelu a funkcí. Podrobně popisují toky dat, požadavky na SW, HW, postupy při testování, nasazování do ostrého provozu a servisní služby.

Implementace

Fází implementace rozumíme samotnou práci programátorů, kteří na základě specifikací vzniklých v předchozích fázích vývoje vytváří výsledný funkční kód aplikace. Budují databázovou strukturu a jednotlivé objekty, které následně spojují do funkčního celku. Výstupem z této fáze je tedy funkční software, který splňuje všechny požadavky cílových uživatelů. Součástí výsledného produktu je také jeho kompletní dokumentace.

Testování

Ve fázi testování dochází k verifikaci správného chování vytvořené aplikace. Ověřuje se, zda aplikace vrací na konkrétní vstupy očekávané výstupy. Fáze testování zahrnuje jednak manuální testy, ale také unit testy, nebo testy pomocí automatizovaných nástrojů. Vedle funkčních požadavků je testováno také uživatelské rozhraní a jsou prováděny zátěžové testy. V ideálním případě je v tomto kroku také důkladně prověřena bezpečnost aplikace revizí jejího kódu a provedením penetračních testů.

Nasazení

Během zavádění nového softwaru do provozu dochází k jeho instalaci u zákazníka a ke školení cílových uživatelů. Součástí je také počáteční podpora, dohled nad zkušebním provozem a případné odstraňování chyb.

Provoz a údržba

Údržbou rozumíme zajištění provozu běžícího softwaru a jeho rozvoj na základě nových požadavků od jeho uživatelů. Během této fáze dochází často k optimalizaci, nebo ke změnám, které mohou být funkčního, provozního, ale i organizačního charakteru.

Praktický příklad

Nejlépe vše pochopíme, pokud si uvedeme velice jednoduchý příklad, který nás bude provázet i po zbytek této části, jenž je věnovaná řízení kvality. Představte si následující zadání: Zákazník si žádá vytvoření velice jednoduché kalkulačky, která by byla přístupná přes webové rozhraní. Pojďme si na tomto příkladu projít celým SDLC procesem, abychom si následně na stejném příkladu ukázali také to, co vše je potřeba otestovat.

  1. Analýza: Se zákazníkem je nejprve nutné důkladně rozebrat jeho představy, abychom jim dokázali plně porozumět a nevytvářeli něco úplně jiného, než žádá. Kalkulačka totiž může mít nejen mnoho podob, ale také mnoho funkcí, viz následující obrázek. Abyste se dozvěděli, co od Vás zákazník očekává, měli byste mu v tuto chvíli klást například tyto otázky:
    • Jaké matematické funkce má kalkulačka podporovat?
    • Zadávání vstupů má být realizováno grafickými tlačítky, nebo vstupními poli?
    • S jak velkými čísly má kalkulačka pracovat?
    • Má kalkulačka zobrazovat řádek se zadávaným výpočtem?
    • Nad kolika operandy bude probíhat výpočet?
    • Má být možné označit a kopírovat výsledek?
    • Které hodnoty mají zůstat předvyplněny po výpočtu?
    • Kolik uživatelů bude s aplikací současně pracovat?
    • V jakém programovacím jazyku má být aplikace naprogramována?
    • Má výpočet probíhat na straně klienta nebo serveru?
    • Jaké barevné schéma má být použito?
    Různé představy o aplikaci kalkulačka
    Na základě zjištěných požadavků vytvoříme ještě grafický náčrtek, který si se zákazníkem odsouhlasíme. V našem případě jsme v této úvodní fázi zjistili, že si zákazník přeje opravdu velice jednoduchou, textovou kalkulačku pouze s podporou základních matematických funkcí a dvou operandů. Představa zákazníka je na předchozím obrázku umístěna úplně dole. Použitým jazykem má být PHP, výpočet má probíhat na straně serveru a vstupní pole mají po výpočtu zůstat vyplněna zadanými daty. Pokusíme se tedy odhadnout čas a personální obsazení potřebné na vývoj a testování této aplikace.
  2. Návrh: V této fázi se důkladně zamyslíte nad možnostmi, jakými by bylo možné požadovanou kalkulačku vyvinout. Náš výsledný návrh bude vypadat tak, že se celá aplikace bude sestávat z jediného HTML formuláře, jehož obsah se po kliknutí na tlačítko „rovná se“ odešle na server, kde dojde k výpočtu. Výpočet bude realizován tak, že spojíme předávané hodnoty operandů a operátoru do jednoho řetězce, který následně proženeme funkcí eval() zajišťující samotný výpočet. Zvolené řešení má sice mnoho nedostatků (včetně bezpečnostních), ale pro náš následující výklad se bude hodit více než skvěle.
  3. Implementace: Ve fázi implementace přichází na řadu vývojáři, kteří dle specifikace vytvořené v předchozí fázi sestaví konečný kód aplikace. Návrh proto musí být dostatečně přesný a detailní, aby vývojáři dokázali jasně porozumět zadání. Pokud by například bylo v návrhu uvedeno, že má kalkulačka podporovat pouze základní matematické funkce, mohli by si pod tím vývojáři opět představit leccos (například i mocninu a odmocninu). Výsledkem práce programátorů bude kód z následujícího výpisu.
  4. Výpis 1 - Zdrojový kód jednoduché kalkulačky
    1. <?php
    2.  $a = $_GET["a"];
    3.  $b = $_GET["b"];
    4.  $op = $_GET["operator"];
    5.  $vypocet= $a.$op.$b;
    6.  if ($op) eval('$vysledek = '.$vypocet.';');
    7.  if (isset($_GET["debug"])) phpinfo();
    8.  
    9.  echo "<form action='' method='GET'>";
    10.     echo "<input type='text' name='a' value='$a'>";
    11.     echo "<input type='radio' name='operator' value='+' checked='checked'>+";
    12.     echo "<input type='radio' name='operator' value='-'>-";
    13.     echo "<input type='radio' name='operator' value='*'>*";
    14.     echo "<input type='radio' name='operator' value='/'>/ ";
    15.     echo "<input type='text' name='b' value='$b'> ";
    16.     echo "<input type='submit' value='='> ";
    17.     echo $vysledek;
    18.   echo "</form>";
    19. ?>
  5. Testování: Testování softwaru se budeme důkladně věnovat až v následující kapitole. Na tomto místě tedy uvedu pouze skutečnost, že v této fázi provedeme ověření, zda naše kalkulačka správně počítá. To znamená, že na konkrétní vstupy vrací odpovídající správné výstupy (výsledky výpočtu). Ověříme tedy například to, že nám kalkulačka po vložení hodnot 5+10 vrátí výsledek 15 a podobně. Více o testovacích případech a co vše je u naší aplikace potřeba otestovat se dočtete v kapitole věnované testování. Možná se budete divit, co vše bude nutné do těchto testů zahrnout.
  6. Nasazení: Po té, co je aplikace důkladně otestována, přichází na řadu fáze nasazení. V tomto kroku nainstalujeme aplikaci na provozní server a zákazníka zaškolíme do jejího používání.
  7. Provoz a údržba: Během údržby zjišťujeme, zda je zákazník s funkcí kalkulačky spokojen, zda se nevyskytly nějaké problémy, a případně reagujeme na přání zákazníka o rozšíření její výbavy například o podporu dalších matematických funkcí.

Tento text je součástí on-line testovací příručky, která pro vás na tomto serveru vzniká. Budeme rádi za vaše připomínky v komentářích a za vaši aktivní účast v doprovodných projektech.
Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 2/10

1  2  3  4  5    
(známkování jako ve škole)