Přístupnostní navigace
E-přihláška
Vyhledávání Vyhledat Zavřít
bakalářská práce
Autor práce: Ing. Daniel Kříž
Ak. rok: 2022/2023
Vedoucí: prof. Ing. Tomáš Vojnar, Ph.D.
Oponent: Ing. Ondřej Vašíček
Cílem této bakalářské práce je navržení metody automatického generování šablon změn kódu v jazyce LLVM IR pro DiffKemp, nástroj pro analýzu sémantických rozdílů mezi verzemi rozsáhlých programů. Dále je cílem umožnit automatické parametrizování změn mezi verzemi projektu pomocí hodnot, globálních proměnných a strukturových typů. Toho bylo dosaženo pomocí nalezení společné šablony mezi změnami a následným generováním jejích variant, které se liší v použití globálních proměnných a typů. Navržené řešení je implementováno jako rozšíření nástroje DiffKemp a naše experimentování na malých programech ukázalo, že námi navržená metoda je schopná vytvořit alespoň částečně uspokojivé výsledky.
DiffKemp, LLVM, LLVM IR, statická analýza, GNU/Linux Kernel, automatické odvozování šablon, automatické generování šablon
Termín obhajoby
15.06.2023
Výsledek obhajoby
obhájeno (práce byla úspěšně obhájena)
Klasifikace
D
Průběh obhajoby
Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázky oponenta a na další otázky přítomných. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položené otázky rozhodla práci hodnotit stupněm D.
Otázky k obhajobě
Jazyk práce
angličtina
Fakulta
Fakulta informačních technologií
Ústav
Ústav inteligentních systémů
Studijní program
Informační technologie (BIT)
Složení komise
prof. Ing. Tomáš Vojnar, Ph.D. (předseda) doc. Ing. Petr Matoušek, Ph.D., M.A. (člen) Ing. František Grézl, Ph.D. (člen) doc. Ing. Tomáš Martínek, Ph.D. (člen) Ing. Matěj Grégr, Ph.D. (člen)
Posudek vedoucíhoprof. Ing. Tomáš Vojnar, Ph.D.
Celkové zvládnutí zadání považuji za podprůměrné, zejména z důvodu slabší implementace a téměř žádného experimentálního ověření. Na druhé straně mají teoretické přínosy práce potenciál zásadně vylepšit schopnosti nástroje DiffKemp v oblasti automatické analýzy sémantických rozdílů v různých verzích průmyslového software. S přihlédnutím k této skutečnosti a k tomu, že se jednalo o náročné zadání převyšující běžný rozsah bakalářské práce, doporučuji komisi připustit práci k obhajobě a hodnotit známkou D (uspokojivě).
Cílem práce bylo navrhnout a implementovat algoritmus pro automatické odvozování vzorů změn zachovávajících sémantiku pro nástroj DiffKemp. Jelikož se jedná o poměrně rozsáhlý nástroj vyvíjený ve výzkumné skupině VeriFIT, který navíc používá netriviální techniky analýzy programů, považuji toto zadání za nadprůměrně náročné. Student v rámci práce navrhl několik pokročilých algoritmů, nicméně kvůli vyšší náročnosti zadání mu nezůstal dostatek času na důslednou implementaci a experimentování. Většina algoritmů je proto implementována pouze ve formě základního prototypu. Navzdory tomu považuji teoretický přínos práce za dostatečně významný na to, aby mohla být práce obhájena.
Student v rámci práce nastudoval poměrně velké množství souvisejících vědeckých článků. Kromě doporučených zdrojů byl schopen sám nalézt další relevantní práce, z nichž mnohé mohou pomoci s rozvojem nástroje DiffKemp i v budoucnu.
Během celého řešení práce byl student příkladně aktivní a učastnil se pravidelných schůzek, na které byl vždy dobře připraven.
Bohužel, jak již bylo zmíněno, zejména pokrok v implementační oblasti byl poměrně pomalý, což vedlo k dokončování práce pod značným tlakem. Výsledný text a implementace proto neodpovídají usílí, které student práci věnoval.
Implementace navržených algoritmů bude s největší pravděpodobností časem začleněna do hlavní vývojové větve nástroje DiffKemp.
Známka navržená vedoucím: D
Posudek oponentaIng. Ondřej Vašíček
Práce nesplnila bod zadání č. 5 (testování) a bod zadání č. 4 (implementace) nebyl splněn úplně. Nicméně funkcionalita vytvořeného řešení je podle mě stále přínosná. Tyto nedostatky byly způsobeny nedostatkem času při dokončování práce.
Na druhou stranu ale byla práce obtížná a kvalita textu práce je velmi dobrá obzvláště na poměry bakalářských prací. Nedostatky z pohledu splnění zadání jsou tedy dle mého názoru prominutelné, ale výrazně snižují hodnocení práce, která by jinak byla na výborné úrovni.
Stupeň hodnocení: obtížnější zadání
Zadání považuju za obtížnější kvůli intelektuální náročnosti pochopení jednotlivých konceptů a algoritmů.
Stupeň hodnocení: zadání splněno pouze částečně
Bod zadání č. 5 byl splněn jen ve velmi omezené míře formou pár základních automatizovaných testů. Nedošlo tedy k řádnému otestování a neproběhlo otestování na Linuxovém jádře nebo jiných projektech.
Dále funkcionalita samotného výstupu práce je omezená. Bod zadání č. 4 tedy není úplně dotažen dokonce (viz. popis realizačního výstupu níže).
Tyto nedostatky byly dle studenta způsobeny nedostatkem času při dokončování a nečekanými komplikacemi během implementace. Výstup této práce je ale podle mého názoru i v takto omezené podobě stále přínosný.
Stupeň hodnocení: je v obvyklém rozmezí
Kapitola o experimentech a vyhodnocení je velmi krátká. Jinak je ale práce v obvyklém rozmezí.
Práce je velmi dobře strukturovaná a úrovní vyjadřování se blíží k odborným článkům.
Práce je psána dobrou angličtinou až na pár překlepů a pár výskytů drobných nedostatků (např. chybějící členy "a / the" nebo chybějící "s" na konci slovesa).
Z typografického hlediska je práce v pořádku až na pár chybějících nezlomitelných mezer.
Práce se odkazuje na množství relevantních zdrojů včetně řady odborných článků. Bibliografické citace jsou vypracovány vzorně.
Zdrojový kód je dobře strukturovaný a dokumentovaný.
Bohužel je ale jeho funkcionalita omezená a z pohledu zadání nebyl dostatečně otestován. Předmětem práce bylo automatické generování vzorů změn zdrojového kódu, kde jeden vzor má pokrývat několik podobných změn. Práce tuto funkcionalitu dělí mezi neparametrické vzory změn a parametrické vzory změn. Implementace parametrických vzorů aktuálně ale bohužel nefunguje pro některé případy parametrizace změn konstant. Funkcionalita výstupu práce tedy splňuje zadání jen částečně. Nicméně neparametrické vzory změn fungují a parametrické vzory změn fungují alespoň pro změny typů (oproti změnám konstant).
Výstup práce měl být také otestován na Linuxovém jádře nebo na jiném projektu. Toto bohužel nebylo provedeno (nebo to alespoň není v textu práce). Místo toho bylo provedeno jen testování na několika vlastních příkladech. Testování tedy z pohledu zadání splněno nebylo.
Práce dále rozšiřuje schopnosti nástroje DiffKemp a tedy navazuje na řadu předchozích prací, přínos této práce je ale samostatný (tedy nejedná se jen o rozšíření předchozích prací).
Nástroj DiffKemp směřuje k nasazení v praxi a jeho rozšíření touto prací může být tedy také časem prakticky využito.
Známka navržená oponentem: D
Odpovědnost: Mgr. et Mgr. Hana Odstrčilová