V testování software se objevuje hodně názvů i přístupů, což často nastolí nepochopení a nedorozumění, co a kdy se vlastně testuje, co má být správným výsledkem konkretního testování. Vezmeme testerskou lupu a jednotlivé případy prozkoumáme podrobněji.

Testovaní se dá zajisté dělit dle mnoha kritérií. Pokud nevíte, co testování softwaru je, přečtěte si nejdřív článek Co je testování softwaru. Pokud vás zajímá, jakým způsobem se dá software testovat, přečtěte si článek Jak testovat software.

A teď již pojďme na jednotlivé druhy testování. V následujících odstavcích si povíme více o typech testování dle fáze testování, znalosti kódu nebo způsobů realizace.

Podle fáze testování: testovat můžeme v různých částech vývojového cyklu

  • Unit testy – přichází na řadu nejdříve. Píší je obvykle přímo programátoři a jedná se o základní prvky pro ověření kódu a jeho funkčnosti. Ověřuje se jednotka (unita). Testy jsou automatizované. Je stěžejní například v TDD (Test Drivern Development). Detaily najdete zde.
  • Modul Testy – jsou stále spíše doménou programátorů. Jejich využití je především na velkých projektech, kdy se snažíme ověřit funkčnost nějaké komponenty nebo modulu. Často se od unit testů moc neliší. Odlišnost spočívá spíš v rozsahu – modul testy představují testy např. celé knihovny.
  • Integrační testy – tvoří je obvykle testeři poté, co programátoři skončí svou práci, a je třeba ověřit, zda jednotlivé moduly/komponenty fungují dohromady.
  • Funkční testy – funkční testování obvykle zkoumá, co systém dělá. Funkční testování neznamená, že testujete funkci (metodu) modulu nebo třídy. Testuje část funkčnosti celého systému.
    Dělí se dále na:
  • Systémové testy – z pohledu hierarchie se jedná o nejvyšší úroveň testování, která se provádí ještě ve vývojovém týmu. Jejich cílem je ověřit, zda systém jako celek funguje dle požadavků a očekávání zákazníka.
  • Akceptační testy – jsou realizovány na straně zákazníka. Jejich cílem je ověřit, že produkt splňuje očekávané funkce a kvalitu.

Nutno dodat, že toto rozdělení je bližší spíš procesu vývoje formou vodopádu. Moderní agilní metody tyto termíny používají také, jejich význam je ale oslaben. Více to rozeberu v článku o agilním testování.

Podle znalosti kódu:

  • White Box – pokud jsou testy psané na základě znalosti kódu. Typickým představitelem jsou Unit testy.
  • Black Box – na SW se díváme, jako by se jednalo o černou skříňku. Zajímá nás pouze, jak reaguje. Na základě konkrétních vstupů sledujeme výstupy. Typickým představitelem jsou např. funkční a akceptační testy.

Podle způsobu realizace testů:

  • Manuální – jedná se o testy prováděné přímo testerem podle testovacích případů (testcase). V dnešní době je již ve spoustě oblastech na ústupu a je nahrazováno automatizovaným testováním. Stále má ale své nenahraditelné místo v některých oblastech (např. exploratory testování).
  • Automatizované – automatizace je hnacím pohonem pokroku, a tedy i v testování zažívá v posledních letech enormní nárůst. Automatizace je často prováděna pomocí skriptovacích jazyků (např. Python) a jejím cílem je ověřit opakující se scénáře za pomoci krátkých programů. Více se tomu budu věnovat v článku o automatizovaných testech.
  • Exploratory testy – je to v podstatě manuální testování. Liší se ale způsobem a záměrem. Testy se na rozdíl od manuálního testování neprovádějí podle předem popsaného scénáře – jejich cílem je prozkoumat, jak se testovaný SW chová. Tedy zjistit jeho vlastnosti a funkce. Použití tohoto způsobu je často na začátku agilního cyklu.

 

Podle dimenzí kvality:

Dimenze kvality jsou definované normou ISO/IEC 25010:2011 a slouží nám především k pochopení že testovat jen funkce je nedostatečné a tedy, že pohledů na kvalitu je více.

  • Funkčnost (Functionality) – správné chování funkcí systému, jak je definováno funkční specifikací (funcspec, FS).
  • Výkon (Performance) – zda systém není pomalý a zvládne větší množství současně pracujících uživatelů, anebo naopak zda si i při naplnění všech požadavků na obsluhu uživatelů nebere příliš systémových zdrojů.
  • Kompatibilita (Compatibility) – možnost kombinace s jiným softwarem nebo hardwarem,
  • Použitelnost (Usability) – zda vůbec a jak lze dosáhnout požadovaného cíle, zda je systém uživatelsky přívětivý, zda se s ním dobře pracuje: i když se SW chová podle uživatele „špatně“, může stále jít o „správné chování“ podle FS, pak jde ovšem o chybu samotného FS a smlouvy, kterou je vázán.
  • Spolehlivost (Reliability) – zda se chová stejně za všech okolností, zvláště po přetížení, po výpadku či chybě, zda tyto stavy umí detekovat a hlásit.
  • Bezpečnost (Security) – jsou oddělené přístupové role, není možné se dostat do systému bez správného hesla
  • Udržitelnost – dá se systém upgradovat, testovat, je modulární tedy můžeme vyměňovat jednotlivé části
  • Přenositelnost – nakolik je aplikace schopná fungovat na jiném HW, na jiných OS

Příště se dozvíte o technikách testování software.