software engineering 2 – konstruktion interaktiver (case) tools ws 10 / 11 vorlesung: albert...
TRANSCRIPT
Software Engineering 2 – Konstruktion interaktiver (CASE) Tools
WS 10 / 11
Vorlesung: Albert Zündorf, Software Engineering
Übungen: Nina Geiger, Software Engineering
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
2
Administratives
Vorlesung: Montags 15-18 Uhr Raum 1340 (4SWS)
Prüfung: Projektarbeit (wir basteln uns ein SmartIO Tool)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3
Überblick
1. Referenzarchitektur
2. Meta-Modell
3. Unparsing
4. Commands
5. Repository
6. Austauschformate
7. Checking
8. 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
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
6
2. Meta-modell
abstrakter Syntaxgraph (ASG)
logische Datenstruktur hinter der Darstellung am Bildschirm
speichert Editoreingaben
beschrieben durch Klassendiagramm
File Edit Tools X
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
7
2. Meta-modell
abstrakter Syntaxgraph (ASG)
logische Datenstruktur hinter der Darstellung am Bildschirm
speichert Editoreingaben
beschrieben durch Klassendiagramm
File Edit Tools X
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
8
2. Meta-modell
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
9
Meta Meta Meta
Time Levels
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
10
runtime
development time
tool development time
library development time
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
11
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
12
3. 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
13
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
14
… The GMF 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
15
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
16
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 GMF 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
17
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
18
GMF Übersicht
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
19
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
20
Tooling Definition
Toolbar
Menüs
…
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
21
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
Eugenia
GMF ist immer noch zu kompliziert
Eugenia: Annotation des Klassendiagramm Generierung der GMF Konfigurationen
Siehe Übung
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
22
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
23
Unparsing Summary
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
24
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
25
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
26
4. Commands
Normalerweise ein Objekt/eine Klasse pro Command
Aufwändige Protokolle für's Undo/Redo
API getrennt
Bei uns Undo/Redo per EMF?
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
27
4. Commands
Aufgabe
Klasse SmartIO Editor bauen
eclipse GMF plugin
erwartete Operationen / GUI Elemente: Load / Save Undo / Redo Create / Delete Component Create / Delete Channel replaceComponentByXY Insert LogComponent into Channel Add LogComponent to all components startDobs
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
28
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
29
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
30
3. Repository
Relationale Datenbanken
Objekte und Beziehungen werden als Tupel in Datenbanktabellen gespeichert
Zugriff per ODBC
Middleware (z.B. JPA)
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
31
3. Repository
Coobra2: 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
32
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
33
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
34
Simulation
store b
9 b
Sum1to10
gen
start
stop
i
store a
1 a
compute
xsum
sum = x + y
y
store sum
0 sumsum
b
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
35
Simulation
store b
9 b
Sum1to10
gen
start
stop
i
store a
1 a
compute
xsum
sum = x + y
y
store sum
0 sumsum
b
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
36
Simulation
store b
9 b
Sum1to10
gen
start
stop
i
store a
1 a
compute
xsum
sum = x + y
y
store sum
0 sumsum
b
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
37
Simulation
store b
9 b
Sum1to10
gen
start
stop
i
store a
1 a
compute
xsum
sum = x + y
y
store sum
0 sumsum
b
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
38
Simulation, Text parts:
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
39
Simulation
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
40
Simulation
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
41
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
42
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
43
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
44
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
45
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
46
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
47
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
48
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
49
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
50
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
51
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
52
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
53
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
54
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
55
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
56
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
57
class Ampel
Ampel
red : Booleanyellow : Booleangreen : Boolean
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
58
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
59
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
60
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
61
Empfohlene Template Engine
google for Velocity
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
62
Zusammenfassung
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
63
Diplomarbeiten am Fachgebiet
Johannes und Sys: Spieleprogrammierung Ruben:
Lego Mindstorms / Chumbee Ubiquitäre Systeme Fujaba – UML Lab Kopplung
Nina: GWT GUI Builder Web Apps
Jörn: Natural Text To Object / Android Apps Fujaba – UML Lab Kopplung
Andreas: Model Transformation in konkreter Syntax / Model Refactorings Fujaba – UML Lab Kopplung
Albert: Fujaba für verteilte Systeme Verifikation & Model Checking
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
64
Tool Demo Anforderungen
Graphischer Editor
Speichern und Laden
Undo / Redo
Interpreter
Code Generator
Sprachfeatures: BlockDecl BlockAppl Comp If / While Gen Rekursion?