The project is planned for the Winter semester 2023/24 at ulm university (see here).
The presentation can be found here:
Program Slicing ist eine wichtige Technik um Menschen beim Verständnis von Programmcode zu unterstützen. Ein Program Slicer identifiziert für eine gegebene Variable die Teile des Programms, die einen Einfluss auf den Wert dieser Variable an der gegebenen Position haben können. Das flowR Projekt konstruiert hierfür einen Datenflussgraphen, berechnet den Slice durch die Reduktion auf ein Erreichbarkeits-Problem und hat unter anderem das Ziel, ausführbaren Code zu erzeugen, der den Wert der gewählten Variable berechnet. Um die Arbeit mit und die Ausgabe von flowR zu verbessern, gibt es zwei mögliche Projekte die hier angegangen werden können und die im Folgenden kurz beschrieben werden.
Die von flowR generierten Datenflussgraphen erreichen schnell eine Größe, die mit statischen Visualisierungen wie zum Beispiel durch Mermaid nicht mehr handhabbar ist. Um die Arbeit mit diesen Graphen zu erleichtern sollen zwei bis vier Studierende eine interaktive web-basierte Visualisierung für flowR entwickeln, die die produzierten Datenflussgraphen darstellt und dem Nutzer diverse Operationen wie das Filtern und Ausblenden von Knoten und Teilgraphen erlaubt.
Das Slicing in flowR selektiert eine Menge an Knoten des abstrakten Syntaxbaums, die für den Slice enthalten sein müssen. Eine bestehende Implementation in TypeScript versucht bereits auf Basis dieser Knoten, ausführbaren Code zu generieren, der den Wert der gewählten Variable berechnet und so nah wie möglich am ursprünglichen Layout des Programms ist. Die Ergebnisse sind dabei aber oft noch unzureichend, da beispielsweise eine Umformatierung des Codes stattfindet oder der Code nicht mehr ausgeführt werden kann. Die Studierenden können im Rahmen des Projektes die bestehende Implementation erweitern oder eine neue Implementation entwerfen um die Qualität der generierten Ausgabe zu verbessern.
Program slicing is an important technique to assist program comprehension. A program slicer identifies the parts of a program, that can have an affect on the value of a variable at a given position. To generate the slice, the flowR project uses a dataflow graph, reducing the challenge to a reachability problem, to produce executable code that calculates the value of the selected variable. To improve working with and the output of flowR, I propose two possible projects that are described briefly in the following.
flowR's dataflow graphs scale quickly in size, rendering static visualization with tools like Mermaid infeasible. Hence, two to four students should develop an interactive web-based visualization for flowR that displays the produced dataflow graphs, allowing the user to perform operations like filtering and hiding nodes and subgraphs.
flowR slices by selecting a subset of nodes of the abstract syntax tree of the program. There is already an existing implementation in TypeScript that tries to generate executable code which calculates the value of the selected variable while preserving the original layout of the program. However, the results are often unsatisfactory, for example, due to the generated code being often reformatted or no longer executable. Within the project, the students can choose to reuse the existing implementation or to create a new one, to improve the quality of the generated output.