diplomová práce

Generovaní šablon změn kódu v jazyce C

Text práce 886.82 kB

Autor práce: Ing. Tomáš Kučma

Ak. rok: 2023/2024

Vedoucí: Ing. Viktor Malík, Ph.D.

Oponent: Ing. Jiří Pavela

Abstrakt:

Zabezpečenie sémantickej stability softvérových projektov je často nákladnou úlohou. Nástroj DiffKemp automatizuje tento proces so špeciálnym dôrazom na výkon a použiteľnosť v rozsiahlych projektoch. Cenou za jeho efektívnosť je väčšia nepresnosť oproti formálnym nástrojom. Na minimalizáciu tohto problému DiffKemp umožňuje používateľom definovať vlastné vzory zachovávajúce sémantiku, opisujúce, aké zmeny majú byť považované za ekvivalentné. V súčasnosti je táto podpora obmedzená na vzory napísané v internej reprezentácii LLVM, ktorá nie je priateľská pre používateľa. Cieľom tejto práce je rozšíriť túto podporu na vzory napísané v jazyku C, čo výrazne zjednoduší proces ich vytvárania. To zahŕňa návrh reprezentácie vzorov, ktorá musí byť schopná zakódovať všetky potrebné metainformácie, a následný návrh, implementáciu a testovanie rozšírenia DiffKemp, ktoré umožní využívať vzory zapísané v jazyku C.

Klíčová slova:

vzory zmien kódu, DiffKemp, sémantická analýza, refaktorizácia

Termín obhajoby

20.06.2024

Výsledek obhajoby

obhájeno (práce byla úspěšně obhájena)

znamkaAznamka

Klasifikace

A

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

Otázky k obhajobě

  1. V rámci práce jste implementoval nový způsob specifikace vzorů přímo v jazyce C oproti stávajícímu řešení v LLVM IR. Mohl byste upřesnit, zda je vyjadřovací síla vzorů v jazyce C stejná jako v LLVM IR? Je možné pomocí vzorů v jazyce C specifikovat vše, co lze specifikovat i ve vzorech v LLVM IR? Pokud ne, je možné alespoň některé z těchto nedostatků odstranit rozšířením implementace, nebo se jedná o principiální problém plynoucí z různé úrovně abstrakce mezi jazyky C a LLVM IR?
  2. Co přesně reprezentují Vaše šablony? Jsou to makra?
  3. Je možné Vaše řešení zobecnit a případně aplikovat i na jiné jazyky?

Jazyk práce

angličtina

Fakulta

Ústav

Studijní program

Informační technologie a umělá inteligence (MITAI)

Specializace

Matematické metody (NMAT)

Složení komise

prof. Ing. Tomáš Vojnar, Ph.D. (předseda)
Ing. Martin Hrubý, Ph.D. (člen)
Ing. Aleš Smrčka, Ph.D. (člen)
Dr. Ing. Petr Peringer (člen)
Ing. Radek Hranický, Ph.D. (člen)
Ing. Ondřej Lengál, Ph.D. (člen)

Posudek vedoucího
Ing. Viktor Malík, Ph.D.

Overall, the thesis presents a well-handled solution to a practical and non-trivial problem. The student has demonstrated good engineering capabilities - the ability to get acquainted with a complex tool and to independently develop a significant and novel extension of the tool. My only reserve is for the fact that I haven't been able to consult the final version of the text. Despite that, I am very satisfied with the result and recommend the grade B. Moreover, in case of an excellent defense, I will gladly support improving the grade to A.

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

The thesis extends DiffKemp, a tool for static analysis of semantic equivalence between versions of large C projects. The project has been developed in the VeriFIT research group, in cooperation with Red Hat. Tomáš has been working with us for several years, mainly during project practice, where he developed multiple extensions of DiffKemp.

The goal of this thesis was to simplify creation of so-called custom change patterns, an extension of DiffKemp that has been published at the NETYS conference. The complexity of the assignment is slightly above average as it required the student to study a complex tool using advanced static analysis techniques, both from the implementation and from the theoretical side. The assignment was fulfilled.

Aktivita při dokončování

The work was finished under a bit of a time press. I received the full text only few days before the submission deadline and therefore I had no chance to fully review it and recommend adjustments. Despite that, I believe that the text has a good quality.

Publikační činnost, ocenění

The implementation part of the thesis has been posted as a pull request for the official DiffKemp repository and is currently undergoing review. I'm sure that the extension will be accepted in near time and that it will significantly simplify writing new custom patterns in DiffKemp which will streamline adoption of the tool in practice.

Práce s literaturou

The student has used the recommended sources as well as he found more sources on his own. I have no objections against the work with literature.

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

The student and I met several times throughout the academic year and every time, he presented a significant advance in his work. He was always well prepared for the meetings.

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

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

Posudek oponenta
Ing. Jiří Pavela

Student řešil spíše obtížnější zadání práce, u které bylo zapotřebí nastudovat a pochopit problematiku sémantického porovnávání změn ve zdrojovém kódu napříč verzemi. Realizační výstup práce je kvalitně zpracovaný a je očekáváno jeho začlenění do hlavní vývojové větve nástroje DiffKemp.


 


Technická zpráva je čtivá, jednotlivé kapitoly a sekce vhodně navazují a čtenář se v práci neztrácí. Co do jazykové a formální úpravy se jedná o nadprůměrně kvalitní zprávu.


 


Drobné výhrady mám k rozsahu kapitol 2.2 a 2.3, a ke spíše povrchnějšímu vyhodnocení úspěšnosti šablon co do jejich vlivu na úspěšnost analýzy. S přihlédnutím ke všem ostatním okolnostem však navrhuji hodnocení stupněm B.

Kritérium hodnocení Slovní hodnocení Body
Rozsah splnění požadavků zadání

Stupeň hodnocení: zadání splněno s drobnými výhradami

První čtyři body zadání byly splněny úplně. U posledního bodu zadání mi však v práci chyběla demonstrace toho, zda a nakolik se podařilo odstranit falešné nebo nepřesné výsledky analýzy pomocí nových vzorů v jazyce C. Na druhou stranu student své řešení demonstroval na mnohonásobně více šablonách, než zadání požadovalo, a proto se jedná spíše o drobný nedostatek.

Rozsah technické zprávy

Stupeň hodnocení: splňuje pouze minimální požadavky

Technická zpráva je spíše kratší: minimální požadavky splňuje, avšak obvyklého rozsahu nedosahuje. Většina kapitol však obsahuje potřebné informace pro pochopení práce. Drobnou výhradu bych měl ke kapitole 2.2, která by z mého pohledu měla být rozšířena alespoň o základní představení syntaxe a klíčových instrukcí LLVM IR, které jsou v práci dále používány.

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

Logická struktura a návaznost jednotlivých kapitol byla velmi dobrá. V textu se snadno orientuje a čtenář se při čtení neztrácí. Z hlediska rozsahu bych uvítal trochu propracovanější a detailnější kapitoly 2.2 a 2.3.

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

Typograficky se jedná o nadprůměrnou práci, kde se vyskytují spíše jen drobné chyby (např. ukázky kódu uváděny jako obrázky). Práce je psána v angličtině a jazykově je práce na velmi vysoké úrovni – jen s minimem gramatických nebo stylistických chyb.

89
Práce s literaturou

Práce obsahuje téměř třicet různých zdrojů, mezi nimiž je mnoho odborných publikovaných článků nebo knih. Dále jsou často citovány dokumentace k jednotlivých nástrojům a knihovnám. Při čtení práce jsem nezaznamenal žádné porušení citační etiky.

90
Realizační výstup

Přestože co do rozsahu je realizační výstup spíše kratší, jedná se o netriviální problematiku, u které bylo zapotřebí vyřešit množství implementačních problémů a překážek, aby šablony vytvořené v jazyce C korektně fungovaly. Jako drobný nedostatek vnímám spíše povrchnější ověření funkčnosti a úspěšnosti jednotlivých vzorů, nebo alespoň jejich popis v technické zprávě.

85
Využitelnost výsledků

Aktuálně probíhá začlenění výsledného rozšíření do hlavní vývojové větve nástroje DiffKemp. Výsledek se zdá být využitelný v praxi, což student demonstroval v rámci kapitoly s vyhodnocením nových šablon v jazyce C.

Náročnost zadání

Stupeň hodnocení: obtížnější zadání

Z mého pohledu se jedná o mírně obtížnější zadání, které vyžadovalo nastudování a pochopení komplexní problematiky sémantického porovnávání změn v kódu napříč jeho verzemi, infrastruktury LLVM a nástroje DiffKemp. Z hlediska implementace pak bylo zapotřebí ošetřit často netriviální problémy, které měly potenciál zásadně omezit použitelnost řešení.

Otázky k obhajobě:
  1. V rámci práce jste implementoval nový způsob specifikace vzorů přímo v jazyce C oproti stávajícímu řešení v LLVM IR. Mohl byste upřesnit, zda je vyjadřovací síla vzorů v jazyce C stejná jako v LLVM IR? Je možné pomocí vzorů v jazyce C specifikovat vše, co lze specifikovat i ve vzorech v LLVM IR? Pokud ne, je možné alespoň některé z těchto nedostatků odstranit rozšířením implementace, nebo se jedná o principiální problém plynoucí z různé úrovně abstrakce mezi jazyky C a LLVM IR?
Výsledný počet bodů navržený oponentem: 85
Zobrazit více

Známka navržená oponentem: B

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