3. diel - Testovanie v priebehu SDLC - Zručnosti a osvedčené postupy Nové
V predchádzajúcej lekcii, Testovací proces , sme si vysvetlili, prečo je testovanie nevyhnutné. Potom sme sa pozreli na základné princípy, testovacie činnosti, testware a role v testovaní.
V dnešnej lekcii si vysvetlíme, aké sú základné zručnosti a osvedčené postupy testerov a pozrieme sa na testovanie v kontexte software development life cycle, vplyv SDLC na testovanie a tiež na osvedčené testovacie postupy.
Základné zručnosti a osvedčené postupy
Aby mohli testeri dobre vykonávať svoju prácu, potrebujú mať určité základné zručnosti, okrem iného by mali byť dobrými tímovými hráčmi a mali by byť schopní pracovať v rôznych úrovniach nezávislosti testovania:
Tester musí mať nasledujúce kľúčové zručnosti:
- Znalosť testovania
- Dôkladnosť, starostlivosť, zvedavosť, dôraz na detail, schopnosť pracovať metodicky
- Dobré komunikačné zručnosti, aktívne počúvanie, schopnosť byť tímovým hráčom
- Analytické myslenie, kritické myslenie, kreativita
- Technické znalosti
- Znalosť domény
Pre testerov sú kľúčové komunikačné schopnosti – oznamovanie výsledkov testov môže byť totiž vnímané ako kritika produktu a jeho autora. Termín konfirmačné skreslenie popisuje tendenciu človeka ťažko prijímať informácie, ktoré sú v rozpore s jeho existujúcimi názormi. V dôsledku toho môžu niektorí ľudia vnímať testovanie ako deštruktívnu aktivitu, hoci významne prispieva k úspechu projektu a kvalite produktu. Informácie o defektoch a zlyhaniach by mali byť komunikované konštruktívne a bez emócií.
Tímová spolupráca
Tester musí tiež efektívne pracovať v tíme a prispievať k tímovým cieľom. Tímový prístup umožňuje, aby každý člen s potrebnými znalosťami plnil rôzne úlohy, a všetci nesú zodpovednosť za kvalitu. Zdieľaný pracovný priestor (fyzický alebo virtuálny) podporuje komunikáciu a spoluprácu, čím sa zvyšuje tímová dynamika a využívajú sa rôzne zručnosti v prospech projektu.
Testeri musia úzko spolupracovať napríklad s biznisovými zástupcami a vývojármi a odovzdávať svoje znalosti tímu, aby podporili vývoj produktu. Tento prístup však nemusí byť vhodný pre všetky projekty, napríklad v bezpečnostne kritických scenároch, kde je nezávislosť testovania kľúčová.
Nezávislosť testovania
Nezávislosť testovania zvyšuje efektivitu testerov pri hľadaní defektov, pretože ich pohľad nie je ovplyvnený osobnou zaujatosťou vývojárov. Nezávislosť však nenahrádza znalosť systému – aj vývojári môžu nájsť mnoho defektov vo svojom kóde. Testovanie môže byť vykonávané autorom, kolegami, alebo testermi z iných tímov či organizácií. Najlepší prístup zvyčajne zahŕňa viac úrovní nezávislosti.
Praktický príklad
Predstavme si situáciu, keď tím vývojárov vytvára novú mobilnú aplikáciu. Po dokončení základných funkcií je aplikácia otestovaná samotnými vývojármi - prvá úroveň nezávislosti. Vývojári však môžu prehliadnuť chyby, ktoré sú spôsobené tým, že nie sú schopní vnímať problémy z pohľadu koncového používateľa. Preto je aplikácia následne odovzdaná inému tímu testerov, ktorí neboli zapojení do vývoja tejto aplikácie - druhá úroveň nezávislosti. Títo testeri majú iný pohľad na vec, nie sú ovplyvnení znalosťou interného kódu. Testovanie však pokračuje ešte ďalej. Firma najme externú testovaciu spoločnosť - tretiu úroveň nezávislosti, aby vykonala testy aplikácie. Externí testeri nemajú žiadny priamy kontakt s vývojovým tímom ani s internými testermi, takže majú úplne nezaujatý pohľad na produkt:
Výhodou nezávislosti je väčšia pravdepodobnosť rozpoznania rôznych druhov defektov vďaka odlišnému pohľadu testerov. Nevýhodou však môže byť izolácia od vývojového tímu, čo môže viesť k problémom v komunikácii, oslabeniu spolupráce alebo oneskoreniu vo vydávaní produktu.
Testovanie v kontexte software development life cycle
Model SDLC určuje, ako spolu logicky aj chronologicky súvisia rôzne fázy vývoja a typy činností, ktoré sú vykonávané v rámci tohto procesu. Medzi kategórie modelov SDLC patria sequential development models (sekvenčné modely vývoja), iterative development models (iteratívne modely vývoja) a incremental development models (inkrementálne modely vývoja). Ďalej si jednotlivé metódy vysvetlíme podrobnejšie.
Niektoré činnosti v rámci procesov vývoja softvéru možno tiež popísať podrobnejšími metódami a agilnými postupmi. Medzi takéto metódy patria:
- aceptance test-driven development - ATDD (vývoj riadený akceptačnými testami),
- behavior-driven development - BDD (vývoj riadený správaním),
- domain-driven design - DDD (návrh riadený doménou),
- extrémne programming - XP (extrémne programovanie),
- feature-driven development - FDD (vývoj riadený úžitkovými vlastnosťami),
- Kanban, Lean IT, Scrum
- test-driven development - TDD (vývoj riadený testovaním).
Aby bolo testovanie úspešné, musí byť prispôsobené SDLC. Voľba SDLC má vplyv na rozsah a načasovanie testovacích činností, úroveň detailu testovacej dokumentácie, voľbu techník testovania a prístupu k testovaniu, rozsah automatizácie testov a role a zodpovednosti testerov:
Sequential development models
V sequential development models sa testeri v počiatkoch zameriavajú na revízie požiadaviek a test design, pretože kód vzniká neskôr, čo obmedzuje dynamic testing. Napríklad pri vývoji zdravotníckeho systému podľa vodopádového modelu sa v prvej fáze analyzujú všetky požiadavky, na základe ktorých sa pripravia detailné testovacie scenáre. Až po dokončení celej fázy vývoja, napríklad implementácie modulu pre správu pacientov, začína samotné testovanie, ktoré môže odhaliť problémy neskôr, keď je ich oprava nákladnejšia.
Iterative a incremental development models
V iterative a incremental development models sa s každou iteráciou vytvára funkčný prototyp, čo umožňuje statický testing aj dynamic testing na všetkých úrovniach. Časté vydávanie verzií vyžaduje rýchlu spätnú väzbu a dôkladný regression testing. Ako príklad si vezmeme mobilnú aplikáciu na správu financií. Pri vývoji sa v každej iterácii implementujú nové funkcie, ako je sledovanie transakcií alebo správa rozpočtu. Každá nová verzia aplikácie je priebežne testovaná a prípadné chyby sú opravované v ďalších iteráciách, čo umožňuje rýchlu reakciu na problémy a spätnú väzbu používateľov:
Agile development
Agile development (agilný vývoj) kladie dôraz na zmeny počas projektu, s menšou dokumentáciou a veľkým dôrazom na automatizáciu testov, ktoré podporujú častý regression testing. Manual testing (manuálne testy) sa často opierajú o skúsenostné techniky, ktoré nevyžadujú detailnú analýzu. Pri vývoji webovej aplikácie pre správu úloh v Scrum tíme sú jednotlivé funkcie, ako napríklad možnosť komentovania úloh, dodávané v krátkych šprintoch, čo sú krátke, časovo obmedzené úseky v rámci agile development softvéru, počas ktorého tím pracuje na dokončení konkrétnych úloh alebo funkcií. Automatizované testy overujú funkčnosť nových prvkov po každej zmene, zatiaľ čo manuálni testeri testujú nové funkcie rýchlo a pružne na základe svojich skúseností, bez rozsiahlej dokumentácie.
Software development life cycle a osvedčené testovacie postupy
Medzi osvedčené testovacie postupy, nezávisle na zvolenom modeli SDLC, patria:
- Ku každej vývojovej činnosti existuje zodpovedajúca testovacia činnosť, takže všetky vývojové činnosti podliehajú quality control. Keď vývojári dokončia nový modul na výpočet ceny v e-shope, testeri okamžite pripravujú testovacie scenáre, ktoré overia, či výpočet prebieha správne.
- Existujú rôzne úrovne testovania a každá má svoje špecifické ciele. Tým je testovanie primerane detailné a zároveň nedochádza k nadbytočnostiam. Testeri vykonávajú napríklad najprv jednotkové testy na kontrolu jednotlivých funkcií výpočtu, potom integračné testy, aby overili spoluprácu medzi modulmi, a nakoniec systémové testy, ktoré zaisťujú, že celá aplikácia funguje správne.
- Test analysis a test design pre danú úroveň začína počas zodpovedajúcej vývojovej fázy SDLC, takže je splnený princíp včasného testovania. Pri návrhu systému pre správu užívateľských účtov sa testeri zapájajú hneď od začiatku a vytvárajú test časy na základe špecifikácií, ešte než je systém plne vyvinutý.
- V okamihu, keď je k dispozícii pracovná verzia (draft) ľubovoľného pracovného produktu, sú do jeho revízie zapojení testeri, čo podporuje prístup shift-left. Akonáhle je prvá verzia mobilnej aplikácie hotová, testeri vykonávajú revíziu funkcií, aby odhalili chyby ešte pred nasadením do produkčného prostredia, čím sa predchádza neskorším problémom.
V budúcej lekcii, Testovanie v priebehu SDLC po druhej - DevOps a automatizácia , sa pozrieme na vývoj softvéru riadený testovaním, vysvetlíme si čo je DevOps a shift-left prístup. Nakoniec si vysvetlíme retrospektívy a zlepšovanie procesov.