Modellgetriebene Softwareentwicklung in verteilten Teams 31. Januar 2013
Überblick Wie kann ein einfacher Prozess zur modellgetriebene Entwicklung in verteilten Teams aussehen? Auf welche Weisen kann man Modelle verteilen? Wie kann man an verteilten Modellen arbeiten? Was ist bei der Codegenerierung zu beachten? Taentzer Modellgetriebene Softwareentwicklung 398
Große Modelle Wie werden große Systeme modellgetrieben entwickelt? Große Systeme sollten in Komponenten aufgeteilt werden. Komponenten haben Schnittstellen. Komponenten sollten von verschiedenen Entwicklern bearbeitbar sein. Entwicklung kann verteilt stattfinden. Sichten- versus komponentenorientierte Teilung des Systems: sichtenorientiert: entlang Systemaspekten, z.b. Datenmanagement, Geschäftslogik, Oberfläche komponentenorientiert: entlang der Anwendungsfälle, z.b. Vorlesungsverzeichnis, Raumplanung, Personalverwaltung Taentzer Modellgetriebene Softwareentwicklung 399
Verteiltes Modellieren Verteiltes Modellieren: Repository-basierte Ansätze: Alle Modellelemente sind für alle sichtbar. echt verteilte Modelle: Modellintegration findet durch Proxy- Elemente statt. Andere Modelle haben nur Referenzen auf Schnittstellen. Nicht alle Modellelemente müssen sichtbar sein. Codegenerierung: Komponenten werden in einem großen Modell beschrieben. Codegenerierung aus einem großen Modell Generierung von verteilten Komponenten aus verteilten Modellen Taentzer Modellgetriebene Softwareentwicklung 400
Verteilung von Modellen Modellkomponenten mit impliziten Schnittstellen (z.b. EMF-Modelle) Body: Modellkomponenten mit gem. Schnittstellen Body: ; Interface: Modellkomponenten mit expliziten Schnittstellen Body: ; Export: ; Import: Inklusion: Partielle Relation: Taentzer Modellgetriebene Softwareentwicklung 401
Zwei Modellierungsebenen Komponentenebene Objektebene Taentzer Modellgetriebene Softwareentwicklung 402
Beispiel: Sichtenorientierte Verteilung eines Modells Metamodell einer DSL für einfache Web-Anwendungen Ein Anwendungsmodell für einen Poetry Slam Taentzer Modellgetriebene Softwareentwicklung 403
Beispiel: Verteilung eines Metamodells Aufteilung in Metamodelle für Daten- und Hypertextmodellierung Taentzer Modellgetriebene Softwareentwicklung 404
Beispiel: Verteilung eines Anwendungsmodells Aufteilung eines Anwendungsmodells für Poetry Slams in ein Datenmodell und ein Hypertextmodell Taentzer Modellgetriebene Softwareentwicklung 405
Beispiel: Zusammengesetzte Modellkomponenten Department Project Komponententypen Taentzer Modellgetriebene Softwareentwicklung 406
Zusammengesetzte Modellkomponenten Komponenten auf Typ- und Instanzebene Auf Typebene: Elementtypen mit verschiedenen Namen dürfen aufeinander abgebildet werden. Import-Export-Beziehungen innerhalb eines Komponententyps sind erlaubt. Bzgl. Vererbung sind simplere Strukturen in den Schnittstellen (im Vergleich zu ihren Rümpfen) erlaubt. In EMF-Modellen sind Container in den Schnittstellen optional. Auf Instanzebene: Import-Export-Beziehungen innerhalb einer Komponenteninstanz sind nicht erlaubt. In Beziehung stehende importierte und exportierte Elemente dürfen unterschiedliche Typen haben. Taentzer Modellgetriebene Softwareentwicklung 407
Beispiel: Zusammengesetzte Modellkomponenten Instanzebene Taentzer Modellgetriebene Softwareentwicklung 408
Ein einfacher Prozess für verteiltes Modellieren Taentzer Modellgetriebene Softwareentwicklung 409
Verteiltes Editieren von Modellen Synchrones und asynchrones Editieren verschiedener Modellkomponenten ist erlaubt. Verteiltes Editieren als regelbasierte Inplace- Modelltransformation. Konsistenz: Verteiltes Editieren kann zu Inkonsistenzen führen. Beispiele: Löschen eines benutzten Elements aus einem Export, Hinzufügen eines Elements in einem Import ohne Referenz auf ein exportiertes Element Inkonsistenzmanagement: Strikte Vermeidung von Inkonsistenzen Zeitweises Zulassen von Inkonsistenzen Taentzer Modellgetriebene Softwareentwicklung 410
Beispiel: Synchrones Editieren Hinzufügen einer neuen Entität und ihrer Darstellung Taentzer Modellgetriebene Softwareentwicklung 411
Beispiel: Editierregeln Synchrone Editierregel: Hinzufügen einer neuen Entität mit Darstellung Asynchrone Editierregel: Löschen einer Entität Taentzer Modellgetriebene Softwareentwicklung 412
Beispiel: Mischen von Modellen Taentzer Modellgetriebene Softwareentwicklung 413
Beispiel: Ein Szenario für verteiltes Modellieren Taentzer Modellgetriebene Softwareentwicklung 414
Beispielszenario 1. Samatha verteilt ein globales Modell in zwei Modelle 1. Frank modelliert die Domäne. 2. Mike modelliert die Hypertextstruktur. 2. Frank und Mike editieren unabhängig voneinander. 3. Frank führt einen kritischen Schritt aus. (D2 -> D3) 1. Frank bekommt eine Warnung und sollte mit Mike kommunizieren. 2. Mike kann auf die Inkonsistenz reagieren. 3. Wenn keiner von beiden reagiert, bleibt die Inkonsistenz bestehen. 4. Mike editiert sein Modell, sodass die Inkonsistenz aufgehoben wird. 5. Samantha mischt beide Modelle, um eine globale Codegenerierung durchzuführen. Taentzer Modellgetriebene Softwareentwicklung 415
Zusammenfassung Große Modelle werden handhabbarer, wenn man sie in Teilmodelle zerlegt. Implizite versus explizite Schnittstellen Hauptaktivitäten verteilter Modellierungsprozesse: Verteilen, synchrones und asynchrones Editieren und Mischen von Modellen Verteiltes Modellieren kann zu Inkonsistenzen führen. Zeitweise Inkonsistenzen versus strikte Konsistenz von Modellkomponenten Literatur: D.Strüber, G. Taentzer, S. Jurack, T. Schäfer: Towards a Distributed Modeling Process Based on Composite Models, in FASE 2013, LNCS 7793, Springer, 2013 Taentzer Modellgetriebene Softwareentwicklung 416