03-05-H-706.08
Ziel
Dieses Praktikum dient der Vertiefung des Kurses
Software-Reengineering. Hier werden wir Refactorings selbst
implementieren. Um die Vorbedingungen der Refactorings prüfen zu
können, benötigen wir Informationen zu Syntax, Namens- und Typbindung
sowie Kontroll- und Datenfluss. Als besonders herausforderndes
Refactoring werden wir uns insbesondere Extract-Method vornehmen.
Termin
In den Präsenzveranstaltungen in unregelmäßiger Folge werden wir die
notwendigen Werkzeuge und Algorithmen kennen lernen, die Ihr anwenden
bzw. implementieren sollt. Außerdem werdet Ihr Zwischenergebnisse
vorstellen, die wir gemeinsam diskutieren.
Wann wir uns treffen, werden wir bei der ersten Vorbesprechung am
9. April, um 11 Uhr, im OAS 3000 (Linzer Str. 9a, 3. Stock)
vereinbaren. Wenn Ihr nicht selbst an diesem Termin kommen könnt,
schickt bitte jemanden oder gebt mir per E-Mail Bescheid, zu welchen
Terminen Ihr nicht könnt.
Voraussetzung
Erfolgreiche Teilnahme am Kurs Software-Reengineering.
Inhalt
Im Kurs Software-Reengineering haben wir eine Reihe von Konzepten,
Methoden und Techniken zur Analyse und Änderung existierender Software
kennen gelernt.
In diesem Praktikum geht es nun um die praktische Umsetzung des
Gelernten. Dazu wollen wir ausgewählte Refactorings selbst
implementieren. Alle notwendigen Analyseschritte sollt ihr hierfür
entwickeln:
- syntaktische Analyse (TXL)
- Namensbindung (TXL)
- Generierung des abstrakter Syntaxbaum (TXL/Java)
- Kontrollflussanalyse (Java)
- Datenflussanalyse (Java)
- Transformation (TXL)
Für die mit TXL gekennzeichneten Schritte verwenden wir die
Transformationssprache TXL.
Alle weiteren Schritte könnt Ihr in Java implementieren. Dazu werden
wir den Ableitungsbaum in TXL in einen abstrakten Syntaxbaum, dessen
Knoten in Java-Datenstrukturen implementiert sind, übersetzen.
Die zu transformierende Sprache werden wir selbst entwerfen. Sie soll
relevante Konstrukte bieten, um die ausgewählten Refactorings anwenden
zu können (z.B. Klassen, Methoden, Attribute) und einfach genug sein,
damit wir die Refactorings mit vertretbarem Aufwand implementieren
können.