Fujaba, FermaT, RECODER und Eclipse

Werbung
Existierende Systeme:
Fujaba, FermaT,
RECODER und Eclipse
Seminar Transformationen
Torben Hildebrandt
03.02.2006
Überblick
„
„
„
Motivation/Abgrenzung
Fragestellungen/Anforderungen an Tools
Tools:
… Fujaba
… FermaT
… RECODER
… Eclipse
„
„
Bewertung
Fazit/Relevanz für Arte-Fakt
1
Motivation/Abgrenzung
Fujaba: Grafisches UML-Tool / Java
„ FermaT: Formales Transformationssystem
„ RECODER: Klassisches
Transformationstool / Java
„ Eclipse: IDE mit Refactorings / Java
„
2
Fragestellungen
Wie sehen die Daten-/Berechnungsmodelle dieser Werkzeuge aus?
„ Worin ähneln/unterscheiden sie sich?
„ Anwendungen?
„
3
Anforderung an Refactoring-Tools
Zuverlässigkeit
„ Automatisierung der atomaren Schritte
des Refactorings
„ Korrektheit der automatisierten Schritte
„ Nachvollziehbarkeit
„
4
Fujaba
„
„
„
„
„
„
From UML to Java And Back Again
Aktuell: Version 4.3.1 (03/2005)
UML CASE Tool (open source)
1997 Universität Paderborn
Unterstützt: Klassen-, Aktivitäts-, Zustands-, Use-Caseund Kollaborationsdiagramme
Visuelle Programmiersprache
…
…
„
„
Grundlage: PROGRES
Abstrakter Syntaxgraph
Basis: Graphtransformation, UML, SDM und Java (1.5)
Refactorings als Plugins
http://www.fujaba.de
5
Fujaba: Motivation
„
„
„
Lernumgebung
Visuelle Programmiersprache
Round-Trip-Engineering
UML-Modell → vollständiger
Quellcode (Top-Down)
… Forward:
Quellcode → vollständiges
UML-Modell (Bottom-Up)
… Reverse:
6
Fujaba: Story Driven Modeling
„
„
„
„
Entwickelt von Uni Paderborn
Kombiniert Graph-Ersetzung & Programmierung: visuelle
Modellierungssprache
Beruht auf Story-Diagramme:
… Aktivitätsdiagramme mit eingebundenen
Kollaborationsdiagrammen; sonst keine Kontroll- und
Steuerfluss darstellbar
… Dynamische Systemanteile modellieren
… Abstrakte Analysetechniken (Use-Cases) & formale
Spezifikationen (Klassendiagramme)
Automatische Quellcode-Generierung
7
Fujaba: Quellcodegenerierung
public int sizeOfLevels() {
//here can be inserted any java code
if ( this.levels == null ) {
return (0);
} else {
return (this.levels.size ());
}
}
public void m1(int p1) {
while ( p1>0 ) {
p1--;
}
return;
}
8
Fujaba: Oberfläche
„
ToDo
9
Fujaba: Nulltransformation
D
10
Fujaba: Transformation
D
11
Software Reengineering
„
“about as easy as reconstructing a pig
from a sausage”*
* A. Eastwood, “It’s a hard sell - and hard work too. (software reengineering),”
Computing Canada 18 (1992), 35.
12
Software Reengineering
„
„
Damals: Eingeschränkte Ressourcen, Assembler
Heute:
…
…
„
Aufwand Assembler gegenüber C:
…
…
„
Funktion ca. 3x LOC
Höhere Kosten (Function point: Assembler = 70 €* / C = 31 €*)
Assembler:
…
…
„
hochperformante Systeme, mächtige Compiler
Objektorientierung
schwierig; teuer in der Wartung
wenig Flexibilität
Software Reengineering: Migration von Assembler
* SML Software Migrations Limited
13
Assembler
extrn
extrn
extrn
extrn
dsaft
adtn1
hrfft
oldgs
C
:abs
:word
:abs
:byte
no_pick:
mov
dx,dsaft
mov
bx,adtn1
call
far ptr tstbt
jnz
htst_irf_ret
mov
bx,adtn1
mov
dx,hrfft
call
far ptr tstbt
jz
htst_irf
mov
oldgs,0
call
far ptr hwal
jnz
htst_irf_ret
jmp
htst_irf
htst_irf_ret:
ret
D
void no_pick() {
if ((adtn1->dsaft == 0 && adtn1->hrfft == 0)) {
htst_irf();
} else if (adtn1->dsaft == 0) {
oldgs = 0;
hwal_zf = hwal();
if (hwal_zf != 0) {
htst_irf();
}
} return;
}
14
FermaT
„
„
„
„
„
„
„
„
„
Transformationssystem
GPL; kostenlos
Aktuell: Version 3 (03/2004)
Kommerziell: Software Migrations Limited FermaT
Workbench
1990 an Durham University entwickelt (Martin Ward)
Formale Grundlage, Paradigma imperativ
Regeln: WSL (Wide Spectrum Language) / MetaWSL
AST
Benötigt Perl 5.6.1 / C-Compiler (z.B. GCC)
http://www.dur.ac.uk/martin.ward/fermat.html
15
FermaT: Migration
16
FermaT: WSL
„
„
„
Definiert Regeln
Basis: Logik; eindeutige Syntax; regulär, formal definierte Semantik,
Korrekt
Erweiterung: MetaWSL (z.B. foreach: AST bottom-up, ifmatch)
…
…
…
„
low-level Programmierkonstrukte
high-level abstrakte Spezifikationen
Vorteil: Spezifikation & Implementierung in einer Sprache (reflexiv)
FermaT interpretiert / kompiliert WSL-Programme
…
…
Beinhaltet: WSL-zu-Scheme-Compiler (LISP-Dialekt) &
Scheme-zu-C-Compiler
Eingaben: WSL-Syntax-Datei (*.wsl), WSL-Scheme-Datei (*.scm),
Patch-Datei (*.tr)
17
FermaT: WSL-Beispiel
„
Expandieren eines IF-Statements
… If-Statement:
if B then S1 else S2 fi; S
… Transformation:
if B then S1; S else S2; S fi
18
FermaT: Transformation
MW_PROC @Reverse_All_Ifs_Test() ==
@Pass .;
MW_PROC @Reverse_All_Ifs_Code(Data) ==
FOREACH Statement DO
IF @Trans?(TR_Reverse_If)
THEN @Trans(TR_Reverse_If, "") FI OD.;
SKIP
;;; Scheme translation of WSL code
(define (/foreach-reverse_all_ifs-1 //Depth //A/S_/Type)
(cond
((@Trans? //T/R_/Reverse_/If)
(@Trans //T/R_/Reverse_/If ""))))
(define (@Reverse_All_Ifs_Test)
(@Pass))
(define (@Reverse_All_Ifs_Code //Data)
(@Foreach_Statement /foreach-reverse_all_ifs-1 0 (@AS_Type) 0)
(cond
((null? (@Program))
(@New_Program (@Skips)))))
#t
(display-list "Reading patch.tr")
(define //T/R_/Reverse_/If '())
(load "reverse_if.scm")
(load "reverse_if_d.scm")
(define //T/R_/Reverse_/All_/Ifs '())
(load "reverse_all_ifs.scm")
(load "reverse_all_ifs_d.scm")
19
Metaprogrammierung
„
„
Analyse / Änderung eines Programms durch
anderes (Metaprogramm)
Programmiersprache muss Mechanismen
bieten Metaschichten:
20
RECODER
Java-Framework
„ Statisches Metaprogrammieren
„ Aktuell: Version 0.75Beta (04/2005)
„ 1998 an Uni Karlsruhe entwickelt
„ Abstrakter attributierter Syntaxbaum
„ Generiert aus Java-Quelltext einen
Strukturbaum
„
http://recoder.sourceforge.net
21
RECODER: Konzept (1)
„
Metaprogrammierbibliothek: Stellt das
entsprechende Metamodell eines
Programms zur Verfügung
22
RECODER: Konzept (2)
„
Metamodell aus Entitäten von:
…
…
„
„
Modell: alle syntaktischen Eigenschaften des analysierten
Programms
Strukturbaum: zusätzliche Informationen
…
…
„
Position der Elemente in der Quelldatei
Verweise zwischen Variablendeklaration und Variablenbenutzung
Namensanalyse, dadurch zusätzliche Semantik
…
…
„
Java-Quelltext
Java-Bytecode
Type-of
Refers-to
Pretty Printer: Strukturbaum wieder in Quelltext (Formatierung bleibt
erhalten)
23
RECODER: Transformationsablauf
„
Java-Quelldateien einlesen, RECODERAST aufbauen, Transformation einleiten,
Quelltext schreiben
24
Refactorings
„
„
„
„
„
„
„
„
Klasse/Methode/Attribut/Variable umbenennen
Klasse in ein anderes Package verschieben
Methode/Attribut in die Superklasse verschieben
statische Methode in eine andere Klasse verschieben
Methode extrahieren
Methodensignatur ändern
Superklasse/Interface extrahieren
Attribut einkapseln
…
25
Eclipse
„
„
„
„
„
Java-IDE
… Aktuell: Version 3.1.2 (1/2006)
… Public License; kostenlos
… Entwickelt von IBM; 2001 Eclipse Foundation
Refactorings in Java Development Tools (JDT)
Seit 3.1 Language-Toolkit-Schicht (LTK)
Refactorings als eigenständige API in Eclipse-Plattform
… Unabhängig von Java-Unterstützung
… Portabel zu anderen Plug-Ins („Refactoring Participants“)
„ Plug-in: org.eclipse.ltk.core.refactoring
„ Plug-in: org.eclipse.ltk.ui.refactoring
Objektmodell AST für alle Sprachelemente (Klassen, Felder,
Methoden, Bibliotheken)
http://www.eclipse.org
26
Eclipse: Refactorings
„
„
„
„
„
„
„
Automatisiert
Bereits enthalten (29 / Fowler 93*)
Anwendbar auf: Java-Projekte, -Klassen, -Felder
und -Methoden
Funktionalität sicherstellen: JUnit-Tests
Undo-Funktion
IDE aktualisiert während Refactoring internes
Modell (Incremental Java Compiler)
Anpassung an Java-Entwicklung
* Martin Fowlers Refactoring-Liste: http://www.refactoring.com/catalog/index.html
27
Eclipse: Refactoring-Oberfläche
„
ToDo
28
Eclipse: Refactoring-Lifecycle
29
Bewertung der Tools
+ Alle Tools kostenlos
+ Forschungsprojekte, Wettbewerb
- Keine Refactorings implementiert (Ausnahme Eclipse)
„
Fujaba:
„
FermaT:
+ Alle Features als Plug-Ins, viele Exportformate + Korrektheit beweisbar
+ Intuitiv bedienbar
+ erfolgreiche Projekte: 544.000 LOC
x86 zu effizienten C-Code
- Keine Undo-Funktion
- fehlende Quelltextähnlichkeit, Kompatibilität
+ hohe Performanz
- Fehler bei Codegenerierung (Switch,
- schlechte Handhabbarkeit (subjektiv)
Mehrfachvererbung…)
- Aufwand; große Transformationen?
- Hoher Speicherbedarf; schlechte Performanz
- wenig Beispiele
beim Parsen
„
RECODER:
+ API verfügbar
+ Schnittstelle zur dynamischen
Metaprogrammierung (InjectJ…)
- Beta-Stadium
- wenig Beispiele
„
Eclipse:
+ Schnittstelle (RECODER, Fujaba)
+ Weiterentwicklung von Refactorings
(Anpassung an Java)
+ Refactorings ohne Zeitverlust
erreichbar, gute Bedienung, Undo
- Keine zusammengesetzten
Transformationen
30
Relevanz für Arte-Fakt
„
Erkenntnisse:
… Anderer
Kontext (Java-Programmierung/ Migration)
… Tools bieten keine Architektur-Refactorings
… Fujaba-Abstraktionsansatz interessant, aber
Codegenerierung anderer Kontext
„
Diskussionsvorschlag:
… Darstellung
IML als UML sinnvoll?
… Ansatz von RECODER für 1. Arte-Fakt-Ausbaustufe
… Ausblick: Konzepte der Tools für spätere
Ausbaustufen (Regeldefinition, GUI …)
31
Vielen Dank für Eure
Aufmerksamkeit!
Herunterladen