Symbolic Execution for Runtime Error Detection and Investigation of Refactoring Activities Based on a New Dataset

Kádár István
Symbolic Execution for Runtime Error Detection and Investigation of Refactoring Activities Based on a New Dataset.
Doktori értekezés, Szegedi Tudományegyetem (2000-).
(2018) (Kéziratban)

[thumbnail of phd.pdf] PDF (disszertáció)
Download (1MB)
[thumbnail of booklet_en.pdf]
Előnézet
PDF (tézisfüzet)
Download (401kB) | Előnézet
[thumbnail of Kádár István-magyar tézisfüzet.pdf]
Előnézet
PDF (tézisfüzet)
Download (444kB) | Előnézet

Magyar nyelvű absztrakt

Nagyméretű, megbízható és robusztus szoftverrendszerek előállítása a szoftverfejlesztés egy nagy kihívása manapság. Az ipari szoftverfejlesztésben a fejlesztőknek tipikusan gyorsan kell jó megoldást adni egy problémára és a forráskód minősége gyakran csak másodlagos az időnyomás miatt. Másrészről a forráskód minősége egy nagyon fontos tényező, mert egy túl komplex és nehezen karbantartható kód több programhibához és nehezebben fejleszthető rendszerhez vezet. Az értekezés mögötti kutatási munkát az inspirálta, hogy hatékonyabban és könnyebben tudjunk magas minőségű szoftverrendszereket előállítani az ipari szoftverfejlesztésben, amivel a megrendelők és a végfelhasználók életét könnyebbé és hatékonyabbá tudjuk tenni. A disszertáció két témát ölel fel: szimbolikus végrehajtás felhasználását futásidejű hibák detektálása céljából, valamint refaktoring tevékenységek vizsgálatát a gyakorlatban. Mindkét témakör a forráskód minőség területén helyezhető el. A szimbolikus végrehajtás egy programelemzési technika, amely feltérképezi és végrehajtja a program lehetséges végrehajtási útvonalait úgy, hogy az input adatokat ismeretlen változókként, úgynevezett szimbolikus változókként kezeli. A szimbolikus végrehajtás fő felhasználási területei a magas lefedettséget eredményező tesztinput generálás, valamint olyan inputok generálása, ami programhibához vezet és annak leállását eredményezi. A módszer képes olyan programhibákat megtalálni, amiket rendkívül nehéz és költséges lenne teszteléssel detektálni, valamint exponenciálisan növekedne a javítás költsége is, amennyiben nem fedeznénk fel ezeket a problémákat a program futtatása előtt. Az értekezésben futásidejű programhibák detektálására fókuszálunk (mint például null pointer dereferencia, tömb túlindexelés, nullával való osztás, stb.) a kritikus végrehajtási útvonalak feltérképezésével, amelyet szimbolikus végrehajtással teszünk meg. Jelenleg az egyik legnagyobb kihívás a szimbolikus végrehajtás területén a lehetséges végrehajtási útvonalak óriási száma, ami exponenciálisan növekszik. Az értekezésben a fenti problémára adunk lehetséges megoldást azzal, hogy a szimbolikus végrehajtást metódus szinten végezzük el, azaz a program minden metódusára külön-külön indítunk egy elemzést. Emellett megvizsgáltuk, hogy az állapoteret hogyan tudjuk optimálisan korlátozni, továbbá új bejárási algoritmusokat is fejlesztettünk. Hogy a potenciális futásidejű hibák detektálását hatékonyabbá tegyük, egy olyan új algoritmust javasolunk, amely követi a szimbolikus változók közötti összefüggéseket a szimbolikus végrehajtás alatt. A forráskód refaktoring egy népszerű és hatékony technika programok belső minőségének javítására. A refaktoring fogalmát Fowler vezette be. Eredetileg azt javasolta, hogy kódolási szabálysértések és gyanús kódrészletek (ún. code smell-ek) kellene, hogy mutassák a refaktoringgal javítandó konstrukciókat. Másrészről viszont kevés olyan tanulmány lelhető fel, amely azt vizsgálja, hogy mikor, miért és hogyan alkalmaznak a fejlesztők refaktoringot a mindennapi szoftverfejlesztésben, és mik a rövid és hosszú távú hatásai a karbantarthatóságra és a költségekre nézve. Ha megválaszolnánk ezeket a kérdéseket és megértenénk, hogy a fejlesztők hogyan alkalmaznak forráskód refaktoringot a gyakorlatban, akkor olyan módszereket és eszközöket fejleszthetnénk, amelyek hatékonyabbá tudnánk tenni az ipari szoftverfejlesztést. Hogy támogassuk a későbbi kutatását a forráskód refaktoringok gyakorlati alkalmazásának, elkészítettünk egy publikusan elérhető refaktoring adatbázist. Az adatbázis nyílt forrású Java rendszerekben talált refaktoringokat és forráskód metrikákat tartalmaz. Felhasználásával a refaktoringok forráskód metrikákra, valamint a karbantarthatóságra gyakorolt hatását vizsgáltuk, amik fontos minőségi jellemzők a szoftverfejlesztésben.

Absztrakt (kivonat) idegen nyelven

It is a big challenge in software engineering to produce huge, reliable and robust software systems. In industry, developers typically have to focus on solving problems quickly. The importance of code quality in time pressure is frequently secondary. However, software code quality is very important, because a too complex, hard-to-maintain code results in more bugs, and makes further development more expensive. The research work behind this thesis is inspired by the wish to develop high quality software systems in industry in a more effective and easier way to make the lives of customers and eventually end-users more comfortable and more effective. The thesis consists of two main topics: the utilization of symbolic execution for runtime error detection and the investigation of practical refactoring activity. Both topics address the area of program source code quality. Symbolic execution is a program analysis technique which explores the possible execution paths of a program by handling the inputs as unknown variables (symbolic variables). The main usages of symbolic execution are generating inputs of program failure and high-coverage test cases. It is able to expose defects that would be very difficult and timeconsuming to find through manual testing, and would be exponentially more costly to fix if they were not detected until runtime. In this work, we focus on runtime error detection (such as null pointer dereference, bad array indexing, division by zero, etc.) by discovering critical execution paths in Java programs. One of the greater challenges in symbolic execution is the very large number of possible execution paths, which increas exponentially. Our research proposes approaches to handling the aforementioned problem of path explosion by applying symbolic execution at the level of methods. We also investigated the limitations of this state space together with the development of efficient search heuristics. To make the detection of runtime errors more accurate, we propose a novel algorithm that keeps track of the conditions above symbolic variables during the analysis. Source code refactoring is a popular and powerful technique for improving the internal structure of software systems. The concept of refactoring was introduced by Martin Fowler. He originally proposed that detecting code smells should be the primary technique for identifying refactoring opportunities in the code. However, we lack empirical research results on how, when and why refactoring is used in everyday software development, what are its effects on short- and long-term maintainability and costs. By getting answers to these questions, we could understand how developers refactor code in practice, which would help propose new methods and tools for them that are aligned with their current habits leading to more effective software engineering methodologies in the industry. To help further empirical investigations of code refactoring, we proposed a publicly available refactoring dataset. The dataset consists of refactorings and source code metrics of open-source Java systems. We subjected the dataset to an analysis of the effects of code refactoring on source code metrics and maintainability, which are primary quality attributes in software development.

Mű típusa: Disszertáció (Doktori értekezés)
Publikációban használt név: Kádár István
Magyar cím: Szimbolikus végrehajtás futásidejű hibadetektálásra és refaktoring tevékenységek vizsgálata egy új adatbázis alapján
Témavezető(k):
Témavezető neve
Beosztás, tudományos fokozat, intézmény
MTMT szerző azonosító
Ferenc Rudolf
egyetemi docens, PhD, habil., SZTE TTIK Szoftverfejlesztés Tanszék
10012533
Szakterület: 01. Természettudományok > 01.01. Matematika
Doktori iskola: Informatika Doktori Iskola
Tudományterület / tudományág: Természettudományok > Matematika- és számítástudományok
Nyelv: angol
Védés dátuma: 2018. március 08.
EPrint azonosító (ID): 4138
A mű MTMT azonosítója: 3401802
doi: https://doi.org/10.14232/phd.4138
A feltöltés ideje: 2018. feb. 20. 15:00
Utolsó módosítás: 2020. jún. 02. 11:11
Raktári szám: B 6338
URI: https://doktori.bibl.u-szeged.hu/id/eprint/4138
Védés állapota: védett

Actions (login required)

Tétel nézet Tétel nézet

Letöltések

Letöltések havi bontásban az elmúlt egy évben