|
Automata Theory Used to Detect Plagiarism
Beňuš, Alexej ; Havel, Martin (oponent) ; Meduna, Alexandr (vedoucí práce)
The bachelor's thesis addresses the detection and recognition of plagiarism in the C++ programming language. Which algorithms exist, which methods are the most effective and also showing their weaknesses. The program itself is coded in C++, utilizing Clang for the generation of abstract syntax trees. Generated trees are compared different techniques - statistic comparison utilizing counting and comparing number of coding constructs, string difference operations like Levenshtein distance and longest common substring and finally tree comparison operations which goes deep into comparison of trees using hashes. Main focus was on the structural comparison of C++ programs. Multiple comparison techniques are presented with testing and results. Additional parameters like minimum match size are also presented to make the comparison more precise. After comparison is done, score is presented and with defined functions it is shown if files are or are not plagiarism. Some problems with detection and implementation are also summarized in the text.
|
|
Detection of Expressions with Undefined Behavior in C Language
Hellebrandt, Lukáš ; Vojnar, Tomáš (oponent) ; Müller, Petr (vedoucí práce)
This thesis engages in detection of undefined behavior in the C language programs. We focus on undefined behavior stemming from incorrect work with sequence points and side effects. We perform a theoretical analysis and put terms like undefined behavior or side effect in context of the paper. Furthermore, we explain dangerousness of the constructs leading to undefined behavior. We propose a method for automated detection of the mentioned kind of undefined behavior. Finally, we design and implement a tool for its automated static detection and show the principles of the tool’s function. While designing the tool, contrary to current solutions, we stress functionality even in cases like accessing the memory via a pointer or from a called function. The thesis contains examples of dangerous constructs, functions of the created tool are demonstrated on some of them.
|
|
Gramatická evoluce v optimalizaci software
Pečínka, Zdeněk ; Minařík, Miloš (oponent) ; Sekanina, Lukáš (vedoucí práce)
Tato diplomová práce nabízí stručný úvod do evolučního počítání. Popisuje a porovnává genetické programování a gramatickou evoluci a jejich možné využití v problematice automatické opravy software. Podrobně studuje možnosti aplikace gramatické evoluce v problému automatické opravy softwaru. Na základě získaných poznatků byla navržena a implementována nová metoda pro automatickou opravu softwaru, založená na gramatické evoluci. Její experimentální ověření proběhlo na řadě testovacích programů.
|
|
Detekce podobnosti zdrojových souborů v jazyce C
Rek, Petr ; Kučera, Jiří (oponent) ; Matula, Peter (vedoucí práce)
Tato práce se zabývá návrhem, implementací a testováním nástroje csim, sloužícího pro porovnávání podobnosti dvou souborů v jazyce C. Primárním účelem vzniku tohoto nástroje je testování zpětného překladače vyvíjeného společností AVG Technologies s.r.o. Testování je prováděno na základě podobnosti abstraktního syntaktického stromu původního a dekompilovaného souboru. Čtenář je tedy seznámen se základy problematiky zpětného inženýrství, zejména zpětným překladem binárního kódu do vyšší úrovně reprezentace. Dále je popsán koloběh, kterým kód prochází od jeho vytvoření až po zpětný překlad, a jeho vliv na tento proces. Čtenáři je také poskytnut přehled o projektu LLVM a překladači Clang, který je základním stavebním kamenem nástroje csim.
|
|
Automatická tvorba testovacích případů z datových toků
Kraut, Daniel ; Fiedor, Tomáš (oponent) ; Smrčka, Aleš (vedoucí práce)
Tato práce se zabývá automatickou tvorbou testovacích případů na úrovni jednotkového testování, pro zdrojové texty v jazyce C. K dosažení automatizace jsou použity metody přístupu k software jako k datovým tokům proměnných. Je zde nastíněn náhled na průběh tvorby testů a funkci CSP solverů, které jsou nezbytnou částí pro rozhodnutelnost těhto problémů. Statická analýza kódu je umožněna knihovnou LibTooling v projektu překladačového front-endu Clang. Jsou uvedeny výstupy z aplikace, jimiž jsou automaticky vytvořené vstupní hodnoty pro testovací případy.
|
|
Jednoduché vývojové prostředí pro C++ na platformě Android
Režňák, Pavel ; Janoušek, Vladimír (oponent) ; Peringer, Petr (vedoucí práce)
Tato bakalářská práce se zabývá vytvořením prostředí pro překlad aplikací psaných v jazycích C a C++. Vývojové prostředí se skládá z aplikace emulující terminál a balíčků obsahujících open-source překladače a pomocné nástroje, přeložené pro mobilní zařízení s ARM procesorem a operačním systémem Android. Tento proces zahrnuje vygenerování křížového překladače pro systém Android z nástrojů NDK, správné nastavení parametrů během konfigurace, opravy zdrojových souborů těchto open-source překladačů a vytvoření aplikace instalovatelné pod OS Android, která umožní snadné použití těchto nástrojů.
|
|
Alias analýza v překladači jazyka C
Bolvanský, Dávid ; Zachariášová, Marcela (oponent) ; Hruška, Tomáš (vedoucí práce)
Táto práca sa venuje problematike alias analýzy a možnostiam jej vylepšenia v LLVM frameworku. Cieľom tejto práce je zlepšiť jej presnosť, čoho bolo dosiahnuté rozšírením implementácie Andersenovho algoritmu o citlivosť na položky štruktúr. Vysvetlené sú pojmy súvisiace s alias analýzou a je popísaný princíp algoritmov alias analýzy. Predstavený je koncept LLVM frameworku, popísané sú aktuálne implementované algoritmy alias analýzy. Porovnanie týchto algoritmov bolo vykonané z pohľadu ich princípu fungovania, vlastností a obmedzení. Implementácia citlivosti na položky štruktúr bola vyskúšaná na sade programov, ktorými sa testujú prekladače. Bol preskúmaný jej vplyv na rýchlosť prekladu programov a ich výkonnosť. Získané výsledky preukazujú zvýšenie presnosti alias analýzy v LLVM frameworku.
|
|
Automatická tvorba testovacích případů z datových toků
Kraut, Daniel ; Fiedor, Tomáš (oponent) ; Smrčka, Aleš (vedoucí práce)
Tato práce se zabývá automatickou tvorbou testovacích případů na úrovni jednotkového testování, pro zdrojové texty v jazyce C. K dosažení automatizace jsou použity metody přístupu k software jako k datovým tokům proměnných. Je zde nastíněn náhled na průběh tvorby testů a funkci CSP solverů, které jsou nezbytnou částí pro rozhodnutelnost těhto problémů. Statická analýza kódu je umožněna knihovnou LibTooling v projektu překladačového front-endu Clang. Jsou uvedeny výstupy z aplikace, jimiž jsou automaticky vytvořené vstupní hodnoty pro testovací případy.
|
|
Analýza kódu v jazyce C pro účely testování zpětného překladu
Dítě, Viktor ; Kolář, Dušan (oponent) ; Matula, Peter (vedoucí práce)
Cílem této práce je rozšíření aplikačního rámce pro tvorbu regresních testů o novou funkcionalitu pro analýzu kódu v jazyce C . Tento aplikační rámec je vytvořen v jazyce Python a pro analýzu zdrojového kódu využívá překladač clang . Práce obsahuje popis oboru zpětného inženýrství a zpětného překladače společnosti AVG . Dále je stručně představena oblast testování software a jazyk C . Následuje popis navržených a implementovaných rozšíření. Tato rozšíření jsou předvedena na ukázkových testech. V závěru nalezneme shrnutí výsledků práce.
|
|
Instrumentace programů pro měření pokrytí při testování SW
Kapoun, Petr ; Peringer, Petr (oponent) ; Smrčka, Aleš (vedoucí práce)
Tato práce se zabývá návrhem a tvorbou instrumentačního nástroje pro měření pokrytí při softwarovém testování. Nástroj při překladu získá reprezentaci vybraných částí programu v podobě grafu toku řízení a instrumentuje dané části programu vložením zpětných volání funkcí. Pomocí dat generovaných při volání vložených funkcí instrumentovaného programu nástroj vyhodnotí měření kritérií pokrytí. Mezi podporovaná kritéria pokrytí patří pokrytí řádků kódu a vybraná kritéria pokrytí toku řízení a toku dat.
|