Tesztelési módszerek
Két fő fogalmat kell tisztázni, mielőtt a tesztelés módszereibe belekezdenénk:
- Verifikáció: Amit elkészítünk, az helyesen működik-e?
- Validáció: A jó szoftvert készítjük-e, megoldja-e az ügyfél/felhasználó problémáját?
A validációt akár már a tervezési fázisban, még az első programkódsor leírása előtt el tudjuk kezdeni. Verifikálni viszont értelemszerűen csak elkészült programot lehet.
A tesztelési módszereket sokféleképp lehet csoportosítani, és ideálisan mindegyiket használjuk a megfelelő szinteken:
Automatikus vs. Kézi
- Automatikus: a teszteket számítógép értékeli ki, és egyértelmű visszajelzést ad a sikerről.
- Előny:
- Könnyen megismételhető
- Akár nagyon sok tesztesetet is végig tud nézni
- Tesztelés közben (ideális esetben) nem hibázik
- Hátrány:
- Teszteseteket pontosan meg kell fogalmazni
- Nem minden esetben alkalmazható
- Előny:
- Kézi: a teszteket ember végzi el.
- Előny:
- Olyan hibákra is ráakadhatunk, amelyeket előre nem specifikáltunk
- “Szubjektív” hibákat is lehet ellenőrzni (pl. grafikus felület átláthatósága)
- Hátrány:
- Az emberi erőforrás drága
- Tesztelés közben nagyobb a hiba esélye, főleg repetitív feladatoknál
- Előny:
Szisztematikus vs. ad-hoc
- Szisztematikus
- A teszteseteket előre definiáljuk, és előre megadott módszerrel értékeljük ki
- Lehet automatikus vagy kézi
- Ad-hoc
- A tesztelőnek szabad kezet adunk, nincsenek instrukciók
- Csak kézi
Feketedoboz vs. fehérdoboz
- Feketedoboz:
- Nem ismerjük a szoftver belső felépítését
- Adott bemenetre adott kimenetet kell adni, a belső felépítést nem nézzük
- Fehérdoboz:
- A bemenetet úgy választjuk meg, hogy minden elágazás, ciklus, belső függvény stb. legyen tesztelve
- A kód-lefedettséget IDE-eszközökkel lehet mérni
Tesztelési szintek
Egységtesztelés
Egyetlen osztályt, függvényt tesztelünk, a programtól izoláltan.
- Automatikus
- Szisztematikus
- Fehérdoboz
- Lehet kombinálni code coverage eszközökkel lehet fehérdoboz is, pl. a siker feltétele, hogy a tesztesetek 100%-os lefedetséget produkáljanak
Egységtesztelés a gyakorlatban, NUnit segítségével
Integrációs tesztelés
Több komponenst együtt vizsgál, és azt dönti el, hogy az adott komponensek interfésze valóban megfelel-e a secifikáltaknak, és együtt is jól működnek-e.
- Többnyire automatikus
- Többnyire szisztematikus
- Fektetedoboz: a komponenseket kívülről vizsgáljuk
Rendszerteszt
A teljes rendszert egészben, az összes komponensével vizsgáljuk, az éles környezettel megegyező körülmények közt.
- Többnyire kézi
- Szisztematikus és ad-hoc
- Feketedoboz
Elfogadási teszt, végtesztelés
A megrendelő, ügyfél végzi, hogy az elkészült rendszer valóban megfelel-e a specifikáltaknak.
A többi teszttel ellentétben (amelyeket a fejlsztés során folyamatosan végzünk) ez általában egyszer, a szoftver átadásakor történik meg.
Egyéb gyakori teszt-típusok
Regressziós tesztelés
Nincs rendszer hiba nélkül. Ha egy hibát javítunk, akkor felvehetünk hozzá egy tesztesetet (egységtesztet, egy új esetet a kézi teszforgatókönyvbe stb.), hogy a későbbiekben ugyanez a hiba ne jöjjön elő.
Ezeket a teszteseteket hívjük összefoglaló néven regressziós teszteknek. Nem egy konkrét tesztelési szint, az egységteszttől a rendszertesztig bárhol jelentkezhet.
Alfa- és béta-teszt
Az elfogadási/végtesztetlést el lehet végezni a rendszer elkészülte előtt is, hogy meggyőződjük a rendszer készültségéről, ismert hibáiról.
Hagyományosan alfa-tesztelésnek hívjuk, ha a tesztelést cégen belül végezzük, és béta-tesztelésnek, ha már egy zárt körű, de valódi felhasználók végzik.
A béta-tesztelés fogalma mára kezd kissé elmosódni, elég gyakori mindkét eset:
- A szoftver évekig béta-verzióban található, mert a fejlesztőcsapat nem meri rámondani, hogy készen van.
- A Gmail 2004 áprilisától 2009 júliusáig volt béta verzióban, 5 évig
- Lásd az “örök béta” (Perpetual beta) fogalmát
- A szoftvert kellő tesztelés nélkül adják ki, teli hibával, amelyek csak a későbbi frissítések során lesznek csak kijavítva
- Ez általában annak a jele, hogy amit kiadtak, az valójában csak a béta-verzió lenne
- Sokan ennek tartják a “Fallout 76” játék kezdeti kiadását
Nem funkcionális tesztelés
Azok a tesztek, amelyek nem a helyes / helyteenséget, hanem az egyéb paramétereket vizsgálják:
- Stressz-tesztelés: erőforrásigény mérése, extrém mennyiségű bemenet (pl. egyszerre sok felhasználó, nagy mennyiségű adat stb.) kezelése
- Biztonsági tesztelés: hálózati, webes alkalmazások esetén kiemelkedően fontos
- Használhatósági teszt: a felhasználói interfész könnyen kezelhető, megérthető
- Akadálymentesítés:
- Az alkalmazás használható-e képernyő-felolvasó szoftverekkel
- Nem okoz-e problémát színtévesztőknek
- Támogat-e nagy kontrasztú módot
- Használható-e csak billentyűzettel / csak egérrel
- …
- Akadálymentesítés:
Folyamatos tesztelés (continuous testing)
Az automatikus teszteket nem csak igény szerint, a fejlesztő indíthatja el, hanem commitoláskor, vagy bizonyos időközönként automatikusan lefuthatnak.
- A hivatalos C# fordító - a tesztek rendszeresen lefutnak, és a kimenetet egy zöld succeeded / piros failed üzenet jelzi a táblázatban
- A Mozilla Firefox böngésző legfrissebb változatából naponta 2x készül egy újabb változat. Ezt szokás “nightly”, éjszakai verziónak hívni. A fordítás, tesztelés sok esetben több órás feladat, ezért szokás éjszakára beütemezni, hogy a fejlesztőknek ne napközben kelljen várni rá. Ha délután befejezte a munkáját, másnapra a teljes böngészővel együtt végezheti az integrációs / rendszertesztet.
Dokumentumok
A kézi szisztematikus teszteléshez, azért hogy a tesztelő tudja, mit is kell vizsgálnia, két dokumentum szükséges:
- Tesztforgatókönyv, amely leírja, hogy pontosan hova kell kattintani, mit kell begépelnie a tesztelőnek
- Szerepel benne az elvárt, helyes kimenet is
- Tesztjegyzőköny, amit a tesztelő készít a forgatókönyv alapján, szerepel benne:
- Ki, mikor, hol, melyik eszközön végezte a tesztelést
- Az elvégzett teszteket, azok tényleges kimenetét, és a teszt értékelését (helyes / helytelen)
Ha a jegyzőkönyvet sablonként készítjük el, a két dokumentum kombinálható is.
Jegyzőkönyvet készíthetünk ad-hoc teszteléshez is, ebben az esetben a jegyzőkönyvben kell szerepelnie az elvégzett lépéseknek, az elvárt és a tényleges kimenetnek.
További olvasnivalók
Ez csak egy ízelítő a tesztelés témaköréből. Rengeteg teszmódszer létezik, és bármely említett elemet még ki lehetne fejteni részletesebben.