Testy, které ověřují, že aplikace správně plní všechny úkoly pro které je určena, nazýváme funkční testy. Testují se obecně všechny funkce, které jsou v aplikaci implementovány, a ověřuje se, že fungují správně a že odpovídají požadavkům zákazníka [1]. Ověřuje, zda daný software disponuje funkcemi, které jsou uvedeny v požadavcích zákazníka.
Nefunkční testy spočívají v testování všech vlastností aplikace, které přímo nesouvisí s jejími funkcemi, ale zároveň jsou podstatné pro její správné fungování. Řadí se sem především výkonové testování (Performance testing), které má ověřit například, že aplikace i pod zátěží (větší počet současně pracujících uživatelů, větší objem dat, atd.) bude pracovat dostatečně „svižně“. Testuje se také připravenost aplikace pro budoucí nárůst zátěže. A testování neujde ani chování aplikace k počítači, na kterém běží. Tedy třeba to, zda zbytečně nezatěžuje paměť a procesor.
Z výše uvedeného je zřejmé, že funkční testy mají na výslednou bezporuchovost softwaru významný vliv. Proto je na tuto kategorii kladen veliký důraz během celého testovacího cyklu software. Nezáleží přitom na rozsahu testovaného produktu. Nejčastěji se tato kategorie využívá v integrační, systémové a akceptační úrovni testování. Využití této kategorie přináší velké množství odhalených chyb, tedy alespoň ve srovnání s ostatními kategoriemi. Nefunkční testování má také nepochybný vliv na výslednou bezporuchovost software. Bohužel v praxi na něj většinou není příliš pamatováno nebo se této kategorii testů nedostává dostatečná doba na provedení všech potřebných testů.
[1] JORGENSEN, Paul. Software testing. Boca Raton: Auerbach. 2008. 416 s. ISBN 0-8493-7475-8