Debugging Large and Long-Running Applications Using Generated Tests
Odstraňování chyb v rozsáhlých a dlouho-běžících aplikacích s využitím generovaných testů
diplomová práce (OBHÁJENO)
Zobrazit/ otevřít
Trvalý odkaz
http://hdl.handle.net/20.500.11956/202922Identifikátory
SIS: 265283
Kolekce
- Kvalifikační práce [11993]
Autor
Vedoucí práce
Oponent práce
Petříček, Tomáš
Fakulta / součást
Matematicko-fyzikální fakulta
Obor
Informatika - Softwarové systémy
Katedra / ústav / klinika
Katedra distribuovaných a spolehlivých systémů
Datum obhajoby
9. 9. 2025
Nakladatel
Univerzita Karlova, Matematicko-fyzikální fakultaJazyk
Angličtina
Známka
Výborně
Klíčová slova (česky)
Automatické ladění|Dynamická analýza|Generování testů|LLMKlíčová slova (anglicky)
Automated debugging|Dynamic analysis|Test generation|LLMLadění velkých a dlouho běžících aplikací je složitý manuální proces. Tato práce řeší tento problém návrhem a prototypizací systému, který automaticky generuje cílené testy z dat získaných za běhu. Pomocí dynamické analýzy a instrumentace bytecode pomocí DiSL sbírá systém hodnoty klíčových proměnných při běhu aplikace v jazyce Java. Tato data pak jsou použita k vygenerování sady deterministických testů, které replikují kon- krétní stavy provádění, což vývojářům umožňuje efektivněji izolovat a analyzovat chyby. Vytvořili jsme základ pro porovnání různých strategií generování testů a byly implemen- továny dvě: naivní metoda založená na sledování běhových hodnot a nový přístup, který využívá velký jazykový model (Large Language Model, LLM). Systém jsme implemento- vali jako modulární a rozšiřitelný projekt s uživatelským rozhraním v podobě zásuvného modulu prostředí IntelliJ IDEA. Vyhodnocení na vybraném benchmarku Defects4J pro- kazuje realizovatelnost systému jakožto funkčního prototypu.
Debugging large and long-running applications is a complex manual process. This thesis addressed this challenge by designing and prototyping a system that automatically generates targeted tests from runtime data. Using dynamic analysis and bytecode in- strumentation with DiSL, the system collects runtime values of key variables during the execution of a Java application. This data is then used to generate a suite of deterministic tests that replicate specific execution states, allowing developers to isolate and analyze faults more effectively. We established a framework for comparing distinct test generation strategies and imple- mented two: a naive trace-based method and a novel approach that leverages a Large Language Model (LLM). We implemented the system as a modular and extensible project with an IntelliJ IDEA plugin for its user interface. The evaluation on a selected Defects4J benchmark demonstrates the system's viability as a functional prototype.
