View
126
Download
1
Category
Preview:
Citation preview
Software Engineering 2 – Konstruktion interaktiver (CASE) Tools
WS 13 / 14
Vorlesung: Albert Zündorf, Software Engineering
Übungen: Andreas Scharf, Software Engineering
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 2
Administratives
Vorlesung: Montags 15-18 Uhr Raum 1340 (4 SWS)
Prüfung: Projektarbeit (wir basteln uns ein Objekt Diagramm 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)
The Object Diagram Model
WS 12/13 Software Engineering 2 Albert Zündorf, University of Kassel
12
The Object Diagram Model
WS 12/13 Software Engineering 2 Albert Zündorf, University of Kassel
13
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 14
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 15
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 16
… 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 17
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 18
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 19
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 20
GMF Übersicht
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 21
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 22
Tooling Definition
Toolbar
Menüs
…
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 23
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 24
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 25
Unparsing Summary
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 26
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 27
4. Commands
Operationen auf der logischen Objektstruktur (EMF Modell)
Konsistenzanalysen
Refactorings
komplexe Editor Kommandos
Code Generierung
Aktionen hinter Menüpunkten und Buttons
Viele Buttons/Menüpunkte für ein Kommando denkbar
Undo/Redo Einheiten
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 28
4. Commands
Aufgabe
Konsistenzanalysen: Name ist Java Identifier Genau ein Start jede Aktion von Start aus erreichbar
Refactorings: Start to Task Task to Start Split Task to Task – Flow – Task Split Fow to Flow – Task – Flow Join Task – Flow – Task to Task Join Flow – Task – Flow to Flow
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
29
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
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 32
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 33
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 34
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 35
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 36
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 37
Simulation / Interpreter
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 38
Simulation
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
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 41
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 42
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 43
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 44
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 45
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 46
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 47
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 48
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 49
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 50
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 51
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 52
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 53
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 54
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 55
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 56
class Ampel
Ampel
red : Booleanyellow : Booleangreen : Boolean
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 57
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 58
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 59
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 60
Empfohlene Template Engine
Open architecture ware xpand
Codegenerierung
Klasse für das Board
Init Methode baut Schaltung
View Methode baut Bedienfenster
Main Methode startet Applikation
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
61
switch1 switch2
light_a light_b
switch1
switch2
light1
light2
Codegenerierung
class Board1 { public void init () {
switch1 = new Switch();switch2 = new Switch();light_a = new Light();ligth_b = new Light();switch1.withSucc(light_a);switch2.withSucc(light_a)
.withSucc(light_b); this.withCont(switch1)
.withCont(switch2) .withCont(light_a) .withCont(light_b);
}
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
62
switch1 switch2
light_a light_b
switch1
switch2
light1
light2
Codegenerierung
class Board1 {…
public void view() {frame = new JFrame();jpane = frame.getRootPane();
jpane.setLayout(…);switch1Button = new Jbutton();switch1Button.addActionListener(
new ActionListener() {public void actionPerformed(){
switch1.receiveMessage(on);}
}jpane.add(switch1Button);
…
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
63
switch1 switch2
light_a light_b
switch1
switch2
light1
light2
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 64
Zusammenfassung
Repository
Meta Model
GUI(Commands)
Generators / Interpreters
QVT
Import/ Export
GUI(Unparsing)
SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel 65
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 66
Tool Demo Anforderungen
Graphischer Editor
Speichern und Laden
Undo / Redo
Interpreter
Code Generator
Sprachfeatures: BlockDecl BlockAppl Comp If / While Gen Rekursion?
Recommended