Lekce 3 - Testování v průběhu SDLC - Dovednosti a osvědčené postupy
V předchozí lekci, Testovací proces, jsme si vysvětlili, proč je testování nezbytné. Poté jsme se podívali na základní principy, testovací činnosti, testware a role v testování.
V dnešní lekci si vysvětlíme, jaké jsou základní dovednosti a osvědčené postupy testerů, a podíváme se na testování v kontextu software development life cycle.
Základní dovednosti a osvědčené postupy
Aby mohli testeři dobře vykonávat svou práci, potřebují mít určité základní dovednosti. Mimo jiné by měli být dobrými týmovými hráči a měli by být schopni pracovat v různých úrovních nezávislosti testování:

Tester musí mít následující klíčové dovednosti:
- znalost testování,
- důkladnost, pečlivost, zvídavost, důraz na detail, schopnost pracovat metodicky,
- dobré komunikační dovednosti, aktivní naslouchání, schopnost být týmovým hráčem,
- analytické myšlení, kritické myšlení, kreativita,
- technické znalosti,
- znalost domény.
Komunikační dovednosti
Pro testery jsou klíčové komunikační dovednosti – sdělování výsledků testů může být totiž vnímáno jako kritika produktu a jeho autora. Termín konfirmační zkreslení popisuje tendenci člověka obtížně přijímat informace, které jsou v rozporu s jeho stávajícími názory. V důsledku toho mohou někteří lidé vnímat testování jako destruktivní aktivitu, přestože významně přispívá k úspěchu projektu a ke kvalitě produktu. Informace o defektech a selháních by měly být komunikovány konstruktivně a bez emocí.
Týmová spolupráce
Tester musí také efektivně pracovat v týmu a přispívat k týmovým cílům. Týmový přístup umožňuje, aby každý člen s potřebnými znalostmi plnil různé úkoly a aby všichni nesli odpovědnost za kvalitu. Sdílený pracovní prostor (fyzický nebo virtuální) podporuje komunikaci a spolupráci, čímž se zvyšuje týmová dynamika a využívají se různé dovednosti ve prospěch projektu.
Testeři musí úzce spolupracovat například s byznysovými zástupci a vývojáři a předávat své znalosti týmu, aby podpořili vývoj produktu. Tento přístup ale nemusí být vhodný pro všechny projekty, například v bezpečnostně kritických scénářích, kde je nezávislost testování klíčová.
Nezávislost testování
Nezávislost testování zvyšuje efektivitu testerů při hledání defektů, protože jejich pohled není ovlivněn osobní zaujatostí vývojářů. Nezávislost však nenahrazuje znalost systému – i vývojáři mohou najít mnoho defektů ve svém kódu. Testování může být prováděno autorem, kolegy nebo testery z jiných týmů či organizací. Nejlepší přístup obvykle zahrnuje více úrovní nezávislosti.
Praktický příklad
Představme si situaci, kdy tým vývojářů vytváří novou mobilní aplikaci. Po dokončení základních funkcí je aplikace otestována samotnými vývojáři – první úroveň nezávislosti. Vývojáři ovšem mohou přehlédnout chyby, které jsou způsobeny tím, že vývojáři nejsou schopní vnímat problémy z pohledu koncového uživatele. Proto je aplikace následně předána jinému týmu testerů, kteří nebyli zapojeni do vývoje této aplikace – druhá úroveň nezávislosti. Tito testeři mají jiný pohled na věc, nejsou ovlivnění znalostí interního kódu. Testování však pokračuje ještě dál. Firma najme externí testovací společnost – třetí úroveň nezávislosti – aby provedla testy aplikace. Externí testeři nemají žádný přímý kontakt s vývojovým týmem ani s interními testery, takže mají úplně nezaujatý pohled na produkt:

Výhodou nezávislosti je větší pravděpodobnost rozpoznání různých druhů defektů díky odlišnému pohledu testerů. Nevýhodou však může být izolace od vývojového týmu, což může vést k problémům v komunikaci, oslabení spolupráce nebo zpoždění ve vydávání produktu.
Testování v kontextu software development life cycle
Model SDLC určuje, jak spolu logicky i chronologicky souvisejí různé fáze vývoje a typy činností, které jsou prováděné v rámci tohoto procesu. Mezi kategorie modelů SDLC patří sequential development models (sekvenční modely vývoje), iterative development models (iterativní modely vývoje) a incremental development models (inkrementální modely vývoje). Dále si jednotlivé metody vysvětlíme podrobněji.
Některé činnosti v rámci procesů vývoje softwaru lze také popsat podrobnějšími metodami a agilními postupy. Mezi takové metody patří:
- acceptance test-driven development – ATDD (vývoj řízený akceptačními testy),
- behavior-driven development – BDD (vývoj řízený chováním),
- domain-driven design – DDD (návrh řízený doménou),
- extreme programming – XP (extrémní programování),
- feature-driven development – FDD (vývoj řízený užitnými vlastnostmi),
- kanban, lean IT, scrum,
- test-driven development – TDD (vývoj řízený testováním).
Vliv software development life cycle na testování
Aby bylo testování úspěšné, musí být přizpůsobeno SDLC. Volba SDLC má dopad na rozsah a načasování testovacích činností, úroveň detailu testovací dokumentace, volbu technik testování a přístupu k testování, rozsah automatizace testů a role a zodpovědnosti testerů:

Sequential development models
V sequential development models se testeři v počátcích zaměřují na revize požadavků a test design, protože kód vzniká později, což omezuje dynamic testing. Například při vývoji zdravotnického systému podle vodopádového modelu se v první fázi analyzují všechny požadavky, na jejichž základě se připraví detailní testovací scénáře. Teprve po dokončení celé fáze vývoje, například implementace modulu pro správu pacientů, začíná samotné testování, které může odhalit problémy později, kdy je jejich oprava nákladnější.
Iterative a incremental development models
V iterative a incremental development models se s každou iterací vytváří funkční prototyp, což umožňuje jak static testing, tak dynamic testing na všech úrovních. Časté vydávání verzí vyžaduje rychlou zpětnou vazbu a důkladný regression testing. Jako příklad si vezměme mobilní aplikaci pro správu financí. Při vývoji se v každé iteraci implementují nové funkce, jako je sledování transakcí nebo správa rozpočtu. Každá nová verze aplikace je průběžně testována a případné chyby jsou opravovány v dalších iteracích, což umožňuje rychlou reakci na problémy a zpětnou vazbu uživatelů.

Agile development
Agile development (agilní vývoj) klade důraz na změny během projektu, s menší dokumentací a velkým důrazem na automatizaci testů, které podporují častý regression testing. Manual testing (manuální testování) se často opírá o zkušenostní techniky, které nevyžadují detailní analýzu. Při vývoji webové aplikace pro správu úkolů ve scrum týmu jsou jednotlivé funkce, jako například možnost komentování úkolů, dodávány v krátkých sprintech. Jde o nedlouhé, časově omezené úseky v rámci agile development softwaru, během nichž tým pracuje na dokončení konkrétních úkolů nebo funkcí. Automatizované testy ověřují funkčnost nových prvků po každé změně, zatímco manuální testeři testují nové funkce rychle a pružně na základě svých zkušeností, bez rozsáhlé dokumentace.
Software development life cycle a osvědčené testovací postupy
Mezi osvědčené testovací postupy, nezávisle na zvoleném modelu SDLC, patří:
- Ke každé vývojové činnosti existuje odpovídající testovací činnost, takže všechny vývojové činnosti podléhají kontrole kvality. Když vývojáři dokončí nový modul pro výpočet ceny v e-shopu, testeři okamžitě připravují testovací scénáře, které ověří, zda výpočet probíhá správně.
- Existují různé úrovně testování a každá má své specifické cíle. Tím je testování přiměřeně detailní a zároveň nedochází k nadbytečnostem. Testeři provádějí nejprve například jednotkové testy pro kontrolu jednotlivých funkcí výpočtu, poté integrační testy, aby ověřili spolupráci mezi moduly, a nakonec systémové testy, které zajišťují, že celá aplikace funguje správně.
- Test analysis a test design pro danou úroveň začíná během odpovídající vývojové fáze SDLC, takže je splněn princip včasného testování. Při návrhu systému pro správu uživatelských účtů se testeři zapojují hned od začátku a vytvářejí test casy na základě specifikací, ještě než je systém plně vyvinut.
- V okamžiku, kdy je k dispozici pracovní verze (draft) libovolného pracovního produktu, jsou do jeho revize zapojeni testeři, což podporuje přístup shift-left. Jakmile je první verze mobilní aplikace hotová, testeři provádějí revizi funkcí, aby odhalili chyby ještě před nasazením do produkčního prostředí, čímž se předchází pozdějším problémům.
Zdrojem této lekce jsou Učební osnovy – Certifikovaný tester základní úrovně ver. 4.0. Copyright © 2023 autoři verze 4.0: Renzo Cerquozzi, Wim Decoutere, Klaudia Dussa-Zieger, Jean-François Riverin, Arnika Hryszko, Martin Klonk, Michaël Pilaeten, Meile Posthuma, Stuart Reid, Eric Riou du Cosquer (předseda), Adam Roman, Lucjan Stapp, Stephanie Ulrich (místopředseda), Eshraka Zakaria
V následujícím kvízu, Kvíz - Základy testování a testovací proces, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.