Funkčné testovanie – functional testing

Existuje súbor, ktorý definuje, čo je v softvéri prijateľné správanie a čo nie.  Ide o funkčnú špecifikáciu alebo špecifikáciu požiadaviek. Špecifikácia požiadaviek je dokument, ktorý popisuje, čo má softvér robiť a zahŕňa popis funkčných a nefunkčných požiadaviek.

  • Funkčné požiadavky popisujú, čo má softvér robiť. Zahŕňajú popisy funkcií, ktoré softvér musí poskytovať, ako aj vstupov a výstupov týchto funkcií.
  • Nefunkčné požiadavky popisujú vlastnosti softvéru, ktoré nie sú priamo spojené s jeho funkčnosťou. Zahŕňajú požiadavky na výkon, spoľahlivosť, bezpečnosti a použiteľnosť.

Špecifikácia požiadaviek je dôležitá pre testovanie softvéru, pretože poskytuje testerom informácie, ktoré potrebujú na návrh a vykonávanie testov. Poďme sa teda pozrieť na to, čo presne je funkčné testovanie – functional testing.

Funkčné testovanie – definícia

Funkčné testovanie je typ testovania softvéru, pri ktorom sa testujú základné funkcie aplikácie na základe vopred stanoveného súboru špecifikácií. Pri funkčnom testovaní sa každá funkcia testuje zadaním hodnoty, určením výstupu a overením skutočného výstupu s očakávanou hodnotou.

Funkčné testovanie sa vykonáva ako testovanie čiernej skrinky (black box testing), ktoré je prezentované na potvrdenie toho, že funkčnosť aplikácie alebo systému sa správa tak, ako očakávame.

Funkčné testovanie sa aj preto nazýva testovanie čiernej skrinky, pretože sa zameriava skôr na funkcie aplikácie než na skutočný kód. Výsledky testu sú binárne: test prešiel alebo neprešiel (pass/failed).

Testovanie funkčnosti sa môže vykonávať prostredníctvom dvoch populárnych techník:

  1. Testovanie na základe požiadaviek: Obsahuje všetky funkčné špecifikácie, ktoré tvoria základ pre všetky testy, ktoré sa majú vykonať.
  2. Testovanie na základe obchodných scenárov: Obsahuje informácie o tom, ako bude systém vnímaný z hľadiska obchodných procesov.

Ciele funkčného testovania

  • Overiť, či softvér spĺňa svoje funkčné požiadavky.
  • Identifikovať chyby v softvéri.
  • Zvýšiť kvalitu softvéru.
  • Overiť, či softvér správne spracováva vstupné/výstupné údaje.
  • Overiť, či softvér správne reaguje na rôzne vstupné údaje.
  • Overiť, či softvér správne funguje v rôznych scenároch.

Aký je postup funkčného testovania?

Pri funkčnom testovaní postupujú IT testeri podľa nasledujúcich krokov:

  • Tester vykonáva overenie špecifikácie požiadaviek v softvérovej aplikácii.
  • Po analýze špecifikácie požiadaviek tester vytvorí plán testov (test plan).
  • Po naplánovaní testov tester navrhne testovací prípad (test case).
  • Po navrhnutí testu tester prípadu vytvorí dokument matice sledovateľnosti.
  • Tester vykoná návrh testovacieho prípadu.
  • Vytvorí sa analýza pokrytia na preskúmanie pokrytej oblasti testovania aplikácie.
  • Defect management by mal riešiť vzniknuté chyby.

Functional testing - funkčné testovanie

Pozri si aj functional testing checklist, pri ktorom určite na nič nezabudneš.

Funkčné testovanie vs nefunkčné testovanie (Functional testing vs non-functional testing)

Funkčné testy overujú, či sú splnené špecifikované funkčné požiadavky, zatiaľ čo nefunkčné testy sa môžu použiť na testovanie mimo funkcií, ako je výkon, bezpečnosť, škálovateľnosť alebo kvalita aplikácie. Inak povedané, funkčné testovanie sa zaoberá tým, či kľúčové funkcie v aplikácií fungujú a nefunkčné testy sa viac zaoberajú tým, ako operácie prebiehajú, čiže ich zaujíma výkon, bezpečnosť, použiteľnosť a ďalšie.

Medzi druhy funkčného testovania patrí: Unit Testing, Integration Testing, System Testing, User Acceptance Testing, Regression Testing, Sanity Testing atď.

Zatiaľ čo nefunkčné testovanie zahŕňa: Performance Testing, Security Testing, Usability Testing, Compatibility Testing, Load Testing, Stress Testing, Volume Testing, Penetration Testing, Migration Testing.

Čo sa týka kritérií testu pri funkčnom testovaní, pass/fail kritériá sú často jednoduché a vychádzajú z očakávaných výsledkov. Pri nefunkčnom testovaní však pass/fail kritériá môžu zahŕňať prahové hodnoty alebo referenčné hodnoty (napr. čas odozvy by mal byť nižší ako 2 sekundy).

Typy funkčného testovania

Poznáme rôzne techniky funkčného testovania:

  • Unit testing: Unit testovanie je typ techniky funkčného testovania, pri ktorom sa testujú jednotlivé najmenšie časti alebo moduly aplikácie. Zabezpečuje, aby každý modul fungoval správne.

Príklad: reštaurácia potrebuje aplikáciu, ktorá pomôže zákazníkom objednať si jedlo pri stole bez obsluhy. Vývojár vytvorí unit test na preskúmanie funkcie „pridať k objednávke“. Ostatné funkcie, ako napríklad „odstrániť z objednávky“ alebo „odoslať objednávku“, by tiež prešli unit testovaním.

  • Integračné testovanie: Pri integračnom testovaní sa testujú kombinované jednotlivé časti programu ako skupina a odhaľujú sa chyby v interakcii medzi integrovanými časťami.

Príklad: V bankovej aplikácii si používatelia môžu zriadiť sporiaci účet. Obsahuje možnosť prevodu peňazí z ich hlavného účtu na sporiaci účet. Keďže ide o samostatné moduly, testeri musia vykonať integračné testovanie, aby zabezpečili, že transakcie medzi nimi prebehnú hladko a správne.

  • Smoke testovanie: Smoke testing je typom techniky funkčného testovania, pri ktorom sa testuje základná funkčnosť alebo vlastnosť aplikácie, pretože zabezpečuje správne fungovanie najdôležitejšej funkcie.

Príklad: Spoločnosť poskytujúca verejné služby vytvorila aplikáciu s funkciou nahlasovania výpadkov v domácnostiach zákazníkov. Táto funkcia nahlási adresu a ďalšie dôležité informácie, ako aj upozorní majiteľa domu, keď je dispečer na ceste na pomoc. Smoke testovanie overí túto funkciu na základnej úrovni, aby sa zabezpečilo, že pri nahlásení výpadku sa odošlú správne informácie, aby sa dispečer mohol dostaviť na miesto včas.

  • Používateľské akceptačné testovanie (User Acceptance Testing): Používateľské akceptačné testovanie vykonáva klient, aby potvrdil, že systém spĺňa požiadavky a funguje tak, ako má. Je to záverečná fáza testovania pred vydaním produktu do produkcie.

Príklad: Predstavme si, že zákazník si kupuje nový pár topánok v online obchode s obuvou. UAT testy overia, či zákazník môže úspešne pridať požadované topánky do nákupného košíka a zaplatiť.

  • Testovanie rozhrania (Interface Testing): Testovanie rozhrania je typ techniky testovania softvéru, ktorá kontroluje správnu interakciu medzi dvoma rôznymi softvérovými systémami.

Príklad: Zákazník sa pokúša zaplatiť objednávku cez Paypal v aplikácii na online nakupovanie. Počas interface testingu sa overí, či sa aplikácia Paypal správne vyplní a prebehne platba.

  • Testovanie použiteľnosti (Usability Testing): Testovanie použiteľnosti sa vykonáva s cieľom zmerať, nakoľko je softvérová aplikácia jednoduchá a používateľsky prívetivá.

Príklad: Skupina používateľov má pri používaní aplikácie na online nakupovanie splniť súbor úloh napríklad: používateľ je požiadaný, aby našiel konkrétny výrobok, napríklad pár bielych bežeckých topánok. Používateľ je pozorovaný pri hľadaní výrobku a pri navigácii v aplikácii. Ďalej je používateľ požiadaný, aby pridal tovar do nákupného košíka. Používateľ je pozorovaný, ako pridáva položku do košíka a prechádza k pokladni a k dokončeniu procesu pokladnice. Posudzuje sa intuícia zákazníka a schopnosť navigovať sa v systéme.

  • Testovanie systému: Testovanie systému je typ testovania softvéru, ktorý sa vykonáva na kompletnom integrovanom systéme s cieľom vyhodnotiť súlad systému s príslušnými požiadavkami.

Príklad: bola vytvorená fitnes aplikácia s možnosťami, ako je nastavenie a sledovanie mesačných fitnes cieľov, výpis fitnes metrík, vytváranie osobných cvičebných plánov a integrácia inteligentných hodiniek. Každá z týchto funkcií sa bude posudzovať jednotlivo, ako aj všetky spolu pri testovaní systému.

  • Regresné testovanie (Regression Testing): Regresné testovanie sa vykonáva s cieľom uistiť sa, že zmeny kódu by nemali ovplyvniť existujúcu funkčnosť a vlastnosti aplikácie. Zameriava sa na to, či všetky časti fungujú alebo nie.

Príklad: Aplikácia na rozvoz jedla pridala funkciu, ktorá používateľom pomáha pridávať viacero zľavových kódov naraz. Je potrebné vykonať regresný test, aby sa zabezpečilo, že proces pokladnice a platby nebude ovplyvnený.

  • Testovanie správnosti (Sanity Testing): Testovanie správnosti je podmnožinou regresného testovania a vykonáva sa s cieľom uistiť sa, že zavedené zmeny kódu fungujú podľa očakávaní.

Príklad: Na webovej stránke elektronického obchodu si používatelia nemôžu pridať konkrétny výrobok do košíka, aj keď je na sklade. Po odstránení problému sa vykoná testovanie správnosti, aby sa zabezpečilo, že funkcia „pridať do košíka“ skutočne funguje.

  • Testovanie bielej skrinky (White box Testing): Testovanie bielej skrinky je typ testovania softvéru, ktorý umožňuje testerovi overiť vnútorné fungovanie softvérového systému. To zahŕňa analýzu kódu, infraštruktúry a integrácie s externým systémom.

Príklad: Developer testuje funkciu, ktorá vypočíta súčet dvoch čísel. Preskúma kód funkcie, aby identifikoval potenciálne chyby alebo nedostatky. Tester vytvorí testovacie prípady, ktoré pokrývajú všetky možné vstupy a výstupy funkcie. Vykoná testovacie prípady a sleduje výsledky. Ak sa nájdu nejaké chyby, developer kód debugguje a opraví.

  • Testovanie čiernej skrinky (Black box Testing): Testovanie čiernej skrinky je typ testovania softvéru, pri ktorom sa testuje funkčnosť softvérového systému bez toho, aby sa skúmalo vnútorné fungovanie alebo štruktúry softvérového systému.

Príklad: Tester testuje aplikáciu ATM. Tester preskúma požiadavky na aplikáciu ATM, aby pochopil jej funkčnosť. Vytvorí testovacie prípady, ktoré pokrývajú všetky hlavné funkcie aplikácie ATM. Vykoná testovacie prípady a sleduje výsledky. Ak sa zistia nejaké chyby, tester ich nahlási vývojovému tímu.

  • Testovanie databázy: Testovanie databázy je typ testovania softvéru, pri ktorom sa kontroluje schéma a tabuľky testovanej databázy.

Príklad: Tester testuje databázovú aplikáciu. Preskúma databázovú schému, aby pochopil štruktúru databázy. Vytvorí testovacie údaje, ktoré pokrývajú všetky rôzne typy údajov, ktoré budú uložené v databáze. Vykonáva testovacie prípady, ktoré vkladajú, aktualizujú a odstraňujú údaje z databázy. Tester overuje, či sú údaje v databáze presné a úplné. Ak sa zistia problémy s výkonom, tester ich nahlási vývojovému tímu.

  • Adhoc testovanie: Adhoc testovanie, známe aj ako monkey (opičie) testovanie alebo náhodné testovanie, je typ softvérového testovania, pri ktorom sa pri testovaní nepostupuje podľa žiadnej dokumentácie alebo plánu testovania.

Príklad: Predpokladajme, že developer pracuje na novej funkcii webovej aplikácie. Dokončil kódovanie funkcie a chce sa uistiť, že funguje podľa očakávania. Namiesto písania formálnych testovacích prípadov môže začať používať funkciu náhodne, klikaním na rôzne tlačidlá a zadávaním rôznych údajov. Toto je príklad ad hoc testovania.

  • Testovanie obnovy (Recovery Testing): Testovanie obnovy je typ testovania softvéru, ktorým sa overuje schopnosť softvéru obnoviť sa po zlyhaniach, ako sú zlyhania hardvéru, softvéru, pády atď.

Príklad: Zvažujme aplikáciu online bankovníctva. Počas transakcie môže dôjsť k výpadku siete alebo k poruche servera. Testovanie obnovy by zahŕňalo simuláciu týchto scenárov a overenie, či aplikácia: elegantne zvládne prerušenie, aplikácia by nemala náhle zamrznúť alebo zobraziť chybové hlásenia. Mala by zachovávať integritu údajov o transakciách a zabezpečiť, aby nedošlo k strate alebo poškodeniu informácií. Aplikácia by mala poskytnúť používateľovi jasné pokyny alebo možnosti na obnovenie transakcie alebo vykonanie alternatívnych činností. Po odstránení prerušenia by aplikácia mala obnoviť svoju normálnu funkčnosť bez toho, aby sa musel vykonať úplný reštart.

  • Statické testovanie: Statické testovanie je typ testovania softvéru, ktorý sa vykonáva na kontrolu chýb softvéru bez toho, aby sa kód softvérovej aplikácie skutočne spustil.

Príklad: Ide o ručné preskúmanie kódu riadok po riadku s cieľom identifikovať potenciálne chyby alebo nedostatky.

  • Greybox testovanie: Testovanie šedej skrinky je typ testovania softvéru, ktorý zahŕňa testovanie čiernej a bielej skrinky.

Príklad: Tester testuje webovú aplikáciu. Najskôr preskúma časť kódu webovej aplikácie, aby pochopil jej všeobecnú štruktúru a funkčnosť. Potom vytvorí testovacie prípady, ktoré pokrývajú známe aj neznáme oblasti webovej aplikácie. Neskôr vykoná testovacie prípady a sleduje výsledky. Tester používa nástroje na analýzu kódu na potenciálne chyby alebo nedostatky. Ak sa nájdu nejaké chyby, tester ich nahlási vývojovému tímu.

  • Testovanie komponentov: Testovanie komponentov známe aj ako testovanie programu alebo testovanie modulov je typom testovania softvéru, ktoré sa vykonáva po unit testovaní. Pri ňom sa testovacie objekty môžu testovať samostatne ako komponent bez integrácie s inými komponentmi.

Príklad: Aplikácia zdravotníckych služieb má funkciu, ktorá pomáha pacientom naplánovať stretnutie s lekármi podľa ich výberu. Súčasťou, ktorú treba otestovať, je spôsob, akým systém zobrazuje „blízke“ nemocnice alebo zdravotnícke strediská pomocou údajov z GPS používateľa. Na testovanie tejto funkcie je profil používateľa stub a ovládačom sú dostupné rozvrhy poskytovateľov zdravotnej starostlivosti.

API funkčné testovanie

Funkčné testovanie API je typ testovania softvéru, ktorým sa overuje funkčnosť rozhraní na programovanie aplikácií (API). Pomáha zabezpečiť, aby aplikácia a rozhranie API fungovali podľa očakávaní pri konkrétnom pracovnom zaťažení, ktoré dokážu zvládnuť.

Rozhrania API sú motormi, ktoré poháňajú naše softvérové aplikácie. Umožňujú rôznym systémom navzájom komunikovať a bezproblémovo prenášať údaje. Ale tak ako každý iný motor, aj API sa môžu pokaziť a nesprávne fungovať, ak nie sú správne otestované.

Práve tu prichádza na rad funkčné testovanie API. Zahŕňa testovanie správania a funkčnosti rozhrania API s cieľom zabezpečiť, aby fungovalo podľa očakávaní, spĺňalo špecifikované požiadavky a vracalo správnu odpoveď pri rôznych scenároch.

Funkčné testovanie API je typ testovania softvéru, ktorým sa overuje funkčnosť rozhraní na programovanie aplikácií (API).
Funkčným testovaním API sa overuje funkčnosť rozhraní na programovanie aplikácií (API).

Príklad:  over, či API dokáže načítať informácie o lete na základe zadaných parametrov.

  • Miesto odletu: Viedeň
  • Cieľová destinácia: Bombaj
  • Dátum odletu: 01-05-2023
  • Dátum návratu: 25-05-2023
  • Počet cestujúcich: 2
  • Očakávaný výstup –

Očakávaný výstup sa skontroluje prostredníctvom tela Status a Response, ako je uvedené nižšie:

  • Status: Ak je stavový kód odpovede 200, potom sa API vykonalo úspešne.
  • Response body: Telo odpovede bude obsahovať zoznam všetkých letov, ktoré budú spĺňať vyššie uvedené kritériá. V tomto prípade budú výsledkom lety Air Arabia, Air India, IndiGo, Air France atď.

Okrem toho, keď zákazníci potvrdia svoju rezerváciu a rozhodnú sa zaplatiť cenu letenky pomocou akejkoľvek online platobnej platformy, ako je Stripe alebo Paypal, testeri musia otestovať, či cestovná aplikácia dokáže komunikovať s platobnou službou, aby sa zabezpečila úspešná a bezpečná platba pre používateľov.

Nástroje na funkčné testovanie (functional testing tools)

Selenium

Selenium je open-source projekt zastrešujúci celý rad nástrojov a knižníc vyvinutých s cieľom podporiť automatizáciu web aplikácií.

  • Testovací skript Selenium možno napísať v programovacích jazykoch, ako sú Java, C#, Python, Ruby, PHP, Perl a JavaScript.
  • Selenium ponúka funkcie nahrávania a prehrávania (record and playback) pomocou svojho doplnku pre prehliadač Selenium IDE.
  • Výkonný nástroj Selenium WebDriver ti pomôže vytvárať zložitejšie a pokročilejšie skripty automatizácie.
  • Cena: Nástroj je open-source, čiže zadarmo.

QTP

Nástroj QTP je nástroj určený na vykonávanie automatizovaného funkčného testovania bez potreby monitorovať systém.

  • Možno ho použiť na testovanie webových, desktopových aplikácií a klient-server aplikácií.
  • Je založený na skriptovacom jazyku VB.
  • Patrí medzi široko používané automatizačné nástroje v odvetví testovania.

JUnit

JUnit je open-source framework na unit testovanie pre programovací jazyk Java. Používa sa na písanie a vykonávanie automatizovaných testovacích prípadov.

  • Možno ho použiť spolu s nástrojom Selenium WebDriver na automatizáciu testov webových aplikácií.
  • Poskytuje niekoľko anotácií na identifikáciu testovacích metód.
  • Má testovacie spúšťače na spúšťanie testov na stanovený čas.

SoapUI

Je to jeden z popredných nástrojov na testovanie SOAP a webových služieb. Umožňuje jednoduché a rýchle vytváranie a vykonávanie funkčných, regresných a záťažových testov.

  • Grafické rozhranie softvéru sa ľahko ovláda a používa.
  • Funkcia testovania zraniteľnosti pomáha zabezpečiť webové stránky pred hackermi a vírusmi.
  • Pomocou funkcie hlásenia je možné vykonať podrobnú analýzu.
  • Funkcia SQL Injection, ktorú možno využiť na vykonávanie funkčného testovania, poskytuje niekoľko štandardných dotazov SQL a metód na identifikáciu slabých miest aplikácie.

Cucumber

Cucumber je open-source testovací nástroj napísaný v jazyku Ruby.

  • Tento nástroj najlepšie funguje pri vývoji riadenom testami (test-driven development).
  • Používa na testovanie mnohých ďalších jazykov, ako sú Java, c# a Python.
  • Tento nástroj sa zameriava na skúsenosti koncových používateľov.
  • Rýchle a jednoduché nastavenie a vykonanie testov.
  • Tento nástroj umožňuje jednoduché opakované použitie kódu v testoch vďaka štýlu písania testov.

Najlepšie postupy pre funkčné testovanie

  • Automatizuj: Funkčné testy môžu byť opakované, časovo náročné procesy, takže čím viac sú testy automatizované, tým rýchlejšie sa dajú identifikovať a opraviť chyby a tým viac sa dá ušetriť času a nákladov.
  • Špecializovaný tím pre automatizáciu: Automatizácia si vyžaduje čas, úsilie a špeciálne zručnosti. Považuje sa za najlepšie prideliť úlohy automatizácie tým, ktorí sú na ich realizáciu vybavení.
  • Včasné vytvorenie testu: Testovacie prípady je najlepšie vytvárať, keď je projekt v počiatočnej fáze, pretože požiadavky sú čersto v pamäti a neskôr v rámci vývojového cyklu projektu je vždy možné testovacie prípady zmeniť.
  • Vyber správne testy: Je veľmi dôležité vybrať správne testovacie prípady na automatizáciu. Niektoré testy si vyžadujú nastavenie a konfiguráciu počas a pred vykonaním, preto je lepšie ich neautomatizovať. Automatizuj testy, ktoré sa musia vykonávať opakovane, testy, ktoré sú náchylnejšie na ľudskú chybu.
  • Stanov si priority: Testeri majú obmedzený čas a rozpočet, preto nie je možné otestovať každú funkciu v aplikácii. Pri vytváraní testovacích prípadov najskôr zváž funkcie s vysokou prioritou.

Funkčné testovanie – otázky na pohovor

Ak sa chceš o funkčnom testovaní naučiť ešte niečo viac, prípadne sa pripraviť na pohovor, odporúčam prejsť si zopár otázok na interview, pri ktorých sa hneď dozvieš aj odpoveď. Otázky nájdeš tu:

  1. Functional testing interview questions 1
  2. Functional testing interview questions 2
  3. Functional testing interview questions 3

Template pre funkčné testovanie si môžeš stiahnuť tu – functional testing template.

Ak si IT tester a vieš po nemecky, pozri si naše firemné benefity a reaguj na pracovné ponuky.

O autorovi

Michaela Kojnoková

Agile Test Engineer

Po štúdiu informatiky na ŽU a TUKE som sa najviac ponorila do oblasti automatizácie testovania. Okrem toho sa venujem tvorbe webov, databázam, dátovej analytike, umelej inteligencii a strojovému učeniu. Mám rada cestovanie, šport a najviac si užívam čas strávený v prírode s mojimi blízkymi. LinkedIn

Daj nám o sebe vedieť