ESE Conference 2011, Zürich Generative Konzepte für den Plattform-Zoo - am Beispiel Mobile-Apps Rüdiger Schilling Delta Software Technology GmbH The Perfect Way to Better Software 1
Der mobile Plattform-Zoo Das MDD-Paradox Woher kommt der Generator? HyperSenses Ein Beispiel 'live' 2
Der mobile Plattform-Zoo 3
Der Mobility-Trend ist nicht mehr aufzuhalten COMPUTERWOCHE 9.3.11 2010 weltweit bereits 1,7 Milliarden Dollar Umsatz mit Apps für Smartphones und Tablets In den kommenden 5 Jahren werden Breite und Tiefe des App-Markts rasant zunehmen eine "neue Welle der Innovation" mit sich bringen durchschnittliche jährliche Wachstumsrate von 82% Forrester Research "Mobile App Internet Recasts the Software and Services Landscape" 2.3.2011 Es begann mit "Consumer Mobile Apps" Zukünftig werden "Business Mobile Apps" eine immer größere Rolle spielen 4
Die Hürde Derzeit 7 verschiedene Mobile-Plattformen/OS Verschiedene Architekturen Verschiedene Sprachen Java (Blackberry, Android) Objective C (ios) C# (Windows Phone) C++ (bada, WebOS) Fragmentierung (bes. Android) Releases, Formfaktor, Hardware In der Zukunft??? 5
Beispiel HT Applications Unternehmen Leeuwarden, NL Gegründet 2010 www.htapplications.nl "Specialist in the mobile software market" Beratung und Training Individuelle Apps für Unternehmen Produktlinien für Apps Apps speziell konfiguriert und erzeugt pro Kunde 6
Produktlinie für Apps Platform Config Cust. "A" Cust. "B" Cust. "N" Ein neues App wird entwickelt für Kunde "A" für 3 Plattformen implementiert und für den nächsten Kunden und weitere Plattformen Am Ende gibt es viele Varianten des einen Apps Die alle verwaltet und gewartet werden müssen Und dann soll es eine neue Version geben. 7
Variabilität in 2 Dimensionen Lösungsansätze N x M Kopien Irgendwann gibt es viel zu viele Kopien Scripts & Templates Schon mit einer Dimension sehr schwierig Modellgetrieben, mit DSLs und Generatoren Kaum, wenn es am Ende wieder zu Scripts und Templates führt OK, wenn die ganze Entwicklung konsequent modellgetrieben ist 8
Das MDD-Paradox 9
Einfache Lösungen für einfache Probleme? DSL Generator Für eine beschränkte, isolierte Aufgabe genügt es evtl. nur eine einfache DSL zu entwerfen und einen kleinen Generator dazu Für die nächste kleine Aufgabe... DSL Generator genügt es evtl. nur eine einfache Und noch eine, und noch eine etc. Am Ende gibt es eine Vielzahl von DSLs und Generatoren Überschneidend, widersprüchlich, unwartbar 10
Das MDD-Paradox Die Grundannahme "Modellgetriebene" Software-Entwicklung ist effizienter, liefert bessere Qualität und sichert die Wartbarkeit Modelle (welcher Art auch immer), Domain Specific Languages und Generatoren sollen dieses Konzept umsetzen Der Widerspruch Modelle, DSLs und Generatoren sind auch Software Sie werden aber selbst kaum modellgetrieben entwickelt! 11
Die Konsequenz Die Erkenntnis Die Entwicklung von MDD-Konzepten und Werkzeugen ist eine eigene Software-Domäne Eigenständige Modelle und Entwurfsprinzipien sind nötig Die Lösung Model Driven Meta Development = (MD)² Mit Meta-Modellen, Meta-DSLs und Meta-Generatoren (MD)² Model driven to the power of two 12
Forderungen DSL Generator Modellbasierte Entwicklung von DSLs und Generatoren DSL Generator Werkzeuge Ohne Spezialwissen nutzbar Das ganze Aufgabenspektrum abdeckend DSL Generator Modell Integriert mit offenen Schnittstellen Bandbreite Für einfache Aufgaben DSL Generator Für ganze komplexe Systeme (z.b. mit mehrdimensionalen Varianten) 13
Woher kommt der Generator? Konzept für ein (MD)²-System 14
Ein Generator? Anwendungs- Domäne Lösungsidee Vorlage Generator Anforderung? Software 15
Ein Generator? Anwendungs- Domäne Lösungsidee Vorlage Variantenmodell Domain Specific Language (DSL) Generator Zur Formulierung der Anforderung Anforderung Software 16
Ein Generator? Anwendungs- Domäne Lösungsidee Code-Beispiel Variantenmodell Code-Patterns Domain Specific Language (DSL) Generator Generator Generator Zur Formulierung der Anforderung Generate (z.b. Software) Anforderung Software 17
Ein Generator? Anwendungs- Domäne Lösungsidee Code-Beispiel Variantenmodell Code-Patterns Domain Specific Language (DSL) Generator Konfigurationen Generate (z.b. Software) Anforderungen 18
HyperSenses 19
HyperSenses Generator- und DSL-Entwicklungs-Suite Vollständig (meta)modellgetrieben Realisiert das (MD)²-Prinzips Eine Weiterentwicklung des mit ANGIE eingeführten Konzepts framebasierter Generatoren Erprobte Technologie Im Laufe der letzten zehn Jahre (weiter)entwickelt Basis für umfangreiche Generatorsysteme, die seit Jahren erfolgreich im Einsatz sind Teil mehrerer staatl. geförderter Forschungsprojekte Jetzt allgemein als Produkt verfügbar 20
Variantenmodell/Metamodell Anwendungs- Domäne Variantenmodell Domain Specific Language (DSL) Konfigurationen Anforderungen Lösungsidee Code-Beispiel Code-Patterns Generator Generate (z.b. Software) Modell der Variationspunkte Was unterscheidet die Mitglieder einer Systemfamilie? Invariante Eigenschaften sind für einen Generator nicht relevant Feature Model (Merkmalmodell) 21
Konfiguration Anwendungs- Domäne Variantenmodell Domain Specific Language (DSL) Konfigurationen Anforderungen Lösungsidee Code-Beispiel Code-Patterns Generator Generate (z.b. Software) Eine Konfiguration legt die Parameter für ein bestimmtes Produkt fest Produkt = 1 oder mehrere Generate Konfiguration = Instanz Metamodell Technisches Format: XML Einstellbar im Metamodell Tag- und Attributnamen etc. Austausch mit beliebigen anderen Werkzeugen 22
Domain Specific Language Anwendungs- Domäne Variantenmodell Domain Specific Language (DSL) Konfigurationen Anforderungen Lösungsidee Code-Beispiel Code-Patterns Generator Generate (z.b. Software) Variantenmodell (Metamodell) Grammatik implizit und vollständig DSL Konkrete Syntax automatisch ableitbar = Variantenmodell + allgemeine Syntaxregeln Text-DSL Interaktive Formular-DSL 23
Code-Pattern Anwendungs- Domäne Variantenmodell Domain Specific Language (DSL) Konfigurationen Anforderungen Lösungsidee Code-Beispiel Code-Patterns Generator Generate (z.b. Software) Wiederverwendbare, parametrisierte Code-Bausteine Basierend auf Frame/Slot-Konzept Alternative Frames mit gleichem Interface Blöcke und Slots werden graphisch dargestellt Vererben und überschreiben von Frames Pattern By Example (PBE) Schrittweise Ableitung von Code-Pattern aus Vorlagen und Prototypen Verknüpfung mit dem Metamodell Automatische Navigation in der Konfiguration 24
Pattern by Example (1) Das Code-Fragment wird importiert und mit einem Metamodell-Knoten verknüpft. Das ist der "Kontext" für das aktuelle Pattern. Variable Code-Stellen (Slots) werden markiert und mit einem Feature oder einer Berechnung verknüpft. Weitere "passende" Stellen werden automatisch hinzugefügt. 25
Pattern by Example(2) SubPattern: AsyncOperation SubPattern: SyncOperation Optionale Blöcke werden markiert und mit Bedingungen versehen. Substrukturen werden in Subpattern ausgelagert und durch einen Subpattern-Aufruf ersetzt. Dieser wird mit einem Composite Feature verknüpft. Das bildet den neuen Kontext für das Subpattern. Die Navigation wird automatisch aus dem Metamodell abgeleitet. 26
Generator Anwendungs- Domäne Variantenmodell Domain Specific Language (DSL) Konfigurationen Anforderungen Lösungsidee Code-Beispiel Code-Patterns Generator Generate (z.b. Software) Der Generator wird automatisch erzeugt aus Meta-Modell und Code-Pattern Montiert als "HyperSenses Executable zur Einbettung in: HyperSenses Configurator oder Eclipse oder Visual Studio oder... 27
Ein Beispiel 'Live' 28
Die Aufgabe Der App-Entwickler HT Applications möchte ein 'News' App zur Anbindung spezieller Feeds realisieren Das App soll für jeden Kunden individuell generiert werden Das App soll auf Wunsch auf mehreren Plattformen verfügbar sein 29
Die Schritte 1. Metamodell und Code-Pattern entwickeln/ableiten Metamodell und Pattern-Entwurf entstehen meistens gleichzeitig Code-Pattern für weitere Plattformen ableiten 2. DSLs konfigurieren Interaktive Formular-DSL und/oder Text-DSL 3. Code-Generatoren, DSL-Parser und Konfigurator automatisch erzeugen 4. DSLs und Generatoren anwenden 30
Das Metamodell Metamodell im HyperSenses MetaComposer Application Na me : St ring Description: String[0..1] Version: String Feedback: Email Developers: String DevelopersAdd: String[0..1] Feeds 0..* Das Metamodell für diese Aufgabe benötigt nur zwei Feature-Klassen Application + Feed mit jeweils (nur) den Merkmalen, die variabel sind Feed LanguageCode: String Address: URL Metamodell in UML 31
Live: Pattern By Example Von der Vorlage zum Code-Pattern 32
Live: Implizite Navigation Application Na me : St ring Description: String[0..1] Version: String Feedback: Email Developers: String DevelopersAdd: String[0..1] Feeds 0..* Feed LanguageCode: String Address: URL 33
Live: Code-Vererbung Eine zusätzliche Dimension der Variabilität Vererbung von Code Gezielte Überschreibung einzelner Teile Sichtbar! 34
Live: Konfiguration 35
Live: Generierter Code ios (Objective C) Windows Phone7 (C#) Android (Java) 36