E194 - Institut für Information Systems Engineering
-
Date (published):
2025
-
Number of Pages:
102
-
Keywords:
Code Slicing; Program Slicing; Program Analysis; Dependency Analysis; Dependency Tracking; Isolated Code Execution; Static Analysis
en
Abstract:
In der Softwareentwicklung besteht häufig der Bedarf, gezielt bestimmte Codebereiche zu testen oder zu analysieren, ohne das gesamte Programm auszuführen. Dies wird jedoch schwierig, wenn der ausgewählte Bereich von den umgebenden Definitionen oder dem Kontext abhängt. In dieser Arbeit wird ein statisches Programm-Slicing-Verfahren vorgestellt, das die isolierte Ausführung von Codeausschnitten ermöglicht, die aus größeren Programmen extrahiert wurden. Die vorgestellte Methode identifiziert und rekonstruiert ausschließlich jene Teilmengen des ursprünglichen Codes, die erforderlich sind, um die Semantik eines ausgewählten Bereichs zu bewahren. Dadurch lässt sich das Ergebnis unabhängig vom ursprünglichen Kontext ausführen. Der Ansatz basiert auf einer rekursiven Abhängigkeitsanalyse durch Traversierung des abstrakten Syntaxbaums sowie des Aufrufgraphen. Dabei werden sowohl direkte als auch transitive Beziehungen zwischen Anweisungen aufgelöst. Ein Mechanismus zur Verfolgung von Variablenverwendungen unterscheidet zwischen auflösbaren und nicht auflösbaren Elementen. Letztere werden der Anwenderin oder dem Anwender über typgeprüfte Eingabeaufforderungen präsentiert. Die finale Teilmenge wird mittels topologischer Sortierung und strukturierter Rekonstruktion zu einem ausführbaren Skript umgebaut.Der Ansatz wurde in dem Prototyp-Tool CodeDetective implementiert, das typisierte Python Eingabeprogramme unterstützt und anhand einer Benchmark-Suite mit zehn konzeptionellen Schwierigkeitsgraden evaluiert wurde. Die Evaluierung zeigt, dass das System eine Genauigkeit von über 82% erreicht und damit deutlich besser abschneidet als die Basis-Tools, denen es an Fähigkeiten zur Programmanalyse oder zur Verarbeitung von Benutzereingaben fehlt und lediglich etwa 10% bzw. 30% erreichten. Diese Ergebnisse verdeutlichen das Potenzial des Ansatzes, die isolierte Ausführung von Codeausschnitten zu ermöglichen, selbst wenn die relevanten Abhängigkeiten über den ausgewählten Bereich hinausgehen.
de
In software development, developers often need to test or inspect specific regions of code without running the entire program. However, this becomes difficult when the selected fragment depends on surrounding definitions or context. This thesis presents a static program slicing approach for enabling the isolated execution of code snippets extracted from larger programs. The proposed method identifies and reconstructs only a subset of the original code that is required to preserve the semantics of a selected region, allowing the result to execute independently of its original context. The approach performs recursive dependency analysis by traversing the abstract syntax tree and call graph of the program, resolving both direct and transitive relationships between statements. A variable tracking mechanism distinguishes resolvable elements from unresolved ones, which are presented to the user through type-validated input prompts. The final subset is constructed into an executable script using topological sorting and structured rewriting.The approach was implemented in the prototype tool CodeDetective, which supports typed Python input programs and evaluated on a benchmark suite spanning ten conceptual difficulty levels. The evaluation shows that the system achieves an accuracy score of over 82%, significantly outperforming baseline tools lacking program analysis or interactive input handling, which reached only approximately 10% and 30%. These results highlight the potential of the approach to enable isolated execution of code snippets, even when dependencies span beyond the selected region.
en
Additional information:
Arbeit an der Bibliothek noch nicht eingelangt - Daten nicht geprüft Abweichender Titel nach Übersetzung der Verfasserin/des Verfassers