bakalářská práce

Automatic Generation of Code Change Patterns

Text práce 1.68 MB

Autor práce: Ing. Daniel Kříž

Ak. rok: 2022/2023

Vedoucí: prof. Ing. Tomáš Vojnar, Ph.D.

Oponent: Ing. Ondřej Vašíček

Abstrakt:

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.

Klíčová slova:

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)

znamkaDznamka

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ě

  1. Jasně prosím prezentujte komisi, jakou funkcionalitu Vaše řešení zvládá a kde jsou naopak jeho limity. Zkuste také procentuálně odhadnout, kolik funkcionality chybí.
  2. Proč přesně Vaše řešení nakonec nefungovalo?

Jazyk práce

angličtina

Fakulta

Ústav

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)

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ě).

Kritérium hodnocení Slovní hodnocení
Informace k zadání

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.

Práce s literaturou

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.

Aktivita během řešení, konzultace, komunikace

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.

Aktivita při dokončování

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.

Publikační činnost, ocenění

Implementace navržených algoritmů bude s největší pravděpodobností časem začleněna do hlavní vývojové větve nástroje DiffKemp.

Výsledný počet bodů navržený vedoucím: 68
Zobrazit více

Známka navržená vedoucím: D

Posudek oponenta
Ing. 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.

Kritérium hodnocení Slovní hodnocení Body
Náročnost zadání

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ů.

Rozsah splnění požadavků zadání

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ý. 

Rozsah technické zprávy

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í. 

Prezentační úroveň technické zprávy

Práce je velmi dobře strukturovaná a úrovní vyjadřování se blíží k odborným článkům. 

95
Formální úprava technické zprávy

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.    

85
Práce s literaturou

Práce se odkazuje na množství relevantních zdrojů včetně řady odborných článků. Bibliografické citace jsou vypracovány vzorně. 

90
Realizační výstup

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.

55
Využitelnost výsledků

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. 

Otázky k obhajobě:
  1. Jasně prosím prezentujte komisi, jakou funkcionalitu vaše řešení zvládá a kde jsou naopak jeho limity. Zkuste také procentuálně odhadnout, kolik funkcionality chybí.
Výsledný počet bodů navržený oponentem: 60
Zobrazit více

Známka navržená oponentem: D

Odpovědnost: Mgr. et Mgr. Hana Odstrčilová