Correctness witnesses for thread-modular program analysis
Laen...
Failid
Kuupäev
Autorid
Ajakirja pealkiri
Ajakirja ISSN
Köite pealkiri
Kirjastaja
Tartu Ülikooli Kirjastus
Abstrakt
Igaüks tahab, et tarkvara oleks kiire ja lihtsalt töötaks (õigesti), st ei sisaldaks vigu. Mitmelõimelised programmid saavad olla efektiivsed, täites mitut operatsiooni korraga, kuid neid võib olla keeruline veatult kirjutada. Kuna neid on ka keeruline testida, siis peab pöörduma formaalse verifitseerimise juurde. Seda on võimalik automatiseerida, kasutades staatilisi analüsaatoreid – teisi programme, mis üritavad automaatselt tarkvara verifitseerida. Automaatsed tarkvara verifitseerijad on aga ka ise keerukad programmid, mis võivad samuti olla vigased ja seeläbi anda ebakorrektseid tulemusi. Suurendamaks oma järelduste usaldusväärsust, võivad verifitseerijad luua tõendeid (ingl witnesses), mis paljastavad nende arutluskäigu analüüsitud programmi kohta. Sellised tõendusobjektid võimaldavad analüüsi tulemusi inspekteerida inimestel või isegi kolmandatel programmidel, mida nimetatakse tõendite valideerijateks. Kahjuks puudusid varem verifitseerimistõendid mitmelõimeliste programmide korrektsuse põhjendamiseks. Selle doktoritöö eesmärk ongi täita see uurimislünk ning kasutada tõendeid, et muuta mitmelõimeliste programmide analüüs usaldusväärseks, kuid ka kiireks ja täpseks.
Esiteks parandatakse selle töö raames mitmelõimeliste programmide analüüsi, kasutades abstraktset interpretatsiooni, mis on edukas meetod pärismaailma tarkvara verifitseerimiseks. Teiseks uuritakse, kuidas abstraktne interpretatsioon võib kasu saada tõenditest, nii jõudluse kui ka täpsuse seisukohalt. Kolmandaks ühendatakse mainitud suunad ja pakutakse välja õigsustõendid mitmelõimelistele programmidele, täites seega uurimislünga. Kokkuvõttes edendatakse doktoritöö raames tipptasemel abstraktset interpretatsiooni ja verifitseerimistõendeid. Tõendid võimaldavad välja töötada paremaid staatilisi analüsaatoreid, mis omakorda aitavad tarkvaraarendajatel kirjutada veatuid mitmelõimelisi programme.
Everyone wants software to be fast and to just work (correctly), i.e., not have bugs. Multi-threaded programs can be efficient by executing multiple operations concurrently, but they can be hard to write correctly. Since they are also difficult to test, we must turn to formal verification. This can be automated using static analyzers — other programs which try to verify software automatically. Automated software verifiers are themselves complex programs which may also contain bugs and, thus, produce incorrect results. To make their verdicts more trustworthy, verifiers may produce witnesses that expose their reasoning about the analyzed program. These proof objects allow the analysis results to be inspected by humans or even other programs called witness validators. Unfortunately, there were previously no verification witnesses for explaining the correctness of multi-threaded programs. Therefore, this thesis aims to fill the research gap by using witnesses to make the analysis of concurrent programs trustworthy, but also performant and precise. First, the thesis improves the analysis of concurrent programs using abstract interpretation, which is a successful method for verifying real-world software. Second, the thesis studies how abstract interpretation can benefit from witnesses, both in terms of performance and precision. Third, the thesis joins the previous directions and proposes correctness witnesses for concurrent programs, thereby filling the research gap. Therefore, this thesis advances the state-of-the-art of abstract interpretation and verification witnesses. Witnesses allow us to develop better static analyzers, which in turn help developers write correct multi-threaded programs.
Everyone wants software to be fast and to just work (correctly), i.e., not have bugs. Multi-threaded programs can be efficient by executing multiple operations concurrently, but they can be hard to write correctly. Since they are also difficult to test, we must turn to formal verification. This can be automated using static analyzers — other programs which try to verify software automatically. Automated software verifiers are themselves complex programs which may also contain bugs and, thus, produce incorrect results. To make their verdicts more trustworthy, verifiers may produce witnesses that expose their reasoning about the analyzed program. These proof objects allow the analysis results to be inspected by humans or even other programs called witness validators. Unfortunately, there were previously no verification witnesses for explaining the correctness of multi-threaded programs. Therefore, this thesis aims to fill the research gap by using witnesses to make the analysis of concurrent programs trustworthy, but also performant and precise. First, the thesis improves the analysis of concurrent programs using abstract interpretation, which is a successful method for verifying real-world software. Second, the thesis studies how abstract interpretation can benefit from witnesses, both in terms of performance and precision. Third, the thesis joins the previous directions and proposes correctness witnesses for concurrent programs, thereby filling the research gap. Therefore, this thesis advances the state-of-the-art of abstract interpretation and verification witnesses. Witnesses allow us to develop better static analyzers, which in turn help developers write correct multi-threaded programs.
Kirjeldus
Märksõnad
doktoritööd