Tartalom

Kutatási témák

Automatizált Szoftvertesztelés

Egy szoftver tesztelése, azaz helyes működésének ellenőrzése legalább olyan fontos feladat, mint magának a szoftvernek az elkészítése. Ez kifejezetten igaz olyan területeken, ahol a helytelen működés potenciálisan fizikai vagy biztonsági kockázatot is jelenthet. Emellett a tesztelés határozottan erőforrásigényes feladat olyan rendszerek esetén, amelyek hosszú időn keresztül rendszeres változtatások során fejlődnek, így a tesztelési feladatokat újra és újra el kell végezni. Ezen okoknál fogva a tesztelési feladatok automatizálása fontos és kurrens kutatási terület.

A legtöbb program vár valamilyen bemeneti paramétereket, melyeken elvégzi az előre definiált műveleteit, ezzel előállít egy kimenetet. Egy egyszerű példa lehet a számológép, mely vár két számot és egy operátort közöttük: 2 + 2. Az alkalmazás bemenete így három karakter és az, hogy milyen műveletet kell elvégezni. Az viszont nem minden esetben definiált, hogy nem helyes bemenetre hogyan kell reagálnia, mi történjen olyan esetben, ha nem számok a bemeneti paraméterek, vagy nem ismert az operátor (pl. a # b)? A legtöbb ilyen sarokpont kezelhető, viszont a szoftvereket emberek írják, így a hibázás esélye fennáll.

Az automatikus szoftvertesztelési diszciplína célja, hogy a tesztelést automatizálja, így minél több sarokpontot találjon egy-egy alkalmazásban, mellyel növelhető annak megbízhatósága és csökkenthető a biztonsági kockázat. Ide tartozik az automatikus tesztesetgenerálás is, mely valamilyen szempontok szerint generál bemeneti paramétereket a megcélzott szoftver számára és ellenőrzi a kimenetet, nem megfelelő működést várva.

Teszteset Redukció

A hibát okozó tesztesetek minimalizálása – a minimális részhalmaz megtalálása, mely ténylegesen a hibát okozza – egy az első lépések közül a hiba kiváltó okának megtalálása útján. Amennyiben az automatikus tesztgenerálás során előálló, hibát okozó tesztesetek csak egy kis szelete okozza a nem elvárt viselkedést, akkor a javításhoz szükséges emberi erőforrás jelentősen megnőhet (debugging). Maga a tesztesetek manuális redukciója is időigényes feladat, így léteznek automatikus redukciós technikák a folyamat elősegítésére, mint pl. a Delta Debugging (DDMIN) algoritmus, mely struktúra nélküli inputokat minimalizál (más inputokra is működik, viszont nem foglalkozik a struktúrával). Azonban, ha ismert a program bemenetének szerkezete, a Hierarchical Delta Debugging (HDD) algoritmus gyorsabban és potenciálisan kisebb végeredményt tud előállítani a struktúra ismeretében.

Hibalokalizáció

A spektrum-alapú hibalokalizáció (SBFL) egy népszerű ötlet az automatikus hibakereséshez. Az SBFL technikák a különböző programelemek (pl. függvények) végrehajtására vonatkozó információt használnak, amelyeket tesztesetek futtatása során gyűjtenek. Az összegyűjtött információból “gyanússági pontszámot” számítanak minden elmere, majd ezek alapján egy rangsort állítanak fel. A tesztesetek futtatása során a leggyanúsabbnak ítélt programelem kerül az első helyre, így próbálja a hibát javító programozó figyelmét a megfelelő hely(ek)re irányítani.

A legjobb technikák is problémákba ütközhetnek, amennyiben a statisztika kiegyensúlyozatlan. Ha csak egyetlen teszteset okozza a hibás működést, az összes többi bemenetre pedig helyesen fut a szoftver – ahogy az automatikus tesztesetgenerálásra jellemző – akkor nehéz lehet különbséget tenni a program elemei között. A tesztesetredukció melléktermékei további tesztesetek biztosítanak a programhoz, ezek a melléktermékek felhasználhatók SBFL alkalmazásakor.

Szakdolgozat Témák

Szakdolgozni vágyó BSc-s hallgatók vezetését elsősorban a fenn említett témákban vállalok. Ezen felül témák:

  • Beágyazott rendszerekre fejlesztés (akár diplomamunka továbbfejlesztése)
  • .NET (Core) alapú szoftverfejlesztés (asztali és webalkalmazások)
  • Android (Kotlin) alkalmazásfejlesztés