34. Werkzeuge zur Programmüberführung (Codegenerierung und Round-Trip Engineering) Prof. Dr. Uwe Aßmann Technische Universität Dresden Institut für Software- und Multimediatechnik http://st.inf.tu-dresden.de Version 09-0.5, 14.01.10 1) Codegenerierung 1) Beispielwerkzeuge 2) Codegenerierungstechniken 1) Schablonenbasierte Codegenerierung 3) Round-Trip Engineering SEW, Prof. Uwe Aßmann 1 Literatur http://www.codegeneration.net/ www.programtransformation.org http://www.codegeneration.net/tiki-read_article.php?articleid=65 Optional Völter, Stahl: Modell-Driven Software Development, AWL 2005. Prof. U. Aßmann, SEW 2
34.1 Codegenerierung Überführung von Modellen in Programme (Programmüberführung) CASE-Code-Generatoren SEW, Prof. Uwe Aßmann 3 Quelldiagramm Zielprogramm Graph. Modellspezifi kation UML-Diagramme SD-Modulchart (ERD, DFD,...) Textuelle Spezifi kation (OCL, UOL, UXF, PML) Stream based Model Interchange Format (SMIF) Übersetzer/Generator Zielsprache Codegerüst Spezifi kation der Zielsprache Spezifi kation des Übersetzungsvorganges, z.b. Auswahl Wurzeldiagramm, Modelltiefe, Startvariable u. a. vollständig/ lauffähig Prof. U. Aßmann, SEW 4
Phasen eines Code-Generators typische Werkzeuge Scanner lex, fl ex Front- Parser yacc, bison End AG-Werkzeug ELI, MAX, MUG, JastAdd, Silver Back-End (Codegenerator) Optimierergener. (Ziel- PAG, Optimix, sprachen- abhängig) Codegeneratorgenert. grgen BEG, cggg Quelldiagramm lexikalische Analyse syntaktische Analyse semantische Analyse Zwischencode Codeoptimierung Codegenerierung der kleinsten syntakt. Einheiten des Quelldiagramms (reguläre Ausdrücke) der Modellsyntax (kontextfreie Grammatiken) Prüfg. auf semantische Fehler (attributierte Grammatiken) interne Darstellg. im aktuellen Zustand (Bäume, Listen, Tabellen) Codeverbesserung (Effi zienz, Laufzeit, Speicher) Endgültige Zuordnung des Codes der Zielsprache Syntax der Eingabesprachen von Diagrammen ist meist einfacher als die höherer Programmiersprachen [20, S.153] Zielprogramm Prof. U. Aßmann, SEW 5 Schritte der Programmüberführung Dokumentation Dokumentengenerierung CASE-Tool Spezifi kation (z. B. Quelldiagramme) Single Source Quellcode- Umsetzung (Generierung) Code- Rückführung Generierter Quellcode manuelle optimierter und korrigierter Quellcode Handgeschriebener Quellcode Bearbeitung e.g., Fehlerkorrektur, Optimierung auf der Zielmaschine Prof. U. Aßmann, SEW 6
Single Source Prinzip Eine Single-Source-Technologie gewährleistet zu jeder Zeit an jedem Ort absolute Konsistenz zwischen Modell, Code und Dokumentation (Peter Coad, Together-CASE-Werkzeug, jetzt Borland): Vorhandensein nur einer defnierten Quelle für alle Softwareentwicklungsarbeiten einheitlicher Ausgangspunkt für Spezifkation, Quellcode und Dokumentation (einschließlich Handbücher) durch Bezeichner, Kommentare, Attribute, Markup oder ähnliches vorgegebene Struktur der Single Source Ausgangspunkt für das Round-Trip Engineering (Coderückführung) Prof. U. Aßmann, SEW 7 Arten der Programmüberführung 1. Quellcode-Umsetzung a) manuell: graphische Spezifi kation Dokumentation manuell Programmfi le b) Codeumwandlung: automatisierte Codegenerierung in eine oder auch mehrere Programmiersprachen Erzeugung von: Progr.-struktur, Bedingungen, Steuerfl uss und Datendeklarationen terminale Codeteile c) Templatebasierte Codeumwandlung: Einsetzen von Code-Fragmenten in Code-Schablonen 2. Programmvorschlag CASE-Spezifi kation zusammenhängender { Pseudocode 3. Rückführung (round-trip) des geänderten Source-Codes des Quellprogramms in die Code-Teile der CASE- Spezifi kation Prof. U. Aßmann, SEW 8
34.1.1 Beispiele SEW, Prof. Uwe Aßmann 9 Programmüberführung in SelectEnterprise Prinzip: Programmcode wird aus Objektmodell (Menge der UML-Diagramme, dominant Klassendiagramm) erzeugt Zielsprachen: C++, Java, Visual Basic, Forté, SQL, IDL Umsetzung: aus Klassendiagrammobjekten werden Codegerüste in der jeweiligen Zielsprache erzeugt bei Vollständigkeit des Modells ist lediglich Implementation der Methodenrümpfe erforderlich Returntypen, Defaultwerte, Datentypen und Kommentare werden dem Entwurfsmodell entnommen Bedienung: mit Data Type Converter unbekannte Datentypen festlegen Zielsprachenspezifi schen Generator aufrufen ( z. B. Java Synchronizer) eventuell zielsprachenspezifi sche Datentypen festlegen Codegenerierung durchführen Prof. U. Aßmann, SEW 10
Programmüberführung in Together Prinzip: Single-Source-Technologie durch vollautomatische Synchronisation und vollständige Konsistenz zwischen Modell, Code und Dokumentation. Zielsprachen: Java, Visual Basic, VisualBasic.Net, CORBA IDL, C++, C# Umsetzung: Multi-Language-Support durch Auswahl einer Programmiersprache(6) zu Beginn der Initialisierung eines neuen Projektes UML-Modelling Editor ist nicht nur Werkzeug für den Entwurf von UML-Spezifi kationen, sondern gleichzeitig werden diese inkrementell in die Syntax einer objektorientierten Programmiersprache überführt Synchronisation erfolgt über Parser, nicht über Repository. Bedienung: Simultanes Round-trip Engineering: Änderungen im Klassendiagramm werden unmittelbar im relevanten Source- Code angezeigt und umgekehrt Reverse Engineering existierender Projekte zeigt die darin enthaltenen Programmstrukturen auch als UML-Diagramm Programmiersprachenauswahl Prof. U. Aßmann, SEW 11 Basierend auf den Rollen: Business Modeler, Designer, Developer und Programmierer werden Sichten auf Arbeitsbereich automatisch konfi guriert(view-management). Das Einbinden von Patterns, Templates und vorgefertigten source-basierten Frameworks (Komponenten incl. EJBs) wird unterstützt. Zur Qualitätssicherung werden Metriken und Audits angeboten. Prof. U. Aßmann, SEW 12
Together-Arbeitsbereiche Prof. U. Aßmann, SEW 13 34.2 Codegenerierungs-Technologien SEW, Prof. Uwe Aßmann 14
Trennung von handgeschriebenem und generiertem Code Kopplung mit Entwurfsmuster [Völter/Stahl] (separate Dateien, Klassenverknüpfungen wie Delegation, Vererbung, Composite, Decorator, etc) Kopplung mit Trennmarkierung /*** Grenzmarkierung ***/ Handgeschriebener Code... /*** Grenzmarkierung ***/ Weitere Prinzipien der Codeselektion Prof. U. Aßmann, SEW 15 Ein Codeselektor ist ein Transformationssystem aus Term- oder Graphersetzungsregeln, der das Ausgangsprogramm oder -modell abdeckt, also jeden Knoten und Kante aus dem Ausgangsprogramm genau einmal transformiert Einsatz Innerhalb der Zwischen- oder Assembler-Codegenerierung des Übersetzers Als Back-End von CASE-Werkzeugen Ein Codeanordner (code scheduler) ordnet Befehle für den Chip in optimierter Reihenfolge an Codeanordnung erfolgt meist nach der Codeselektion Ein Schablonen-Expandierer (template expander) generiert Code, in dem er Schablonen (templates) mit Werten aus der Programmrepräsentation oder dem Modell füllt Ein Invasiver Fragmentkompositor (invasive software composition) komponiert Schablonen unter der Berücksichtigung von Fragmenttypen (s. CBSE) Prof. U. Aßmann, SEW 16
34.2.1 Schablonenbasierte Programmüberführung (Templatebased code generation) SEW, Prof. Uwe Aßmann 17 Trennung von handgeschriebenem und generiertem Code Kopplung durch Stringexpansion Kopplung mit Kompositionsprogramm Kompositionsprogramm String-Templateexpandierer Prof. U. Aßmann, SEW 18
Tools für Schablonenexpansion Untypisierte Schablonen-Expansion: Frame processing (Bassett). C Holmes, A Evans. A review of frame technology. University of York, Dept. of Computer Science, 2003. https://www.cs.york.ac.uk/ftpdir/reports/ycs-2003-369.pdf String template engines. Apache Velocity. Parr's template engine StrngTemplate. Jenerator for Java http://www.voelter.de/data/pub/jeneratorpaper.pdf Metamodel-controlled template engines Open Architecture Ware's Scripting language Invasive Softwarekomposition (siehe CBSE) Getypte Schablonen-Expansion und -erweiterung http://www.the-compost-system.org http://www.reuseware.org Prof. U. Aßmann, SEW 19 Xdoclet (xdoclet.sf.net) Xdoclet wandet Attribute (Metadaten) in Code um Schablonen-gesteuerte Codegenerierung Attribut- Code-Regeln Plugin Code- Schablonen Code- Attribute QDox Parser XDoclet Schablonen- Expandierer Hilfs-Code Prof. U. Aßmann, SEW 20
34.3 Codemodifkation und -rückführung Vorgehen der Coderückführung SEW, Prof. Uwe Aßmann 21 Aufgabe: Erkennen geänderter Code -Teile und Rückführung in die zugehörige Entwurfsspezifkation Prinzip: Die modifzierte Quellcodedatei stammt in jedem Fall aus der Single-Source- Spezifkation eines CASE-Tools, in die der geänderte Programmcode zurückgeführt werden soll Kennzeichnungen der Single Source-Spezifkation sind noch vorhanden. Strukturierung der Quellcodefles ist so, dass Abschnitte erkennbar sind und ihnen eindeutig die Objekte der Entwurfsspezifkation zugeordnet werden können, beispielsweise durch: Trennmarkierungen (-kommentare oder -attribute) zwischen den Abschnitten (Markup) wird zum Erkennen der Grenzen benutzt Vorhandensein von Code -Teilen als zielsprachenspezifsche Freiräume (hooks) Weitere Rückführinformationen gegebenenfalls aus dem Quellflekopf oder -kommentaren Bedienung: Automatisch Bei Rückführungsabweichungen erscheinen ausführliche Meldungen und Handlungshinweise für den Nutzer. Quelle: Lempp, P., Torick R. J.. Software Reverse Engineering: An Approach to Recapturing Reliable Software; 4th Ann. Joint Conf. on Softw. Quality and Productivity, Crystal City, VA, March 1-3, 1988 Prof. U. Aßmann, SEW 22
Beispiel-Folien Beispiel aus der Codegenerierung und -Rückführung von Fujaba: http://www.fokus.fraunhofer.de/en/fokus_events/motion/ecmda2008/_do cs/rs01_t03_manuelbork_emcda2008_slides.pdf Paralleles Parsen von Template und Generat, mit Vergleich zum Aufösen der Indeterminismen der Rückführung Prof. U. Aßmann, SEW 23 The End Prof. U. Aßmann, SEW 24