Software Engineering 2 – Konstruktion interaktiver (CASE) Tools
SS 2007
Albert Zündorf, Software Engineering
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
2
Administratives
Vorlesung: Montags 15-18 Uhr Raum 1342 (4SWS)
Prüfung: Projektarbeit (wir basteln uns ein (Petri-Netz) Tool)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3
Überblick
1. Referenzarchitektur
2. Meta-Modell
3. Repository
4. Austauschformate
5. Unparsing
6. Checking
7. Code Generierung
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
4
1. Referenzarchitektur
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
5
2. Meta-modell
abstrakter Syntaxgraph (ASG)
logische Datenstruktur hinter der Darstellung am Bildschirm
speichert Editoreingaben
beschrieben durch Klassendiagramm
File Edit Tools X
out = f (in);[out.x < 20][out.x > 10]
out.x = in.x + 1;
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
6
Beispiel aus http://www.daimi.au.dk/CPnets/intro/
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
7
2. Meta-modell
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
8
Meta Meta Meta
M0: Objekte / Instanzen zur Laufzeit (Jim, GET-Vorlesung)
M1: Modell Diagramme die der Benuzter eingibt(Student, Vorlesung, ...)(oft UML)
M2: Meta-Modell: Klassendiagramm, dass Benuterzdiagramm beschreibt / Tool Ebene(mit UML oder MOF)
M3: Wer beschreibt das Meta-Modell? Meta-Meta Modell (meist MOF, MOF ist selbstbeschreibend Mn+1 = Mn)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
9
Sicht des Tool-Bauers
M0
M1
M2
M3
Jim SE II
Albert
Student
Course
UMLClass
UMLAssoc
. . .
CASE
TOOL
• Meta Modelle sind auch nur Modelle
• Modellierungsebene beeinflusst Modellierungssprache nur wenig
• Oft mehrere Ebenen betroffen
• Meta Meta ist Quatsch
• nur wenn man einen Knoten im Hirn braucht
• nur zur Verwirrung der Leute
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
10
Meta Object Facility – MOF
yet another meta model for class diagrams
UML notation
+ klare Semantik
+ standard Implementierung(z.B. JMI Repository)
+ standard Austauschformate(XMI)
Akademische Initiative
Open source
oft als Austauschformat zwischen Tools benutzt
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
11
3. Repository
Man will ja auch mal abspeichern und wieder laden:
Binäre File-Formate / Java Serialisierung
class C implements Serializable
bestimmen aller Objekte die gespeichert werden sollen( Composite Struktur)
transiente Attribute werden ausgeklammert
Anforderungen Serialisierung
Speichern und Laden +
Einfachheit ++
Tool-Kopplung O
Multi-User Support -
Versionierung --
Schema-Evolution ?
Scaling O
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
12
3. Repository
XML-Formate
generische Lade-/Speicher Routinen per Java Reflection
bestimmen aller Objekte die gespeichert werden sollen( Composite Struktur)
JDom / Xerces Basistechnologie(beherschbar)
Anforderungen XML - Formate
Speichern und Laden +
Einfachheit +
Tool-Kopplung +
Multi-User Support -
Versionierung --
Schema-Evolution +
Scaling -
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
13
3. Repository
Relationale Datenbanken
Objekte und Beziehungen werden als Tupel in Datenbanktabellen gespeichert
Zugriff per ODBC
Middleware (z.B. Hibernate)
Multi-User Betrieb durch Datenbank Sperrkonzepte und Transaktionen pessimistische Sperren Caching schwierig
Anforderungen Datenbanken
Speichern und Laden +
Einfachheit -
Tool-Kopplung +
Multi-User Support +
Versionierung -
Schema-Evolution +
Scaling ++
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
14
3. Repository
Coobra: COmmon Object Replication frAmework
Basismechanismus von Fujaba
Protokollierung aller Attributzugriffe als Deltas per Listener
Undo / Redo
Deltas Checkin / Checkout in Repository
optimistisches Locking / Merging
Integriert in Fujaba Code Generierung
manuelle Implementierung möglich
Anforderungen Coobra
Speichern und Laden +
Einfachheit ++
Tool-Kopplung +
Multi-User Support ++
Versionierung ++
Schema-Evolution +
Scaling -
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
15
3. Repository
Anforderungen Serialisierung XML - Formate
Datenbanken Coobra
Speichern und Laden + + + +
Einfachheit ++ + - ++
Tool-Kopplung O + + +
Multi-User Support - - + ++
Versionierung -- -- - ++
Schema-Evolution ? + + +
Scaling O - ++ -
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
16
4. Commands
Aktionen hinter Menüpunkten und Buttons
Viele Buttons/Menüpunkte für ein Kommando denkbar
Undo/Redo Einheiten
API Operationen
Macros
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
17
4. Commands
Normalerweise ein Objekt/eine Klasse pro Command
Aufwändige Protokolle für's Undo/Redo
API getrennt
Bei uns Undo/Redo per Coobra
FWT direkter Aufruf von Operationen Operationen beliebig gruppierbar (z.B. in Klasse StatechartEditor) FWT Elemente benutzen direkt die API
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
18
4. Commands
Aufgabe
Klasse StatechartEditor bauen
main Methode baut eine Instanz
initGUI Methode baut Hauptfenster aus FWT Elementen
erwartete Operationen / GUI Elemente: Load / Save Undo / Redo Create / Delete State Create / Delete Transition startDobs Unparsing später, wir schauen uns das im Dobs an
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
19
5. Unparsing
Metamodell: interne Speicherung z.B. für Code Generierung
GUI: Darstellung am Bildschirm z.B. mit GEF (oder Swing)
Unparsing: Erzeugung der Darstellung aus dem Metamodell
2 Teilprobleme:
1. Erzeugung von Darstellungselementen für Modell
2. Synchronisation bei Änderungen
?p1:Place t1:Transition
a1:Arc
pn:PetriNet
p2:Place
a2:Arc
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
20
Bildschirmdarstellung vs. interne Struktur
p1:Place t1:Transition
a1:Arc
pn:PetriNet
p2:Place
a2:Arc
c:Canvas
c1:Circle r1:Rectangle c1:Circle
l1:Label cn1:Connection cn2:Connection l2:Label
Model
View
GUI
Action Update
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
21
… The GEF Way (1)
p1:Place t1:Transition
a1:Arc
pn:PetriNet
p2:Place
a2:Arc
c:Canvas
c1:Circle r1:Rectangle c1:Circle
l1:Label cn1:Connection cn2:Connection l2:Label
Model
View
GUI
Update
Create/Update
Paint
Action
3 Probleme:
1. Initiales Unparsing
2. Update des Views bei Änderung am Model
3. Umsetzen von Nutzeraktionen in Modelländerungen
MVC
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
22
View-Update: Model-View-Controller
p1:Place t1:Transition
a1:Arc
pn:PetriNet
p2:Place
a2:Arc
c:Canvas
c1:Circle r1:Rectangle c1:Circle
l1:Label cn1:Connection cn2:Connection l2:Label
Model
View
Interface
Model weiß nichts über View Notification Mechanism
View weiß nichts über Model
Controller Bringt beides zusammen…
Interface
l1:Listener l2:Listener...
setGraphicalPropertyX()
…
setName(„myPlace“)
firePropertyChange(…)
setText(„myPlace“)
Controllerc1:Controller c2:Controller
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
23
p1:Place t1:Transition
a1:Arc
pn:PetriNet
p2:Place
a2:Arc
Interface
c:Canvas
c1:Circle r1:Rectangle c1:Circle
l1:Label cn1:Connection cn2:Connection l2:Label
Interface
… The GEF Way (2)
Model
View
create()setGraphicalPropertyX()
…
ControllerGEF
Action
ep1:EditPart ep2:EditPart...epf:EditPartFactory
c1:Command
ep1:EditPolicy
z.B. EMF
Draw2DFigures
„1:1“
1:1
create()
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
24
EMF + GEF = GMF
GEF ist schön und gut, aber …
… immer noch viel zu kompliziert und aufwändig
… nicht model-driven (Java-Hacken)
GMF (Graphical Modeling Framework)
Führt EMF und GEF zusammen
Spezifizieren statt Programmieren
… alles viel schöner, einfacher, schneller, besser !?
Sehr spezifische Anforderungen an das Modell(1:1 Umsetzung): Da gibt‘s noch was zu tun…
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
25
GMF Übersicht
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
26
Graphical Definition Model
Definiert die Diagrammelemente
Figure-Gallery enthält graphische Primitive
Nodes, Connections… binden Figures an logische Diagrammelemente
Graphical Definition Model =Visual Language
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
27
Tooling Definition
Toolbar
Menüs
…
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
28
Mapping Model / Notation Model
Bildet das Domain Model auf das Graphical Definition Model ab Im Wesentlichen 1:1 Kanten aus Objekten oder Links braucht Komposition im Modell … Etwas komplexere Mappings über
OCL-Bedingungen möglich In Zukunft (vielleicht) mal flexibler
durch „echtes“ Model-Mapping mit QVT
Mapping Model + Graphical Definition Model = Notation Model
Ordnet Tools aus Tooling Definition zu
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
29
Unparsing Summary
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
30
1. Referenzarchitektur
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
31
setUp
Beispiel Petri Net: Uni-Party
Idea OrgaTeam
start
findPeople
Date
Bands
Room
corePlanning go
Advertising
PartyTeam
Equipment
FireDep.
DrinkingFood.
detailingprepareopen
entryparty
begincloseIt
wrapUP
teamParty
celebrate
increment
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
32
Nebenläufigkeit: corePlanning
OrgaTeam
Date
Bands
Room
planing
DatePlan BandPlan RoomPlan
dateNegos bandNegos roomNegos
DateFixed BandFixed RoomFixed
reviewing
[failure]
[success]
[success]
[success]
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
33
Semantikvorschlag:
ordne jeder Transition ein Java-Codefragment zu
In und Out Stellen sind Variablen (a bis e) vom Typ Stelle
Transitionen werden neu geschedult wenn sich an einerIn oder Out Stelle was ändert
Transition entscheidet ob und welche Token konsumiert und produziert werden
wenn eine Transition etwas tut, wird sie neu geschedult
es gibt spezielle Input und Output stellen
Input Stellen können von außen befüllt werden
Output Stellen können von außen geleert werden
Initial Marking ist leer
a
t
b c
d e
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
34
1. Referenzarchitektur
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
35
Query – View – Transformation
Zentraler Teil der Model Driven Architecture (MDA) Initiative
„man will auch mal mit den schönen Modellen rechnen“
Konsistenzanalysen
Refactorings, …
Modell A in Modell B umbauen
Ausführung / Code Generierung
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
36
elementare Konsistenzanalysen:
Stellen und Transitionen eindeutig benannt
jede Transition hat mind. eine In und eine Out Stelle
jede Stelle hat mindestens eine Transition
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
37
inhaltliche Konsistenzanalysen:
jede Input Stelle trägt zu mind. einer Output stelle bei
jede Output Stelle wird von mind. einer Input Stelle versorgt
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
38
Konsistenzanalysen (2cd)
Inkonsistenzen fallen meist bei Ausführung / Code-Generierung auf
Einfache Strategie:
Fehler-Management-Objekt einführen
pro Fehler: fehler Markierungsobjekt erzeugen fehlerhafte Stelle markieren an Fehler-Management-Objekt anhängen Fehlerliste anzeigen vor jeder neuen Analyse / Ausführung / Code-Generierung alte
Fehler löschen
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
39
Refactorings: merge Transitions
fasse zwei Transitionen zu einer zusammen
name der ersten
Java Code von beiden hintereinander
In Stellen von beiden
Out Stellen von beiden
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
40
Refactorings: merge Places
fasse zwei Stellen zu einer zusammen
Name der ersten
Transitionen von beiden
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
41
Refactorings: split Place
ersetze Stelle durch zwei Stellen mit Transition dazwischen
die Transition liest und schreibt auf beiden neuen Stellen
Java Code kopiert alle Token vor und zurück
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
42
1. Referenzarchitektur
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
43
Interpreter
1. Stufe:
Metamodell um Ausführungsinformation erweitern: Interpreter Objekt Token mit Zeigern auf Dokumente
Interpreter: bei Stellen als Listener für Tokenänderungen subscriben bei Tokenchange, benachbarte Transitionen in Todo-Queue Transitionen aus Todo-Queue feuern, d.h. Java Code ausführen
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
44
Action Language
Action Language Bean-Shell www.beanshell.org
import bsh.Interpreter;
Interpreter i = new Interpreter(); // Construct an interpreter
i.set("foo", 5); // Set variables i.set("date", new Date() );
Date date = (Date)i.get("date"); // retrieve a value from a variable
// Eval a statement and get the result i.eval("bar = foo*10"); System.out.println( i.get("bar") );
// Source an external script file i.source("somefile.bsh");
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
45
Ampel Beispiel:
red_yellow
ry
green
yellow
yggy
yr
red
Token t = red.getFirstFromTokens();if (t != null) {
// firered.removeFromTokens (t);t.getDocument.setYellow(true);red_yellow.addToTokens (t);
}
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
46
class Ampel
Ampel
red : Booleanyellow : Booleangreen : Boolean
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
47
1. Referenzarchitektur
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
48
Code Generierung
Mehrere Alternativen:
Visitor der das Metamodell durchläuft und Strings in eine Datei schreibt. hoher Aufwand Indentieren und so ist doof Pretty Printer nehmen nicht sehr Wartungsfreundlich
Template basierte Code Generierung hat sich durchgesetzt
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
49
Template basierte Code Generierung
class $owner.name { public void initPetriNet () {
#foreach ( $place in $net.places)
Place $place = new Place ();$place.setName ("$place");
#end
#foreach ( $trans in $net.transitions)
Transition $trans = new Transition ();
#foreach ( $src in $trans.preplaces )
$trans.addToPreplaces ($src);
#end. . .
#end} }
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
50
Empfohlene Template Engine
google for Velocity
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
51
Zusammenfassung
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)