Tesztautomatizálás: nagyobb hatékonyság, kevesebb hiba
Gondolta volna, hogy (egy 2020-as számítás szerint) a hibás szoftverek nem kevesebb, mint 2,08 billió (tehát 2.080.000.000.000) dollárnyi kárt okoztak az USA-ban egyedül? Ez mai árfolyamon körülbelül 759.200.000.000.000 forint, vagyis közel 800.000 milliárd forint, amely több, mint tízszerese Magyarország 2024-es költségvetési főösszegének (ha a kiadási és a bevételi oldalt összeadjuk).
Ez a hatalmas összeg persze nemcsak azokra a közvetlen költségekre korlátozódik, amelyekbe a szoftverfejlesztő cégeknek a hibák kijavítása kerül. Egy másik veszteségforrás a termelékenység csökkenése, mivel a szoftverhibák a munka leállásához, fennakadásokhoz és késésekhez vezethetnek. Pénzügyi veszteség keletkezhet a jó hírnév elvesztése miatt is – mivel a hibás szoftverek azt jelezhetik az ügyfelek számára, hogy a cég nem végez minőségi munkát. A hibák továbbá biztonsági kockázatokat is jelenthetnek, amelyeknek nagy pénzügyi hatása lehet kibertámadások, adatszivárgások, -lopások és pénzügyi csalások formájában.
A szoftvertesztelésről általában
Mindenki, akinek van valami köze a szoftverfejlesztéshez, tisztában van a szoftvertesztelés fontosságával, hiszen a hatékony tesztelés
- segít azonosítani és kijavítani a hibákat,
- lehetővé teszi a biztonsági rések felderítését és kijavítását, mielőtt a szoftver a nyilvánosság elé kerülne,
- segít javítani a felhasználói élményt,
- sőt, hozzájárul a szoftver hosszú távú fenntarthatóságához és fejleszthetőségéhez.
Szoftvertesztelés vagy szoftverminőség-biztosítás?
Bár egymáshoz szorosan kapcsolódó fogalmak, de fontos, hogy lássuk, mi a különbség a szoftvertesztelés és a szoftverminőség-biztosítás között. Mindkettő a szoftverek minőségének javítását tűzi ki célul, de míg a szoftvertesztelés a kódhibák (utólagos) felderítését helyezi a középpontba, a szoftverminőség-biztosítás a teljes fejlesztési folyamatra koncentrálva a hibák létrejöttét igyekszik megelőzni.
Manuális tesztelés
A manuális tesztelés röviden arról szól, hogy az előre elkészített teszteseteket humán tesztelők hajtják végre a tesztelendő rendszer funkcióinak használatán keresztül és így ellenőrzik a szoftver működését.
A manuális tesztelés előnyeivel is többé-kevésbé tisztában vagyunk:
- Nem igényel egyéb szoftvereszközöket a tesztelés végrehajtása
- A legszélesebb körben alkalmazható általános módszer, mely a legtöbb szoftverhibát képes felderíteni
- Intuitív módon történő felderítő tesztelést csak manuális módon lehet végezni
- A felhasználó viselkedését a humán tesztelő (egyelőre) még sokkal jobban tudja szimulálni, mint egy szoftver
Ugyanakkor a manuális teszteléssel összevetve, az alábbiak terén az automatizált tesztelés felé billen a mérleg:
- ha rendelkezésre áll a megfelelő automatizáló szoftver, az automata tesztelés hatékonyabb és gyorsabb, hiszen a tesztelő szoftver nem gondolkozik két kattintás között, nem megy ki kávézni, és nem jár le a munkaideje sem – akár éjjel is „dolgozik”, sohasem fárad el
- nagyszámú felhasználó szimulálására (ilyenek a terhelési tesztek) szintén a tesztautomatizáció a jó választás
- ugyanazon tesztek folyamatosan ismétlődő végrehajtása során (mint például regressziós tesztek) hatékonyabb megoldás a tesztek automatizálása
Tesztautomatizálás
És ha már rátértünk a tárgyra, mi is pontosan a tesztautomatizálás, más szóval automata tesztelés?
Az automata tesztelés során a tesztelt szoftvertől különálló szoftvert (tesztalkalmazást) használnak a tesztesetek végrehajtására, valamint a teszt kiértékelésére, azaz a tényleges és az előre jelzett eredmények összehasonlítására.
A tesztautomatizálás előnyei az alábbiakban foglalhatók össze:
- segít abban, hogy gyorsabban, hatékonyabban és emberi hibáktól mentesen hajtsák végre a tesztelési feladatokat
- lehetővé teszi a folyamatos integrációt és folyamatos szállítást (CI/CD), amelyek alapvető fontosságúak a modern szoftverfejlesztésben, így a fejlesztőket képessé teszi arra, hogy gyakrabban és megbízhatóbban állítsák elő és szállítsák le az újabb kódváltozatokat
- támogatja a gyorsabb hibajavítást, hiszen azonnali visszajelzést képes adni a hibákról
Milyen területeken alkalmazzuk jellemzően a tesztautomatizációt?
1. Unit-tesztelés
A unit-tesztelés a szoftver kis, egyedi összetevőinek tesztelését jelenti. Ez a tesztelés első szakasza, és bár általában manuálisan végzik, jól automatizálható, ezért érdemes itt megemlíteni.
2. Smoke-tesztek
A smoke-teszt egy funkcionális teszt, amely ellenőrzi az alapvető funkciók működését, hogy megbizonyosodjon arról, hogy a program kibírja a további tesztelést.
3. Integrációs tesztek
Ezek a tesztek biztosítják, hogy egyes szoftverek vagy szoftverelemek egymás közötti kapcsolata, integrációja megfelelően lett-e kialakítva, amikor a szoftverkörnyezet teljes egészét használják.
4. Regressziós tesztek
A regressziós tesztek funkcionális és nem funkcionális tesztek, amelyek biztosítják, hogy a szoftver egyetlen része sem károsodott az elvégzett változtatások (pl. szoftverfrissítés) következtében.
5. Biztonsági tesztek
A biztonsági tesztek szintén lehetnek funkcionálisak és nem funkcionálisak. Céljuk, hogy feltárják a szoftver potenciális biztonsági réseit, amelyeket rosszhiszemű szándékkal kihasználhatnak, és így biztonsági kockázatot jelenthetnek.
6. Teljesítménytesztek
A nem funkcionális teljesítménytesztek a rendszer stabilitását és reakciókészségét mérik fel. Ezek biztosítják, hogy a szoftver képes legyen kezelni a nagyszámú felhasználó okozta terhelést, és jobb felhasználói élményt nyújtson.
Milyen módszer mentén alkalmazzuk jellemzően a tesztautomatizációt?
1. API-tesztelés
Az API a szoftver és külvilág közötti összekötő kapocs, amelyen keresztül elérjük a rendszer funkcióit a felhasználó felület használata nélkül. Egy rendszer funkcióinak API-n keresztül történő elérése kiváló lehetőséget nyújt a tesztelés automatizálására – legyen szó akár integrációs teszt megvalósításáról komplex API-hívási folyamatokkal vagy akár terheléses tesztről az API-k nagy tömegű adatokkal való hívásával.
2. UI-tesztek
A felhasználói felület tesztje során az automatizáció segítségével szimuláljuk a tipikus felhasználói élményt. A tesztautomata a felhasználói felületen eseményeket, például billentyűleütéseket és egérkattintásokat generál, és megfigyeli a felhasználói felületen bekövetkező változásokat, így vizsgálja a rendszer helyes működését.
A DSS és a tesztautomatizáció
És mi a DSS-nél hogy állunk a tesztautomatizációval?
A technológia térhódításával párhuzamosan mi is egyre gyakrabban alkalmazzuk ezt a módszertant ügyfeleinknél, leggyakrabban a következő területeken: robotizált UI tesztelés, unit-tesztelés, teljesítménytesztek, valamint API tesztelés.
Az alábbi technológiákkal szereztünk tapasztalatot:
- Selenium: unit-tesztelés Java környezetben
- JMeter: terheléses tesztek, szoftverfunkciók tömeges tesztelése
- UIPath: robotizált tesztelés felhasználói felületeken
- Cypress: webes applikációk tesztelése
- REST Assured: API tesztelés Java környezetben
Néhány példa tesztautomatizációs projektjeinkre:
- Multinacionális gyógyszeripari ügyfelünknél a molekulákat rendszerező (regiszter-) rendszer automatizált tesztelését végezzük a gyógyszerkutatást támogatva. Itt a Cypress az alkalmazott technológia.
- Energiaipari ügyfelünknél többszáz, eredetileg manuális teszteset újragondolásában és automatizálásában működünk közre, itt a Selenium és a Katalon Studio technológiákat alkalmazzuk.
- Vezető biztosító ügyfelünknél pedig egyedi automata tesztelési keretrendszerben teszteseteket alakítunk ki, illetve a tesztesetek futását felügyeljük, Selenium és XPath támogatással.
Talán a legérdekesebb ide kapcsolódó projektünk két nagy rendszer regressziós tesztelésének automatizálása:
Banki ügyfelünknél két nagy, egymással és további rendszerekkel is integrált rendszert fejlesztettünk, amelyek évente 4-8 alkalommal kapnak jelentősebb továbbfejlesztést, Minden élesítés előtt regressziós teszteket végzünk, amelyek azt vizsgálják, hogy az adott szoftverfrissítés van-e bármilyen negatív hatással a rendszerek működésére. A két rendszer esetében összesen több mint 400 ilyen regressziós tesztesetet definiáltunk, amelyek futtatása manuális tesztelés esetén egyenként átlagosan 15 percet vesz igénybe – az összes teszteset futtatása így 80-100 órát, tehát egy tesztelő számára 2-2,5 heti munkát jelent. Évi nyolc szoftverfrissítés esetén ez már 16-20 hét, ami komoly munkaidő-ráfordítást és így költséget jelent, valamint a fejlesztések éles üzembe kerülésének ritmusát is lassítja.
Ezzel szemben, tesztautomatizáció alkalmazása esetén, ezek a tesztek akár egy éjszaka alatt, minimális munkaidő-ráfordítással már a felhasználói tesztre adás előtt is gyakrabban lefuttathatók. Az esetleges felszínre kerülő hibák javítása rövid időn belül megkezdhető, az UAT tesztre egy hibamentesebb fejlesztés kerül. komoly tesztelési költségmegtakarítást jelentve ügyfelünk oldalán.
És mit hozhat a (közel)jövő?
Az automatizált szoftvertesztelés folyamatos fejlődése és az innovatív technológiák térnyerése azt sugallja, hogy a tesztautomatizáció a jövőben egyre fontosabb szerepet fog játszani a fejlesztési folyamatokban.
Bár valószínűsíthető, hogy az automatizált tesztelés egyre inkább kiváltja a manuális tesztelést, azonban a manuális tesztelés szerepe továbbra is megmaradhat bizonyos területeken, például a felhasználói élmény (UX) ellenőrzésében vagy a komplex üzleti szcenáriók tesztelésében. Emellett a manuális tesztelés kreatív megközelítése és emberi szempontból történő értékelése olyan területeken is kiemelkedő maradhat, ahol az automatizált tesztelésnek még megvannak a korlátai.
A tesztautomatizációban várhatóan olyan technológiák szerepe fog nőni a közeljövőben, mint az AI és a gépi tanulás, amelyek lehetővé teszik az automatizált tesztek még intelligensebbé válását és a tesztek adaptálását a változó környezethez. Emellett a fejlett adatelemzés és a tesztadatok használata segíthet a tesztelési folyamatok további optimalizálásában és a hibák korai azonosításában.
Összességében az automatizált szoftvertesztelés ígéretes jövő előtt áll, ami további innovációkat hozhat a szoftverfejlesztés terén is.
Az Ön cégénél is lenne lehetőség a tesztelési folyamatok hatékonyabbá és költséghatékonyabbá tételére? Miért ne beszélgessünk erről egy jó kávé mellett?