diplomová práce

Evaluating Reliability of Static Analysis Results Using Machine Learning

Text práce 4.64 MB

Autor práce: Ing. Tomáš Beránek

Ak. rok: 2023/2024

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

Oponent: Ing. Jan Fiedor, Ph.D.

Abstrakt:

Statický analyzátor Meta Infer je nástrojem pro hledání různých typů chyb ve zdrojovém kódu. Jeho výsledky však obsahují více než 95 % falešných hlášení. Tato teze navrhuje řešení, které řadí hlášení od Meta Inferu pomocí grafových neuronových sítí (GNN) podle pravděpodobnosti, že se jedná o skutečnou chybu, a redukuje tak problém s falešnými hlášeními. Systém se skládá z trénovací části, která převádí datovou sadu D2A – sadu roztříděných hlášení z Meta Inferu – na rozšířené grafy vlastností kódu (ECPG) a z modelů GNN natrénovaných na ECPG grafech. Výsledky experimentů ukazují, že vytvořené modely GNN mohou konkurovat a v některých případech dokonce překonat existující řešení vyvíjené silnými průmyslovými týmy. Tato existující řešení mají navíc uzavřený zdrojový kód, a tak řešení vytvořené v této tezi poskytuje slibnou alternativu s otevřeným zdrojovým kódem.

Klíčová slova:

Statická analýza, Meta Infer, hluboké učení, grafové neuronové sítě, detekce falešných hlášení, detekce zranitelností, grafy vlastností kódu, interní reprezentace LLVM, Joern, LLVM Slicer, prořezávání programů, konstrukce grafové reprezentace, analýza zdrojového kódu, dataset D2A, grafový D2A, rozšířené grafy vlastností kódu.

Termín obhajoby

17.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 sekci 4.1.1 zmiňujete odfiltrování některých typů chyb z množiny dat pro učení (a následnou klasifikaci) jelikož sada D2A obsahuje příliš málo reálných chyb (true positives) daného typu a GNN síť by měla problém se tyto typy chyb naučit klasifikovat. Jsou ještě jiné důvody, kdy je potřeba určitý typ chyb vyloučit? Ukázala evaluace, zda má navržené řešení problém s klasifikací některých typů chyb a/nebo naopak některé chyby klasifikuje velmi přesně a spolehlivě?
  2. Největší slabinou navrženého řešení (stejně jako všech existujících řešení) jsou neuspokojivé výsledky při cross-analýze (analýze jiných programů, než na kterých se grafová neuronová síť učila). Můžete diskutovat co by mohlo pomoci navrženému řešení poskytovat lepší výsledky při cross-analýze? Například: 1) Pomohlo by odstranit jména interních funkcí (které zatím řešení ponechává, jak je uvedeno v sekci 4.1.4), jenž jsou specifické pro daný projekt? 2) Nezpůsobuje problémy při cross-analýze normalizace vlastností, kde normalizační koeficienty jsou součástí procesu učení i následné klasifikace a tyto koeficienty jsou specifické pro každý projekt? Např. když použijeme koeficienty projektu A pro normalizaci projektu B, pokud má projekt A menší rozsahy, mohou být hodnoty projektu B normalizovány mimo interval 0..1. Pokud budeme normalizovat jinými koeficienty, aby k tomuto problému nedošlo, může být zase konkrétní hodnota normalizována na jinou hodnotu v intervalu 0..1 než byla při učení.
  3. V sekci 4.1.4 zmiňujete, že aktuální řešení zatím neextrahuje globální proměnné. Může být klasifikace některých typů chyb ovlivněna nedostupností těchto informací při učení grafové neuronové sítě a následné klasifikaci chyb?

Jazyk práce

angličtina

Fakulta

Ústav

Studijní program

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

Specializace

Strojové učení (NMAL)

Složení komise

prof. Dr. Ing. Jan Černocký (předseda)
doc. Ing. Lukáš Burget, Ph.D. (člen)
doc. Mgr. Lukáš Holík, Ph.D. (člen)
doc. RNDr. Pavel Smrž, Ph.D. (člen)
doc. Ing. Vítězslav Beran, Ph.D. (člen)
Ing. František Grézl, Ph.D. (člen)

Navrhuji hodnocení stupněm A s ohledem na obrovský objem odvedené kvalitní práce, za vysokou samostatnost a kreativitu projevenou studentem a v neposlední řadě také za dosažení výsledků, které mají dle mého názoru velmi dobrý publikační potenciál. Současně bych rád práci navrhnul na některé z možných ocenění za diplomovou práci.

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

Zadání práce považuji za výrazně nadprůměrně obtížné. Zadání kombinovalo aspekty jak z oblasti nízko-úrovňového programování, statické analýzy programů, tak i strojového učení. Student procházel dlouhou řadou kroků, u kterých nebylo jasné, jak je vhodně řešit a k jakým výsledkům povedou. Pro mě jako vedoucího to byla asi nejnapínavější práce, jakou jsem za mnoho let vedl. Jsem velmi rád, že nakonec vedla k úspěšnému zakončení.

Se zaměřením práce přišel sám student, následně se zjistilo, že o jeho práci má zájem Red Hat a jeho mateřská společnost IBM, konkrétně výzkumné centrum IBM Watson, které v dané oblasti provádí aktivní výzkum (a jedná se o špičku v oblasti AI). Komunikace s IBM bohužel ale nefungovala k naší spokojenosti, a nakonec se student rozhodl pracovat samostatně, jen s menší podporou ze strany Red Hat.

Aktivita při dokončování

Práce byla dokončována v dostatečném předstihu na to, abych byl schopen řádně komentovat připravovanou technickou zprávu.

Publikační činnost, ocenění

Práce byla prezentována na studentské soutěži Excel@FIT 2024, kde získala jedno z ocenění Odborným panelem. Obsah práce si navíc zaslouží dle mého názoru publikaci na kvalitní mezinárodní konferenci, minálně formou článku o nástroji či rozšířeného článku o nástroji. Na tom, že takovou publikaci sepíšeme, jsme se studentem již dohodli.

Práce s literaturou

Student byl schopen samostatně vyhledávat, nastudovat a využít příslušné studijní zdroje, včetně výzkumných článků na jedné straně a dokumentace různých nástrojů na straně druhé.

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

Náročnost zadání se ukázala natolik vysoká, že se student po prvním roce systematické práce rozhodl dobrovolně prodloužit svou práci o další rok. Po celé dva roky se student své práci poctivě věnoval, chodil na pravidelné konzultace a pečlivě prezentoval své kroky, dílčí úspěchy i neúspěchy (bylo nutno projít různé slepé uličky).

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

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

Posudek oponenta
Ing. Jan Fiedor, Ph.D.

Práce je excelentní ve všech ohledech, od detailního a precizního návrhu, přes jeho realizaci a evaluaci, až po výbornou typografickou a jazykovou úpravu technické zprávy.


Navrhuji zvážit ocenění práce.

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

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

Rozsah technické zprávy

Stupeň hodnocení: přesahuje obvyklé rozmezí

Práce má přes 160 normostran, do velké míry díky 50 normostran dlouhé sekci 4.1.4, jenž detailně popisuje proces adaptace hrubého (raw) ECPG grafu do formátu TFRecord podporovaného knihovnou TensorFlow. Tuto část lze pokládat za jednu z nejdůležitějších částí (a přínosů) práce a je více než opodstatněná.

Celkově nelze v práci najít snad jediný úsek textu, u kterého by šlo řící, že je zbytečný a mohl by být vynechán.

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

Práce má výbornou logickou strukturu, kapitoly na sebe přirozeně navazují a provázejí čtenáře od návrhu celé architektury, přes její implementaci, až k celkové evaluaci navrženého řešení. Nejrozsáhlejší části práce je kapitola 4, která tvoří asi polovinu rozsahu technické zprávy, a podrobně rozebírá návrh celé architektury. Tuto kapitolu pokládám za stežejní část práce, jelikož implementace při takto precizním návrhu je již přímočará.

Na struktuře technické zprávy hlavně oceňuji výborné provázání jednotlivých kapitol a částí textu v nich. Většina textu práce je doplněna odkazy na související části práce, což při komplexnosti návrhu a rozsahu práce velmi usnadňuje čtenáři rychle dohledat relevantní informace důležité pro pochopení daného textu.

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

Práce je psaná v anglickém jazyce a má výbornou typografickou úpravu. Po jazykové stránce obsahuje úplné minimum překlepů, což je při rozsahu technické zprávy impozantní.

95
Práce s literaturou

Technická zpráva se opírá o více než 100 zdrojů, kde velkou část z nich tvoří odborné články a publikace. Student velmi pečlivě nastudoval aktuální (state of the art) řešení a využil je jako inspiraci pro vlastní navržené řešení. Všechny zdroje jsou řádně odcitovány.

95
Realizační výstup

Student vytvořil komplexní technické řešení, kde implementace je jen třešničkou na dortu precizního návrhu. Jako primární realizační výstup pokládám návrh celé architektury, kde dokumentací je rozsáhlá a informačně bohatá kapitola 4 technické zprávy.

Navržené řešení je plně funkční, bylo oveřeno na 3 rozsáhlých projektech (httpd, libtiff, nginx) a porovnáno s existujícími řešeními třetích stran i s LLM modelem ChatGPT4.

100
Využitelnost výsledků

Navržené řešení dosahuje výsledků srovnatelných s řešeními firem jako je IBM, má tedy potenciál využití v praxi. Hlavní překážkou pro uplatnění v praxi jsou ale špatné výsledky při cross-analýze, tedy při aplikaci grafové neuronové sítě na jiný projekt, než pro který byla grafová neuronová síť natrénována. S tím ovšem mají problém i všechna ostatní existující řešení.

Jelikož všechna stávající řešení nejsou veřejně přístupná, je navržené řešení vhodnou open-source alternativou. Navíc díky detailnímu popisu architektury lze toto řešení jednoduše rozšiřovat a dalé s ním experimentovat. Lze ho tedy s výhodou využít pro řešení problému s cross-analýzou.

Náročnost zadání

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

Práce se zabývá aplikací grafových neuronových sítí (GNN) na problém klasifikace chyb nahlášených nástrojem pro statickou analýzu Meta Infer. Cílem je určit pravděpodobnost s jakou je náhlášená chyba reálnou chybou (true positive) a umožnit tak lépe odfiltrovat falešné chyby (false positives) seřazením hlášení podle pravděpodobnosti, že jsou reálnou chybou.

Ke splnění cíle práce bylo potřeba nastudovat velké množství technologií a navrhnout komplexní architekturu propojující tyto technologie do funkčního řešení. Nestačilo navíc jen propojit jednotlivé technologie, významnou částí práce bylo navrhnout proces transformace zdrojových kódů analyzovaných nástrojem Meta Infer do podoby Extended Code Property grafů (ECPG) vhodných jako vstup pro grafové neuronové sítě.

Otázky k obhajobě:
  1. V sekci 4.1.1 zmiňujete odfiltrování některých typů chyb z množiny dat pro učení (a následnou klasifikaci) jelikož sada D2A obsahuje příliš málo reálných chyb (true positives) daného typu a GNN síť by měla problém se tyto typy chyb naučit klasifikovat. Jsou ještě jiné důvody, kdy je potřeba určitý typ chyb vyloučit? Ukázala evaluace, zda má navržené řešení problém s klasifikací některých typů chyb a/nebo naopak některé chyby klasifikuje velmi přesně a spolehlivě?
  2. Největší slabinou navrženého řešení (stejně jako všech existujících řešení) jsou neuspokojivé výsledky při cross-analýze (analýze jiných programů, než na kterých se grafová neuronová síť učila). Můžete diskutovat co by mohlo pomoci navrženému řešení poskytovat lepší výsledky při cross-analýze? Například: 1) Pomohlo by odstranit jména interních funkcí (které zatím řešení ponechává, jak je uvedeno v sekci 4.1.4), jenž jsou specifické pro daný projekt? 2) Nezpůsobuje problémy při cross-analýze normalizace vlastností, kde normalizační koeficienty jsou součástí procesu učení i následné klasifikace a tyto koeficienty jsou specifické pro každý projekt? Např. když použijeme koeficienty projektu A pro normalizaci projektu B, pokud má projekt A menší rozsahy, mohou být hodnoty projektu B normalizovány mimo interval 0..1. Pokud budeme normalizovat jinými koeficienty, aby k tomuto problému nedošlo, může být zase konkrétní hodnota normalizována na jinou hodnotu v intervalu 0..1 než byla při učení.
  3. V sekci 4.1.4 zmiňujete, že aktuální řešení zatím neextrahuje globální proměnné. Může být klasifikace některých typů chyb ovlivněna nedostupností těchto informací při učení grafové neuronové sítě a následné klasifikaci chyb?
Výsledný počet bodů navržený oponentem: 98
Zobrazit více

Známka navržená oponentem: A

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