Hammer, ChristianKelter, Udo2024-10-252024-10-2520050720-8928https://dl.gi.de/handle/20.500.12116/45321Für automatisches Reengineering benötigt man garantierte Semantikerhaltung. Notwendige Voraussetzung ist hierbei z.B. dass der Slice eines bestimmten Codestücks gleich bleibt, d.h. dass es von den gleichen Anweisungen abhängig bleibt. Dadurch kann gewährleistet werden, dass alle Daten eines verschobenen Codestücks bei dessen Berechnung auch wirklich aktuell sind. Refactoring ist ein Beispiel, bei dem Slicing benutzt wird um die Semantik zu erhalten. Für parallele Java-Programme kann man aber keine optimalen Slices mehr finden, wie es für prozedurale Programme der Fall ist. Trotzdem lassen sich Näherungen berechnen, die einige nicht-erfüllbare Pfade durch das Programm ausschließen können und die damit den Reengineering-Prozess vereinfachen. Leider gibt es aber bis jetzt noch kein etabliertes Verfahren zur Berechnung der Abhängigkeiten, die durch Nutzung des gemeinsamen Speichers bei der parallelen Ausführung von Threads entstehen (Interferenz-Abhängigkeiten). Unser Ansatz kombiniert MHP mit den Erkenntnissen aus der Pointer-Analyse, die auch nur intra-prozedural definiert wurde und durch Cloning kontext-sensitiv gemacht werden kann. Dazu wurde das Tool bddbddb verwendet, das Pointer-Analyse mit Hilfe von BDDs (Binary Decision Diagram) berechnet. BDDs wurden bisher vor allem beim Model Checking verwendet, um die Explosion des Zustandsraumes besser im Speicher eindämmen zu können.deJavaSliceSlicingPointer-AnalyseBinary Decision DiagramInterferenzReengineeringParallelitätsanalyse für Slicing von Java ThreadsText/Conference Paper10.18420/swt25-2_0510.18420/swt25-2_05