Business & Integration IT konzultant
Non functional testing – typy, výhody a riziká pri jeho ignorácií
Predstav si, že šoféruješ auto, motor hučí, kolesá sa točia a vietor ti fúka do vlasov. Všetko sa môže zdať fajn, kým nešliapneš na brzdu, pričom tvoje auto sa zastaví až po 10 sekundách. Vykonanie dôkladného testovania môže pomôcť odhaliť takéto nedostatky. Nefunkčné testovanie ti v tomto prípade pomôže otestovať reakčný čas brzdového systému, ako dobre funguje, aká je jeho rýchlosť, jeho výkon a podobne.
Nefunkčné testovanie (non-functional testing)
Nefunkčné testovanie je kľúčovým aspektom vývoja softvéru, ktorý sa často prehliada. Zatiaľ čo funkčné testovanie zabezpečuje, aby softvér obsahoval funkčné požadované funkcie, nefunkčné testovanie sa zameriava na aspekty, ako sú výkon, bezpečnosť, použiteľnosť, kompatibilita a škálovateľnosť. Ignorovanie nefunkčného testovania môže predstavovať významné riziká vrátane zníženého výkonu systému, bezpečnostných zraniteľností, zlého používateľského zážitku a obmedzenej škálovateľnosti.
Non functional testing vs functional testing
Funkčné testovanie kontroluje procesy aplikácie na základe súboru požiadaviek alebo špecifikácií. Nefunkčné testovanie hodnotí vlastnosti aplikácie, ktoré nie sú kritické pre funkčnosť, ale prispievajú k zážitku koncového používateľa, ako napríklad výkon a spoľahlivosť systému pri záťaži.
Jednoducho povedané, nefunkčné testovanie kontroluje skôr kvalitu produktu než jeho funkcie. Vo svete vývoja softvéru je nefunkčné testovanie rovnako potrebné ako funkčné testovanie. Bez neho môže systém v kontrolovanom prostredí fungovať úplne bezchybne, ale v reálnom svete môže zlyhať.
Kedy potrebuješ non functional testing?
Non-functional testing sa vykonáva po tom, ako prebehlo unit testovanie, integračné testovanie a funkčné testovanie. Keď testeri zistia, že softvér funguje podľa očakávaní, vykonajú nefunkčné testovanie, aby posúdili, či spĺňa aj nefunkčné parametre. Je to jedna z posledných fáz testovania softvéru pred používateľským akceptačným testovaním a finálnym vydaním produktu do produkcie.
Ciele Non functional testingu
Nefunkčné testovanie je zamerané na dosiahnutie týchto cieľov:
- Zlepšiť inštaláciu, konfiguráciu, výkon a správu produktu
- Zhromažďovať údaje a metriky o výkonnosti, použiteľnosti, bezpečnosti a iných nefunkčných aspektoch systému, čo umožní identifikovať oblasti na zlepšenie a optimalizáciu
- Zlepšenie použiteľnosti, efektívnosti, udržiavateľnosti a portability produktu
- Zníženie výrobného rizika a nákladov spojených s nefunkčnými vlastnosťami produktu
- Zlepšenie znalostí o súčasnej technológii a správaní sa produktu
Výhody Non functional testingu
- Poskytuje vyšší stupeň bezpečnosti. Zabezpečenie je kľúčovým prvkom, ktorý chráni systémy pred online hrozbami
- Zaručuje kapacitu zaťaženia systému, aby ho používatelia mohli používať súčasne
- Zvyšuje efektívnosť systému
- Nie je potrebné písať testovacie prípady viackrát, pretože sa nikdy nemenia
- V porovnaní s inými postupmi testovania je celková časová náročnosť menšia
Charakteristika non functional testingu
- Nefunkčné testovanie by malo byť merateľné, takže tu nie je miesto pre subjektívne charakteristiky ako dobrý, lepší, najlepší atď.
- Presné čísla pravdepodobne nebudú známe na začiatku procesu tvorby požiadaviek
- Dôležité je stanoviť priority požiadaviek
- Zabezpečiť správnu identifikáciu atribútov kvality v rámci softvérového inžinierstva
Non functional testing – parametre
1) Bezpečnosť: Tento parameter definuje, ako je systém zabezpečený proti úmyselným a náhlym útokom z vnútorných a vonkajších zdrojov. Testuje sa to prostredníctvom testovania bezpečnosti.
2) Spoľahlivosť: Miera, do akej akýkoľvek softvérový systém nepretržite vykonáva stanovené funkcie bez poruchy. Testuje sa prostredníctvom testovania spoľahlivosti.
3) Obnoviteľnosť: Tento parameter kontroluje, či softvérový systém naďalej funguje a či sa zotaví v prípade zlyhania systému. Toto sa kontroluje testovaním obnovy.
4) Dostupnosť: Parameter určuje mieru, do akej sa používateľ môže spoľahnúť na systém počas jeho prevádzky. Tento parameter sa kontroluje pomocou testovania stability.
5) Použiteľnosť: Používateľ sa môže ľahko učiť, pracovať, pripravovať vstupy a výstupy prostredníctvom interakcie so systémom. Toto sa kontroluje testovaním použiteľnosti.
6) Škálovateľnosť: Tento pojem sa vzťahuje na stupeň, v ktorom môže akákoľvek softvérová aplikácia rozšíriť svoju spracovateľskú kapacitu s cieľom uspokojiť nárast dopytu. Toto sa overuje testovaním škálovateľnosti.
7) Interoperabilita: Tento nefunkčný parameter kontroluje rozhrania softvérového systému s inými softvérovými systémami. Toto sa kontroluje testovaním interoperability.
8) Efektívnosť: Do akej miery dokáže akýkoľvek softvérový systém zvládnuť kapacitu, množstvo a čas odozvy.
9) Flexibilita: Tento pojem sa vzťahuje na jednoduchosť, s akou môže aplikácia pracovať v rôznych hardvérových a softvérových konfiguráciách. Ako napríklad minimálne požiadavky na pamäť RAM, procesor.
10) Portabilita: Flexibilita softvéru pri prenose z jeho súčasného hardvérového alebo softvérového prostredia.
11) Opätovná použiteľnosť: V tomto prípade ide o časť softvérového systému, ktorú možno previesť na použitie v inej aplikácii.
Typy nefunkčného testovania (non-functional testing types)
- Testy výkonnosti (Performance Tests)
Testy výkonnosti zabezpečujú niekoľko prvkov kvality softvéru. Overujú, či je rýchly, škálovateľný, stabilný a spoľahlivý. Tieto testy môžu nájsť problémy v návrhu softvéru a výkonnosti architektúry.
Zvyčajne sa vykonáva: meranie času odozvy, identifikácie citlivých miest, lokalizácie miest zlyhania
- Testy zaťaženia (Load Tests)
Záťažové testy overujú, ako sa softvér správa v bežných aj hraničných podmienkach, akú pracovnú záťaž dokáže softvér zvládnuť, kým sa negatívne neovplyvní jeho výkonnosť. Záťažové testy môžeš vykonať spustením viacerých aplikácií súčasne, vystavením servera vysokej prevádzke alebo stiahnutím veľkého množstva súborov.
Záťažové testy sa používajú na zabezpečenie rýchleho a škálovateľného softvéru.
- Záťažové testy (Stress Tests)
Záťažové testy overujú, ako sa softvér správa za neobvyklých podmienok. Tým sa určuje hranica, pri ktorej sa softvér pokazí. Je dôležité zistiť, čo sa stane, keď je systém pod záťažou. Zobrazí sa správna chybová správa? Zlyhá systém? Ako sa zotaví?
Záťažové testy pomáhajú testerom analyzovať, čo sa stane, keď systém zlyhá. Tým sa zabezpečí, aby bol softvér obnoviteľný, stabilný a spoľahlivý.
- Testy objemu (Volume Tests)
Objemové testy slúžia na overenie toho, čo sa stane s výkonom systému, keď sa do databázy pridá obrovský objem údajov. Robí sa to s cieľom zistiť, aké problémy sa môžu vyskytnúť pri rastúcich objemoch údajov. Je známe aj ako záplavové testovanie.
Objemové testy overujú, či systémy reagujú na určité objemy údajov podľa očakávania. Je to dôležité na zabezpečenie výkonu a stability.
- Testy bezpečnosti (Security Tests)
Bezpečnostné testy kontrolujú softvér s cieľom nájsť chyby alebo zraniteľnosti, ktoré môžu ohroziť údaje. Cieľom bezpečnostných testov je identifikovať všetky potenciálne bezpečnostné riziká alebo hrozby a zabezpečiť, aby produkt nebol zraniteľný voči hackerským útokom, únikom údajov alebo iným typom bezpečnostných problémov.
Medzi bežné bezpečnostné testy patria: skenovanie zraniteľností, skenovanie zabezpečenia, penetračné testovanie, posúdenie rizík, bezpečnostné audity, etický hacking
- Testy aktualizácie a inštalácie (Upgrade and Installation Tests)
Testovaním aktualizácie a inštalácie sa overuje, či softvér bude správne fungovať na všetkých počítačoch. Testovanie aktualizácie sa teda vykonáva pre existujúcich používateľov. A testovanie inštalácie sa vykonáva pre nových používateľov.
- Testy obnovy (Recovery Tests)
Testy obnovy určujú, ako rýchlo sa softvér dokáže obnoviť po páde alebo zlyhaní. Robí sa to tak, že systém prinútime zlyhať.
Tento typ testovania sa vykonáva s cieľom zistiť, čo sa stane so softvérom:
- Ak odpojíš hardvér.
- Ak sa počas prenosu údajov odpojíš od siete.
- Keď neočakávane reštartuješ systém.
Proces non functional testing
Proces nefunkčného testovania zvyčajne pozostáva z niekoľkých kľúčových fáz. Hoci sa konkrétna terminológia alebo názvoslovie môžu líšiť, hlavné kroky zahrnuté do procesu nefunkčného testovania zvyčajne zahŕňajú:
- Zhromažďovanie požiadaviek (non functional testing requirements)
V prvej fáze procesu testovania tím QA spolupracuje so zainteresovanými stranami, architektmi a vývojármi, aby pochopil a zdokumentoval nefunkčné požiadavky systému. Zahŕňa identifikáciu výkonnostných očakávaní, bezpečnostných kritérií, smerníc použiteľnosti, potrieb škálovateľnosti a ďalších relevantných nefunkčných atribútov.
- Plánovanie (planning)
Na základe zozbieraných požiadaviek testovací tím vytvorí komplexný plán testovania, v ktorom sú uvedené ciele nefunkčného testovania, rozsah, testovacie scenáre, nastavenie testovacieho prostredia a požiadavky na zdroje. Plán tiež definuje prístup k testovaniu, testovacie techniky a nástroje.
- Návrh testovacích prípadov (test case design)
V tejto fáze tím QA navrhuje nefunkčné testovacie prípady a testovacie skripty na základe identifikovaných testovacích scenárov. Návrh testov zahŕňa určenie testovacích údajov, výber vhodných techník nefunkčného testovania a načrtnutie krokov na vykonanie testov.
- Vykonávanie (execution)
Nefunkčné testy sa vykonávajú podľa plánu testov a návrhu testov. Táto fáza zahŕňa nastavenie testovacieho prostredia, konfiguráciu potrebných nástrojov a spustenie testov. Testeri monitorujú a merajú výkonnosť, bezpečnosť, použiteľnosť a ďalšie nefunkčné aspekty systému.
- Analýza a podávanie správ (analysis and reporting)
Po vykonaní testov tím QA analyzuje výsledky testov a porovnáva ich s definovanými nefunkčnými požiadavkami. Akékoľvek odchýlky, problémy alebo chyby sa identifikujú, zdokumentujú a nahlásia. Pripravia sa správy o testoch.
- Správa chýb a opakované testovanie (bug report and re-testing)
Ak sa vo fáze analýzy identifikujú nefunkčné chyby, zaznamenajú sa, priradia a spravujú v systéme na sledovanie chýb. Vývojový tím tieto chyby rieši a po ich odstránení sa dotknuté nefunkčné testy vykonajú znova, aby sa overili opravy a zabezpečilo, že systém teraz spĺňa požadované nefunkčné kritériá.
- Uzavretie testov (test closure)
V záverečnej fáze testovací tím pripraví správu o ukončení testov, v ktorej zhrnie celkové činnosti nefunkčného testovania, výsledky a získané skúsenosti. Dokumentácia sa aktualizuje a záverečné výstupy vrátane testovacích artefaktov a správ sa archivujú pre budúce použitie.
Nástroje na nefunkčné testovanie (non functional testing tools)
Nástroje na testovanie zaťaženia
Nástroje ako Apache JMeter, Gatling a LoadRunner pomáhajú simulovať vysoké zaťaženie používateľmi a merať výkon systému pri veľkej prevádzke. Generujú virtuálne požiadavky používateľov, monitorujú časy odozvy a analyzujú správanie systému s cieľom identifikovať citlivé miesta výkonu (bottlenecks).
Nástroje na testovanie bezpečnosti
Bezpečnostné nástroje ako OWASP ZAP, Burp Suite a Nessus pomáhajú pri identifikácii zraniteľností a slabých miest v zabezpečení systému. Vykonávajú skenovanie zraniteľností, penetračné testovanie a analýzu kódu s cieľom posúdiť odolnosť systému voči potenciálnym bezpečnostným hrozbám.
Nástroje na monitorovanie výkonu
Nástroje na monitorovanie výkonu poskytujú prehľad o výkone systému v reálnom čase. Možnosti ako New Relic, AppDynamics a Dynatrace monitorujú kľúčové metriky výkonu, sledujú využitie zdrojov a pomáhajú identifikovať problémy s výkonom v produkčných prostrediach.
Nástroje na testovanie použiteľnosti
Nástroje na testovanie použiteľnosti vrátane UserTesting, Morae a Optimal Workshop pomáhajú pri hodnotení používateľského zážitku a použiteľnosti systému. Tieto nástroje umožňujú vytvárať testy použiteľnosti, nahrávky obrazoviek a zhromažďovať spätnú väzbu používateľov s cieľom posúdiť jednoduchosť používania systému a spokojnosť používateľov.
Nástroje na správu testov
Nástroje JIRA, TestRail, Asana a qTest ponúkajú možnosti na správu a sledovanie činností nefunkčného testovania. Pomáhajú pri plánovaní testov, správe testovacích prípadov, sledovaní chýb a reportovaní, čím uľahčujú efektívne riadenie testov v celom procese nefunkčného testovania.
Nástroje na testovanie zhody
Nástroje na testovanie zhody, ako napríklad OWASP Dependency-Check, SonarQube a Veracode, pomáhajú zabezpečiť súlad s priemyselnými normami, predpismi a osvedčenými postupmi kódovania. Analyzujú kód, závislosti a konfigurácie s cieľom identifikovať potenciálne problémy so súladom a poskytnúť odporúčania na zlepšenie.
Riziká spojené s non functional testingom
Riziko č. 1: Zraniteľné miesta vo výkone (performance bottlenecks)
Predstav si populárnu webovú stránku elektronického obchodu, na ktorej sa nepodarilo vykonať nefunkčné testovanie. Výsledkom je, že napr. počas Black Friday výpredaja sa webová stránka zrúti v dôsledku náhleho prílevu používateľov. To nielenže poškodzuje povesť spoločnosti, ale má za následok aj stratu príjmov.
Riziko č. 2: Bezpečnostné zraniteľnosti
Zanedbanie nefunkčného testovania otvára dvere zraniteľnostiam, ktoré môžu hackeri zneužiť. Vezmi si bankovú aplikáciu, bez správneho šifrovania alebo overovacích opatrení sa citlivé údaje zákazníkov stávajú ľahkým cieľom pre kyberzločincov.
Riziko č. 3: Zlý používateľský zážitok
Používateľská skúsenosť (UX) zohráva kľúčovú úlohu pri úspechu každej softvérovej aplikácie. Predstav si mobilnú aplikáciu, ktorej načítanie trvá celú večnosť, alebo webovú stránku s neprehľadným rozložením. Používatelia takéto aplikácie rýchlo opustia a budú hľadať alternatívy, ktoré ponúkajú plynulejšie a intuitívnejšie prostredie.
Riziko č. 4: Problémy s kompatibilitou
V dnešnom multiplatformovom svete musí byť softvér kompatibilný s rôznymi operačnými systémami, prehliadačmi a zariadeniami. Zanedbanie nefunkčného testovania v tomto aspekte môže viesť k problémom s kompatibilitou. Napríklad aplikácia na streamovanie videa, ktorá funguje len na určitých zariadeniach, alebo webová aplikácia, ktorá sa v určitých prehliadačoch pokazí.
Riziko č. 5: Problémy so škálovateľnosťou
S rastom podniku rastie aj jeho používateľská základňa. Zanedbanie nefunkčného testovania škálovateľnosti môže vyústiť do scenára nočnej mory. Zoberme si cloudovú softvérovú službu, ktorá zažíva rýchlu expanziu bez adekvátneho testovania škálovateľnosti. Systém sa zrazu stane preťaženým, čo vedie k častým pádom a výpadkom.
Prípady zlyhania v dôsledku zlyhania nefunkčného testovania (non functional testing – examples of failure)
Poruchy v Amazon Prime Day:
V roku 2018 aj 2019 sa pri podujatí Prime Day spoločnosti Amazon vyskytli technické problémy. Zákazníci zaznamenali spomalenie webových stránok, nefunkčné odkazy a ťažkosti pri dokončovaní nákupov. Tieto incidenty poukázali na kritickosť nefunkčného testovania vrátane testovania výkonnosti a plánovania kapacity, aby sa zvládol nárast návštevnosti a zabezpečil bezproblémový nákupný zážitok počas podujatí s vysokým dopytom.
Škandál spoločnosti Facebook s firmou Cambridge Analytica:
V roku 2018 čelila spoločnosť Facebook veľkej kontroverzii, keď sa ukázalo, že osobné údaje miliónov používateľov boli bez súhlasu zhromaždené politickou konzultačnou spoločnosťou Cambridge Analytica. Tento incident vrhol svetlo na význam nefunkčného testovania v súvislosti so súkromím a bezpečnosťou údajov.
Realizácia prínosov
Netflix intenzívne investuje do nefunkčného testovania, aby zabezpečil bezproblémový zážitok zo streamovania. Vďaka testovaniu výkonnosti, škálovateľnosti a záťaže dokáže Netflix zvládnuť obrovskú návštevnosť používateľov a poskytovať obsah bez prerušenia.
Google ako technologický gigant chápe dôležitosť nefunkčného testovania pri poskytovaní spoľahlivého a efektívneho používateľského zážitku. Ich vyhľadávač a rôzne aplikácie prechádzajú prísnym testovaním, aby sa zabezpečil optimálny výkon, bezpečnosť a kompatibilita. Vďaka tomu sa Google stal jedným z najobľúbenejších vyhľadávačov.
Najlepšie postupy nefunkčného testovania (non functional testing best practises)
Na zabezpečenie efektívneho nefunkčného testovania je potrebné zvážiť niekoľko osvedčených postupov:
- Zapoj testovanie už v počiatočných fázach SDLC (STLC). Spolupracuj so zainteresovanými stranami, architektmi a vývojármi, aby si pochopil nefunkčné požiadavky a navrhol systém s ohľadom na tieto požiadavky.
- Definuj jasné a merateľné ciele nefunkčného testovania. Stanov konkrétne ciele týkajúce sa výkonu, bezpečnosti, použiteľnosti a iných nefunkčných aspekto
- Vytvor realistické testovacie prostredie, ktoré presne napodobňuje produkčné prostredie.
- Využívaj nástroje a frameworky na automatizáciu testov. Automatizácia pomáha simulovať používateľské zaťaženie, generovať konzistentné testovacie údaje a vykonávať opakujúce sa úlohy, čo umožňuje efektívnejšie
- Počas testovania implementuj spoľahlivé monitorovacie mechanizmy na zachytávanie výkonnostných metrík, ako sú časy odozvy, využitie zdrojov, priepustnosť a chybovosť. Tieto metriky poskytujú prehľad o správaní systému, pomáhajú identifikovať úzke miesta a uľahčujú analýzu výkonu.
- Zameraj sa na kritické funkcie, vysoko rizikové oblasti a scenáre, ktoré môžu spôsobiť zníženie výkonu, bezpečnostné zraniteľnosti alebo problémy s použiteľnosťou.
Príklad nefunkčného testovacieho prípadu (non functional tests example)
Test Case # | Test Case | Doména |
1 | Čas načítania aplikácie by nemal byť dlhší ako 5 sekúnd pri súčasnom prístupe 1000 používateľov | Performance Testing |
2 | Softvér by sa mal dať nainštalovať na všetky verzie systémov Windows a Mac | Compatibility Testing |
3 | Všetky webové obrázky by mali mať alt tag | Accessibility testing |
Záver
Non-functional testing je komplexný prístup, ktorý pomáha zabezpečiť, aby bola aplikácia optimalizovaná pre používateľský zážitok a spĺňala potrebné normy kvality. Pomáha vývojárom identifikovať a riešiť potenciálne problémy ešte pred zverejnením aplikácie. Týmto spôsobom sa znižuje riziko zlyhania a zabezpečuje sa, že aplikácia splní očakávania používateľov. Netreba na ňho teda zabúdať, lebo svoj produkt zbytočne vystavíš rizikám.
Ak vieš po nemecky a si IT tester alebo automatizovaný tester, pozri si naše firemné benefity a reaguj na voľné pracovné miesta.