Graph-basiertes Reengineering Seminar Model-Driven Software Development (MDSD) Stefan Sosnicki
Agenda 1. Einleitung 2. Begriffsklärung 3. Vorstellung der Werkzeuge 1. Jumli 2. Umodel 3. Fujaba 4. Vergleich der Werkzeuge 5. Fazit 2
1. Einleitung Verbesserung und Aufbereitung von Software gewinnt immer größere Bedeutung Softwaresysteme mit der Zeit vielen Entwicklungen unterworfen Architektur Neue Technologien äußere Einflüsse (z.b. Rechtslage) Probleme bei der Wartung: Veraltete Programmiersprachen Mangelnde Dokumentation Undurchsichtige Optimierungen Übersichtsverlust durch langjährige Wartung Programm schwer zu verstehen Altsoftware jedoch nicht einfach ersetzbar: Eng mit Geschäftsprozessen verknüpft Viel unternehmensinternes Wissen Entwicklung des Reengineering 3
2. Begriffsklärung the examination and alteration of a subject system to reconstitute it in a new form and the subsequent implementation of the new form [1] 3 Phasen des Software-Reengineering: Reverse Engineering Restrukturierung Forward Engineering Graphbasiertes Reengineering: Verwendung graphischer Darstellungsformen 4
2. Begriffsklärung Reverse Engineering Vertikale Transformation aus einer konkreteren in eine abstraktere Sprachebene Restrukturierung des Modells Mögliche Horizontale Transformationen Forward Engineering Vertikale Transformation aus einer abstrakteren in eine konkretere Sprachebene nicht zwangsläufig die gleiche Sprache wie vorher 5
3. Vorstellung der Werkzeuge Jumli (Java UML IDE): Freeware-Programm Primär zu Schulungszwecken entwickelt Unterstützt Java, C++ und C# Verwendung von UML UModel: Kommerzielles Produkt von Altova Umfangreiche Modellierungsoptionen Unterstützt nur Java Verwendung von UML Fujaba (From UML to Java and Back again): Open-Source-Programm der Universität Paderborn Als Studie zum Thema Reengineering entwickelt Unterstützt nur Java Verwendung von UML 6
3.1 Jumli Installation: Für Java und C# lediglich Installation des entsprechenden SDK erforderlich Für C++: Compiler MSYS, GNU Toolsammlung tmake, zur Erzeugung von Makefiles 7
3.1 Jumli Enthält UML Editor Integrierten Editor für Quellcode Externe Entwicklungsumgebung einstellbar Kann erstellte Programme kompilieren und ausführen Debugger ebenfalls verfügbar Bietet nicht nur einfach Import von Quellcode sondern auch Synchronisation von Model und Code Bei C++ nur Import von Klassen möglich Teilweise Erkennung von Assoziationen Umfangreiches Tutorial 8
3.1 Jumli Reverse Engineering eines C++-Projektes 9
3.1 Jumli Standardklassen können aus jeweiligem SDK importiert werden Sind dann als externe Klassen im Projekt verfügbar können aber nicht editiert werden 10
3.2 UModel Ausgereiftes kommerzielles Produkt für Modellierung von Java- Programmen mit UML Bietet viele Komfortfunktionen (grafische Funktionen, Suche nach Elementen des Modells) Gute Übersicht auch über große Projekte 11
3.2 UModel 12
3.2 UModel Erstellen von Komponenten und Deployment Diagrammen gewährt bessere Strukturierung und zusätzlichen Überblick bei großen Projekten Komponenten Diagramme 13
3.2 UModel Deployment Diagramme 14
3.2 UModel Anpassbare SPL Templates für Code-Generierung Verwendung von UML Templates für Java 5.0 Javadocs können aus Dokumentation generiert werden Import von kompletten Eclipse oder JBuilder Projekten möglich Allerdings schwache Assoziationserkennung Synchronisation von Model und Code auf verschiedenen Ebenen möglich Packages können von mehreren Projekten verwendet werden Batch-Befehle auch über Kommandozeile aufrufbar (z.b. Import eines Eclipseprojektes und erstellen von Diagrammen) 15
3.3 Fujaba Fujaba Tool Suite RE 4.2.0 zwar extra für Reengineering vorgefertigt, jedoch Versionskonflikte bei diversen Plugins Daher: Fujaba Tool Suite Standard 4.3.1 und Plugins selber installieren Benötigte Plugins: JavaAST 1.1, abstrakter Syntaxbaum für Java-Dateien JavaParser 3.1, Parser für Java-Quellcode Inference Engine 2.1, Erkennung von Design Pattern Pattern Specification 2.1, Erstellung von Diagrammen zur Spezifikation von Design Pattern Pattern Recognition Engines Generator 1.1, kompiliert Design Pattern Spezifikationen für Verwendung mit Inference Engine Association Detection 1.0, Erkennung von Assoziationen außerdem Java SDK ab Version 1.4 benötigt 16
3.3 Fujaba Ermöglicht: Generierung von Klassendiagrammen aus Java-Code Teilweise Erkennung von Assoziationen Erkennen von Design Pattern im Programm Patternerkennung setzt formale Beschreibung der Pattern voraus: auf Graphgrammatiken basierende Patternspezifikationssprache iterativer und skalierbarer Ableitungsalgorithmus Pattern Specification Plugin bietet graphischen Editor für Spezifikation von Design Pattern 17
3.3 Fujaba Patternbeschreibung in Form von Graphtransformationsregeln Grundlage bildet der Abstract Syntax Graph (ASG) des Quellcodes Erweiterung des ASG um Annotationselemente bei Anwenden einer Regel Regel besteht aus linker und rechter Seite Linke Seite: beschreibt erforderliche Struktur des ASG für Ausführung der Regel Auch Annotationen bereits ausgeführter Regeln Komposition von Regeln Trigger für Ausführung der Regel Rechte Seite: definiert zu erzeugendes Annotationselement erzeugt Verbindungen zu einzelnen ASG Elementen Aus Sammlung von Patternregeln wird Katalog erstellt 18
3.3 Fujaba Zusammengesetzte Patternregel 19
3.3 Fujaba Trigger und Abhängigkeiten untereinander bestimmen Ausführreihenfolge der Regeln Abhängigkeiten innerhalb des gesamten Katalogs werden in einem gesonderten Graphen dargestellt Abhängigkeitsgraph 20
3.3 Fujaba Nach Parsen des Quellcodes Aufruf der Patternerkennung Regeln eines Kataloges werden basierend auf ihren Abhängigkeiten und Prioritäten ausgeführt, beginnend mit den unabhängigen Erfolgreiches Anwenden von Regeln erzeugt Annotationen im ASG Auslösen von Triggern höherer Regeln 21
3.3 Fujaba Klassendiagramm mit erkannten Design Pattern 22
3.3 Fujaba Neben gewohnten UML Diagrammen auch erweitertes Aktivitätsdiagramm Darin Spezifikation von Story Pattern, in denen Instanzen und Interaktionen zwischen diesen modelliert werden können Dadurch vollständige Definition von Funktionen möglich 23
4. Vergleich der Werkzeuge Kriterium Jumli UModel Fujaba Plattform Windows, Linux Windows Windows, Mac, alle weiteren mit Java Unterstützung Installation Einfache Installation, für C++ weitere Komponenten erforderlich Einfache Installation Fujaba Tool Suite RE 4.2.0 nicht voll lauffähig, Plugininstallation mühsam Dokumentation Umfangreiche Hilfe und Tutorials Umfangreiche Hilfe mit Tutorial Manche Funktionen nicht dokumentiert, nur Tutorials von Dritten Stabilität des Programms Kleinere Probleme mit externen Klassen, sonst stabil Keine Fehler aufgetreten Oftmals Neustart des Programms erforderlich, Plugin- Inkompatibilitäten 24
4. Vergleich der Werkzeuge Kriterium Jumli UModel Fujaba Sprachunterstützu ng Java, C++, C# Java Java Reverse Engineering Klassengenerierun g, Assoziationserken nung, Synchronisation Klassengenerierun g, Synchronisation Klassengenerierun g, Assoziationserken nung, Patternerkennung Restrukturierung/ Modellierung Standard UML Standard UML mit vielen Komfortfunktione n Standard UML und Story Pattern für Funktionsdefinition Forward Engineering Einfache Codegenerierung, Synchronisation Einfache Codegenerierung, Synchronisation, Templates Beinahe Vollständige Codegenerierung, keine Synchronisation 25
5. Fazit Jumli Unterstützung mehrerer Sprachen Vollständige Entwicklungsumgebung und Synchronisation ermöglichen komplettes Roundtrip-Engineering mit einem Programm UModel Kommerzielles Produkt nur für Windows Sehr gute Modellierungsumgebung Zusatzfunktionen, wie Komponentenverwaltung und guter Synchronisationsmechanismus erleichtern Entwicklung großer Projekte Schwache Reverse Engineering Fähigkeiten Schwerpunkt liegt auf Modellierung Eher für Gesamtentwicklung eines Projekts mit automatischer Wartung des Modells 26
5. Fazit Fujaba Innovative Funktionen Dank Pattern Erkennung sehr gute Reverse Engineering Fähigkeiten Story Pattern ermöglichen den Entwurf beinahe komplett generierbarer Programme Wegen mangelnder Synchronisationsmöglichkeit jedoch nicht für Entwicklung größerer Projekte geeignet 27
Quellen [1] The Program Transformation Wiki, http://www.program-transformation.org [2] Workshop Software Reengeneering, http://www.uni-koblenz.de/~ist/wsr2004/ [3] Udo Gleich, Thomas Kohler, Juli 1997, Tool-support for Reengeneering of object-oriented systems http://www.iam.unibe.ch/~famoos/esec97/submissions/gleich.p df [4] Fujaba Homepage, http://www.fujaba.de [5] Jumli Hompage, http://www.jumli.de [6] Altova Umodel Homepage, http://www.altova.com/umodel 28