bakalářská práce

Vizualizace výsledků statického porovnávání sémantické ekvivalence různých verzí software v jazyce C

Text práce 2.97 MB

Autor práce: Bc. Lukáš Petr

Ak. rok: 2022/2023

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

Oponent: Ing. Tomáš Fiedor, Ph.D.

Abstrakt:

Cílem této práce je vytvořit přehlednější prezentaci výsledků nástroje DiffKemp sloužícího pro statickou analýzu sémantických rozdílů ve velkých projektech napsaných v jazyce C. V současnosti DiffKemp zobrazuje všechny informace o nalezených rozdílech v nestrukturované textové podobě, což je pro uživatele mnohdy nepřehledné. Pro vyřešení tohoto problému byl v této práci vytvořen nový výstup nástroje DiffKemp, který poskytuje výsledky v serializované podobě pomocí formátu YAML. Tento výstup je následně zpracován a zobrazen pomocí nově vytvořeného prohlížeče výsledků, realizovaného jako webová aplikace pomocí knihovny React, frameworku Bootstrap a balíčku react-diff-view. Dále se práce zaměřila na poskytnutí uživateli dodatečného kontextu ve formě zdrojových kódů analyzovaných funkcí a usnadnění navigace a orientace v nalezených rozdílech a k nim poskytovaných informací jako jsou zásobníky volání. Provedené srovnání nově vytvořeného prohlížeče ukázalo, že usnadňuje uživateli oproti původnímu řešení rozpoznat změny v poskytovaných zásobnících volání a umožňuje mu rychlejší navigaci ve výsledcích a také mezi vztahy nalezených rozdílů a analyzovaných částí.

Klíčová slova:

DiffKemp, statická analýza sémantických rozdílů, vizualizace rozdílů, prohlížeč výsledků, React, zásobník volání

Termín obhajoby

15.06.2023

Výsledek obhajoby

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

znamkaCznamka

Klasifikace

C

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

Otázky k obhajobě

  1. Zdůvodněte volbu vývojové platformy React. V čem byla výhodnější než jiné vývojové platformy, jako jsou Vue.js, Angular, Preact, Mithril, atd.
  2. Vaše práce je limitována na visualizaci změn mezi dvěma verzema. Jak by šlo Vaši implementaci rozšířit, aby umožňovala visualizaci změn mezi více verzemi naráz?
  3. Inspiroval jste se nějak při visualizaci změn kódu např. nástroji GitHub, GitLab nebo podobnými?
  4. Řešil jste nějakým způsobem i automatizované spouštění analýzy změn kódu a následné nahrání výsledků na server, kde probíhá visualizace?

Jazyk práce

češ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ě se jedná o velmi dobře zvládnuté zadání. Student prokázal technické schopnosti na dobré úrovni a výsledek jeho práce významným způsobem vylepšuje možnosti nasazení nástroje DiffKemp v praxi. Proto navrhuji hodnotit práci známkou B (velmi dobře).

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

Cílem práce bylo navrhnout a implementovat nový způsob vizualizace výsledků analýzy sémantických rozdílů mezi verzemi průmyslového software, které jsou výstupem nástroje DiffKemp. Jedná se o průměrně náročné zadání, hlavní složitost spočívala v tom, že výstup DiffKempu je poměrně komplikovaný a jeho kompaktní zobrazení není triviální. Práce navíc zahrnovala nutnost vytvoření nového formátu výstupu z nástroje, a proto bylo nutné nastudovat některé principy, na nichž tento nástroj, vyvíjený ve výzkumné skupině VeriFIT ve spolupráci s firmou Red Hat, staví. Zadání považuji za splněné, řešení byo dovedeno do stavu, kdy budou vyžadovány minimální úpravy pro jeho nasazení do praxe.

Práce s literaturou

Vzhledem k charakteru zadání zahrnovala práce se zdroji primárně průzkum existujících technologií pro vizualizaci změn ve zdrojových kódech. Student odvedl dobrou práci, kdy prozkoumal vícero možností, z nichž vybral ty nejvhodnejší pro jeho případ.

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

Během celého řešení byl student aktivní, účastnil se pravidelných konzultací a téměr vždy představil nové poznatky či pokrok v práci.

Aktivita při dokončování

Implementace byla dokončena se značným předstihem, díky čemuž byl dostatek času na napsání textu práce, který byl k dispozici pro několik fází připomínkování.

Publikační činnost, ocenění

Část vytvořeného řešení je v této době již součástí hlavní vývojové větve nástroje DiffKemp, zbytek je aktuálně ve formě otevřeného pull requestu a s největší pravděpodobností bude brzy začleněn. Zároveň bude toto řešení základem pro nasazení nástroje DiffKemp ve společnosti Red Hat.

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

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

Práci pana Petra Lukáše hodnotím jako dobrou. Na práci hodnotím pozitivně, že bude značně usnadňovat práci při analýze sémantických změn v linuxových jádrech ve firmě RedHat a je současně stavěna na dobře zavedených principech a vývojových platformách. Na druhou stranu, text práce mohl být více doladěn jak po jazykové tak obsahové stránce.

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

Stupeň hodnocení: průměrně obtížné zadání

Zadání považuji za průměrně obtížné: cílem je vytvořit uživatelské prostředí pro nástroj, který analyzuje sémantické rozdíly mezi různými verzemi programů, přičemž zadání nevyžaduje detailní pochopení principů jak tato analýza funguje, a pouze pracuje s jejími výstupy.

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

Stupeň hodnocení: zadání splněno

Zadání splněno bez výhrad.

Rozsah technické zprávy

Stupeň hodnocení: je v obvyklém rozmezí

Práce čítá 39 vysázených stran (tzn. cca 60 normostran), je v obvyklém rozmezí a neobsahuje vatu.

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

Práce je dopře strukturovaná a kapitoly na sebe navazují.

K struktuře však mám dvě podstatné výhrady: (1) práce popisuje některé technologie, které nejsou natolik stěžejní (např. javascript, npm, nebo jpx), a současně (2) práce nedostatečně prozkoumává alternativy ke zvolené vývojové platformě React (např. vue.js, Angular, apod).

Popis technologií pro vykreslování rozdílů mezi různými verzemi je poměrně strohý: popisuje pouze dvě React komponenty, a nezmiňuje další jiné alternativy (např. vytvoření vlastní implementace, nebo jiné flexibilní formáty nebo visualizační knihovny). Některé sekce (hlavně u teoretického základu) by bylo vhodnější ilustrovat příklady.

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

Typografická a jazyková stránka práce je poměrně slabá.

Práce obsahuje (1) řadu anglikanismů (např. snapshot místo snímek, diff místo rozdíl), (2) drobné chybky (např. ojediněle chybné použití čárek, nebo v gramatice), nebo, (3), místy nevhodné formulace textu.

Dále pak obsahuje drobné typografické prohřešky nebo nedostatky, jako je (1) nedostatečné zvýraznění klíčových pojmů (např. programy jako je make nebo anglické výrazy, by zasloužily zvýraznit), nebo (2) špatné zarovnání čísel v tabulkách (nejsou zarovnány napravo, tak aby šly porovnat řády).

Současně bych doporučil držet se striktně technického popisu (tzn. vyhnout se formulacím jako je "myslím, že", nebo "bude se hodit").

Chválím sekci s analýzou požadavků; na druhou stranu bych ale doporučil požadavky lépe označit než jen čísly (např. P_CG, P_LIST).

60
Práce s literaturou

Práce cituje 20 zdrojů. Porušení citační etiky jsem nezaznamenal. Práce mohla důkladněji popisovat alternativní řešení a jiné možné vývojové platformy.

80
Realizační výstup

Realizační výstup je v pořadků, zkomplilovatelný a funkční. Řešení bylo osobně předvedeno. Řešení je bez pochyby lepší než původní výstup nástroje diffkemp a věřím, že bude brzy zakomponováno v hlavní větvi projektu. Doporučil bych práci rozširit o drobné QoL zlepšení: např. filtrování funkcí nebo zdůraznění rozsahu nalezených změn u jednotlivých funkcí.

Kód je dobře komentovaný. Řešení je v recenzním řížení v hlavní větvi projektu diffkemp ve formě tzv. Pull Request,.

85
Využitelnost výsledků

Práce je řešena v rámci projektu diffkemp, který je používán ve firmě RedHat pro analýzu sémantických změn v linuxových jádrech. Očekává se, že bude práce v brzké době zakomponována v hlavní větvi projektu a bude dále využívána i rozvíjena.

Otázky k obhajobě:
  1. Zdůvodněte volbu vývojové platformy React. V čem byla výhodnější než jiné vývojové platformy, jako jsou Vue.js, Angular, Preact, Mithril, atd.
  2. Vaše práce je limitována na visualizaci změn mezi dvěma verzema. Jak by šlo Vaši implementaci rozšířit, aby umožňovala visualizaci změn mezi více verzemi naráz?
Výsledný počet bodů navržený oponentem: 75
Zobrazit více

Známka navržená oponentem: C

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