Tesztgeneráló eszköz fejlesztése C programokhoz

OData támogatás
Konzulens:
Dr. Micskei Zoltán Imre
Méréstechnika és Információs Rendszerek Tanszék

Annak ellenére, hogy a C nyelv nem tekinthető újnak, mégis számos alkalmazása van mind a mai napig. Elsősorban beágyazott rendszerekben használják, ahol számít a hatékonyság. Erre a C alacsony szintű memóriakezelése megfelelő. Nem csak nem lett egy elfeledett nyelv a C, de az IoT (Internet of Things) elterjedésével várhatóan még a mainál is nagyobb körben kerül alkalmazásra.

Láttuk, hogy a C nyelv fő felhasználási területe a beágyazott rendszerek. Ezek nem feltétlenül, de az esetek egy részében biztonságkritikus rendszerekben találhatók. A biztonságkritikus rendszerekre az jellemző, hogy egy meghibásodás katasztrofális következményekkel járhat; emberéletek kerülhetnek veszélybe, vagy súlyos anyagi, illetve környezeti kár keletkezhet. Gondoljunk csak bele, hogy egy repülőgép vezérlő, vagy atomreaktor szabályozó meghibásodása milyen következményekkel járhat.

Az ilyen esetek elkerülésére szolgál a szoftverek verifikációja. Ennek a célja, hogy megtaláljunk hibákat a szoftverben, vagy kimutassuk azoknak a hiányát. Az egyik legnépszerűbb verifikációs módszer a tesztelés. Bár tesztelés esetén nem tudjuk matematikailag bizonyítani, hogy egy rendszer nem tartalmaz hibát, mégis segít megbizonyosodni a szoftver minőségéről. Mivel a tesztelés egy igen elterjedt eljárás, ezért sok különböző módszer alakult ki rá. Ezek közül a diplomamunka a kód-alapú tesztgenerálással foglalkozik.

A kód-alapú tesztgenerálás esetében hozzáférünk a forráskódhoz, teljes mértékben ez alapján történik az automatikus teszteset generálás. A kód-alapú tesztgenerálás végrehajtására is létezik több különböző módszer, például a szimbolikus végrehajtás, kereső algoritmusok, véletlent használó algoritmusok, annotáció-alapú tesztgenerálás.

Ebben a dolgozatban egy olyan kód-alapú tesztgeneráló eszköz kerül elkészítésre, bemutatásra, amely C nyelven írt forráskódokhoz képes teszteket generálni, ezeket lefuttatni, fedettségi értékeket szolgáltatni. A tesztbemenetek generálására modellellenőrzőt használok, ami instrumentált kódon assert utasításokkal lefedésére van beállítva. Mivel léteznek már hasonló eszközök, azok hiányosságait igyekszem előtérbe helyezni az eszköz készítése során.

Az eszköz elkészítése után egyszerűbb példakódokon, és valós környezetből vett kódokon értékelem az eszközt. Ez alapján az mondható el, hogy az eszköz képes teszteket generálni alapvető C programokhoz, támogatja az egyszerű típusokat, tömböket, struktúrákat, de vannak korlátai. A C makróit nem kezeli jól, struktúrákat struktúrákban sem képes kezelni, a globális változókkal sem képes mit kezdeni. Tehát a meglévő eszközöknek nem ér a közelébe az általam készített eszköz.

Letölthető fájlok

A témához tartozó fájlokat csak bejelentkezett felhasználók tölthetik le.