34.1 Codegenerierung

Werbung
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
Herunterladen