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 Literatur 1) Codegenerierung ► http://www.codegeneration.net/ ► www.programtransformation.org ► http://www.codegeneration.net/tiki-read_article.php?articleId=65 ► Optional ■ 1) Beispielwerkzeuge Völter, Stahl: Modell-Driven Software Development, AWL 2005. 2) Codegenerierungstechniken 1) Schablonenbasierte Codegenerierung 3) Round-Trip Engineering Version 09-0.5, 14.01.10 SEW, © Prof. Uwe Aßmann 1 Prof. U. Aßmann, SEW 2 CASE-Code-Generatoren 34.1 Codegenerierung Quelldiagramm Zielprogramm Graph. Modellspezifi kation UML-Diagramme SD-Modulchart (ERD, DFD, ...) Textuelle Spezifi kation (OCL, UOL, UXF, PML) Überführung von Modellen in Programme (Programmüberführung) Zielsprache Codegerüst Stream based Model Interchange Format (SMIF) Spezifi kation der Zielsprache SEW, © Prof. Uwe Aßmann Übersetzer/Generator 3 Spezifi kation des Übersetzungsvorganges, z.B. Auswahl Wurzeldiagramm, Modelltiefe, Startvariable u. a. vollständig/ lauffähig Prof. U. Aßmann, SEW 4 Schritte der Programmüberführung Phasen eines Code-Generators typische Werkzeuge Scanner lex, fl ex Front- Parser yacc, bison End AG-Werkzeug ELI, MAX, MUG, JastAdd, Silver Quelldiagramm lexikalische Analyse der kleinsten syntakt. Einheiten des Quelldiagramms (reguläre Ausdrücke) syntaktische Analyse der Modellsyntax (kontextfreie Grammatiken) semantische Analyse Prüfg. auf semantische Fehler (attributierte Grammatiken) Zwischencode Back-End (Codegenerator)Optimierergener. PAG, Optimix, (Zielgrgen sprachenabhängig) Codegeneratorgenert. BEG, cggg Syntax der Eingabesprachen von Diagrammen ist meist einfacher als die höherer Programmiersprachen [20, S.153] Dokumentengenerierung ► Single Source (z. B. Quelldiagramme) QuellcodeUmsetzung (Generierung) CodeRückführung interne Darstellg. im aktuellen Zustand (Bäume , Listen, Tabellen) Codeoptimierung Codeverbesserung (Effi zienz, Laufzeit, Speicher) Codegenerierung Endgültige Zuordnung des Codes der Zielsprache Generierter Quellcode manuelle e.g., Fehlerkorrektur, Optimierung auf der Zielmaschine Handgeschriebener Quellcode Zielprogramm Prof. U. Aßmann, SEW optimierter und korrigierter Quellcode Bearbeitung 5 Prof. U. Aßmann, SEW 6 Arten der Programmüberführung Single Source Prinzip ► CASE-Tool Spezifi kation Dokumentation 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) 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 CASESpezifi kation Prof. U. Aßmann, SEW 7 Prof. U. Aßmann, SEW 8 Programmüberführung in SelectEnterprise 34.1.1 Beispiele 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 9 SEW, © Prof. Uwe Aßmann Prof. U. Aßmann, SEW 10 Programmiersprachenauswahl 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 SourceCode angezeigt und umgekehrt – Reverse Engineering existierender Projekte zeigt die darin enthaltenen Programmstrukturen auch als UML-Diagramm Prof. U. Aßmann, SEW 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. 11 Prof. U. Aßmann, SEW 12 Together-Arbeitsbereiche 34.2 Codegenerierungs-Technologien Prof. U. Aßmann, SEW Trennung von handgeschriebenem und generiertem Code Kopplung mit Entwurfsmuster [Völter/Stahl] (separate Dateien, Klassenverknüpfungen wie Delegation, Vererbung, Composite, Decorator, etc) SEW, © Prof. Uwe Aßmann 13 Weitere Prinzipien der Codeselektion ► 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 Kopplung mit Trennmarkierung ■ Innerhalb der Zwischen- oder Assembler-Codegenerierung des Übersetzers ■ Als Back-End von CASE-Werkzeugen /*** Grenzmarkierung ***/ … Handgeschriebener Code .... ► Ein Codeanordner (code scheduler) ordnet Befehle für den Chip in optimierter Reihenfolge an ■ /*** Grenzmarkierung ***/ Prof. U. Aßmann, SEW 14 15 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 Prof. U. Aßmann, SEW von Fragmenttypen (s. CBSE) 16 Trennung von handgeschriebenem und generiertem Code 34.2.1 Schablonenbasierte Programmüberführung (Templatebased code generation) Kopplung durch Stringexpansion Kopplung mit Kompositionsprogramm String-Templateexpandierer 17 SEW, © Prof. Uwe Aßmann Prof. U. Aßmann, SEW Tools für Schablonenexpansion ► ■ ► ► Frame processing (Bassett) Xdoclet wandet Attribute (Metadaten) in Code um ■ . 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 Schablonen-gesteuerte Codegenerierung AttributCode-Regeln . Apache Velocity . Parr's template engine StrngTemplate . Jenerator for Java http://www.voelter.de/data/pub/jeneratorPaper.pdf Plugin CodeSchablonen Metamodel-controlled template engines ■ ► 18 Xdoclet (xdoclet.sf.net) Untypisierte Schablonen-Expansion: ■ Kompositionsprogramm 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 XDoclet CodeAttribute Prof. U. Aßmann, SEW 19 SchablonenExpandierer Hilfs-Code QDox Parser Prof. U. Aßmann, SEW 20 Vorgehen der Coderückführung 34.3 Codemodifkation und -rückführung ► 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-SourceSpezifkation eines CASE-Tools, in die der geänderte Programmcode zurückgeführt werden soll ■ ■ ■ ► 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 21 Beispiel-Folien ► Strukturierung der Quellcodefles ist so, dass Abschnitte erkennbar sind und ihnen eindeutig die Objekte der Entwurfsspezifkation zugeordnet werden können, beispielsweise durch: ■ ■ SEW, © Prof. Uwe Aßmann Kennzeichnungen der Single Source-Spezifkation sind noch vorhanden. Prof. U. Aßmann, SEW 22 Prof. U. Aßmann, SEW 24 The End 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