19
irtschaftsinformatik Christian Mehring [email protected] 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

Wirtschaftsinformatik Christian Mehring [email protected] 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

Embed Size (px)

Citation preview

Page 1: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

Wirt

scha

ftsin

form

atik

Christian [email protected]

Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

Page 2: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

2

Gliederung

■ Einführung■ openArchitectureWare■ Entwicklungsprozess■ Beispielimplementierung

■ Modellierung■ Metamodell■ Modell■ Modellüberprüfung

■ Generator■ Code-Integration■ Fazit

Page 3: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

3

openArchitectureWare

■ Generatorframework zur Codeerzeugung aus Modellen■ Ganzheitliche Unterstützung des Erstellungsprozesses■ Ansatz: Metamodell + Templates■ Ziel: Erzeugung von technischem, redundantem Code

nicht 100% generieren, sondern die „langweiligen“ 50-70%■ Unterstützung durch Eclipse-Plugins■ Einsatzbeispiele

■ Webanwendungen■ Embedded Systeme■ Wissenschaftliche Anwendungen

Page 4: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

4

OAW: Funktionsweise

■ Modell einlesen und überprüfen■ Codeerzeugung

■ Modell wird an Generator übergeben■ Template verarbeitet Modellelemente und erstellt Code

Parser Metamodell-Instantiator

Metamodell-Instanz Code Generator

Eingabe-Modell

Metamodell-Klassen Templates Generierter

Code

openArchitectureWareQuelle: Stahl, Völter (2005)

Page 5: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

5

Entwicklungsprozess

Referenz-implementierung

(Meta-)Modellierung

Generator-entwicklung

ManuelleImplementierung

Domänenanalytiker Domänenarchitekt Anwendungs-entwickler

Page 6: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

6

Beispielimplementierung

■ Web-Anwendung zur Produktbestellung

■ 4-Schichten Architektur■ Möglichst wenig Code generieren,

vorhandene Funktionalität nutzen■ Java Enterprise Edition (JEE)■ Spring Framework, insb. Webflow

■ Was lässt sich generieren?■ EJB Modell: Datenhaltung, einfache

Geschäftslogik■ Spring Modell: Konfiguration,

Actionklassen■ Manuelle Implementierung: JSPs,

erweiterte G‘logik

Page 7: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

7

EJB Metamodell

Page 8: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

8

EJB Modell

■ Generiert werden hieraus:■ Entitybeans■ Sessionbeans mit

Datenmanipulations- und Lesemethoden für die referenzierten Entities

Page 9: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

9

Spring Konfiguration: Metamodell

View

Daten und Anbindung G‘logik

Zustandsautomat

Page 10: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

10

Unterstützung für die Metamodellierung: xText

Grammatik Metamodell:Entity :"entity" name=ID "{"(features+=Feature)+"}" ;

Abstract Feature:Attribute | Reference ;

Attribute :"attr" type=Datatype name=ID

";" ;

Reference :"ref" type=ID (multiple?"[]")? name=ID("<->" oppositeName=ID)? ";" ;

Grammatik-konformes Modell:entity Produkt {

attr string name;attr int preis;

}entity Bestellung {

attr string datum;attr int menge;ref Produkt ware;

}entity Kunde {

attr int kundennummer;attr string name;attr string kennwort;ref Bestellung[] bestellungen <-> Bestellung;

}

erzeugt: Metamodell in Ecore, Parser, Editor, Fehlerprüfung

Christian Mehring
Zeitabhängig, kann evtl. noch rausfliegen...
Page 11: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

11

Zugriff auf das Modell: Expressions-Language

■ Wie arbeiten Metamodell und Modell zusammen?Expressions-Language Elemente:// Zugriff auf ein Attribute.name bspw. „Kunde“

// Suche in Listenentities.select(e|e.features.size ==

0);

// Nur best. Typ selektierenfeatures.typeSelect(Attribute);

/* Eigene Expressions definieren */// Alle Referenzen des Entitiesreferences(Entity this) : features.typeSelect(Reference);

// Entityname für Javaklassennamen

javaClassname(Entity this) :name.toFirstUpper();

Page 12: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

12

Modellüberprüfung: Check-Language

■ Syntaxfehler werden durch Editor vermieden■ Überprüfungen auf semantische Beschränkungen:

■ Vom Modellierer festzulegen■ Verwendet Expressions-Language■ Vergleichbar mit der OCL, aber weniger detailliert

■ Generatorlauf nur bei fehlerfreier Prüfung■ Direkte Prüfung bei Verwendung des xText-Editors■ Beispiel:

context Entity ERROR "Entities müssen eindeutig benannt sein: " + name : // silbings() gibt eine Liste mit den Geschwistern des Entities zurück silbings().select(e|e.name == name).size == 1;

Page 13: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

13

Ergebnis der Modellierung

■ Analyse der Domäne■ Warum Ecore in diesem Fall?

■ Einfachere API für den Zugriff■ Probleme mit XMI-Datenformat für UML2

■ Textbasierte Metamodellierung mit xText■ Erzeugt Ecore Metamodell■ Integriert Modellüberprüfungen■ Eclipse-Editor zur Erstellung der Modelle

■ Eclipse-GMF als Erweiterung für grafische Modellierung■ Das Modell ausbeuten!

Page 14: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

14

Generator: Templatesprache Xpand

■ Wie kann das Modell in Code überführt werden?

«IMPORT metamodel»«EXTENSION myJavaExtensions»«DEFINE javaClassImpl FOR Entity»«FILE name + ".java"»

/** Implementierung für Entity «name» */public class «name» {«FOREACH features AS this»

private «type» «name»;«ENDFOREACH»}

«ENDFILE»«ENDDEFINE»

«FILE javaFilename(this) » /** Implementierung für Entity «name» */

public class «javaClassname(this)» {«FOREACH features AS this»

private «type» «name»; «ENDFOREACH»

}«ENDFILE» /** Implementierung für Entity

Produkt */public class Produkt { private String name; private int preis; }

Datei Produkt.java

Christian Mehring
evtl. kann man hier noch die Folie mit der Projekttemplatestruktur bringen.
Page 15: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

15

Generator: Eigenschaften und Anforderungen

■ Überlagern von Templates:

■ Erweiterungsmöglichkeiten■ Expressions-Language■ Java-Extensions■ Einbinden vorgefertigter Generatoren: Cartridges

■ Erzeuge gut lesbaren Code:■ Code-Beautifier zur Formatierung■ Kommentare!■ Modell und Template im Quelltext vermerken

«DEFINE javaClassImpl FOR Entity» «EXPAND implFeature FOREACH features»«ENDDEFINE»«DEFINE implFeature FOR Attribute» // generierter Code für das Attribut«ENDDEFINE»«DEFINE implFeature FOR Reference» // generierter Code für die Referenz«ENDDEFINE»

Page 16: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

16

Beispielimplementierung: Generatorstruktur

Page 17: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

17

Code-Integration

■ Verknüpfung von automatischem und manuellem Code notwendig

■ „Never touch generated code!“■ Mögliche Ansätze

■ Problematisch: Geschützte Bereiche in generierten Dateien■ Besser: Integration über Möglichkeiten der OOP

■ Recipes: Komponente zur Überprüfung der Integrationsrichtlinien in Eclipse

■ Versionierung■ Metamodell und Modell■ Templates und Generator-Konfiguration■ Manuell erstellte Komponenten

Page 18: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

18

Fazit

■ „A fool with a tool is still a fool!“ M. Völter

■ Komplex, hoher Einarbeitungsaufwand■ Technisches Projektsetup: Eclipse-Plugin-Hölle■ Zusammenspiel der Komponenten

■ Flexibel einsetzbar■ Beliebige Metamodellierungen■ Erweiterbarkeit■ Auch für Spezialgebiete geeignet

■ Einsatz nur sinnvoll, wenn mehrfache Verwendung möglich■ Alternativen prüfen

OAW ist bei passenden Projektvoraussetzungen empfehlenswert.

generator

Page 19: Wirtschaftsinformatik Christian Mehring c.mehring@uni-muenster.de 29.05.2007 Im Rahmen des Seminars „Ausgewählte Themen des Softwareengineering“

19

Vielen Dank!

■ Fragen, Diskussion