Modellgetriebene Softwareentwicklung (Model Driven Software Development - MDSD) SS 2014 Wahlpflichtfach (2 SWS) für Bachelor Andreas Schmidt Einführung/Organisation 1/19
Ziele der Vorlesung Vorstellung der prinzipiellen Funktionsweise von Softwaregeneratoren Teilnehmer sollen danach in der Lage sein... existierende Generatoren einzusetzen...eigene Generatoren für ihre Bedürfnisse selbst zu entwickeln Andreas Schmidt Einführung/Organisation 2/19
MDSD - Was ist das? Model Driven Software Development (MDSD) Teilweise oder vollständige Generierung von Software aus Modellen Modelle repräsentieren/beschreiben den Problemraum Modelle werden durch Transformationen in weitere Modelle oder Quellcode umgewandelt wie sehen Modelle aus? abstrakte und formale Beschreibung (ohne implementationsspezifische Details) einer Problemstellung (Domäne) Repräsentiert durch: - Text - XML - graphische Repräsentation Ziel: Generierung von 20% - 80% des Quellcodes einer Anwendung Andreas Schmidt Einführung/Organisation 3/19
prinzipielle Funktionsweise bei der MDSD Interpreter Modell Generator Quellcode Compiler Templates/ Transformationsregeln lauffähiges Programm Andreas Schmidt Einführung/Organisation 4/19
Vorteile der Generierung von Software Höhere Produktivität langweilige Teile der Anwendung können generiert werden Geringere Reaktionszeit bei Designänderungen oder Change Requirements Höhere Qualität Die Transformationsregeln bestimmen die Qualität des Quellcodes Meist bessere Architektur als bei von Hand entwickelten Anwendungen Architektur ebenfalls in den Abbildungsregeln definiert Automatische Transformationen (keine Flüchtigkeitsfehler) liegt ein Fehler in den Abbbildungsregeln so tritt dieser an allen Stellen auf an denen die Abbildungsregel eingesetzt wird Andreas Schmidt Einführung/Organisation 5/19
Vorteile der Generierung von Software Höhere Abstraktion Model stellt eine abstrakte Beschreibung der Anwendung dar Bessere Integration von Fachexperten Einfacher Übergang zu neuer Technologie (Ändern der Transformationsregeln) Wiederverwendung von eimal erstellten Transformationsregeln (software factories) Einfacherer Umgang mit der Komplexität (Reduktion aufs wesentliche) Trennung von fachlichen und technischen Aspekten Konsistenz der Anwendung Code der aufgrund von Transformationsregeln generiert wurde ist in sich sehr konsistent (in Bezug auf Aufrufkonventionen, Benamung, Parameterübergabe) und damit einfach zu verstehen / zu benutzen Querschnittsfunktionalität wird an zentraler Stelle definiert (analog wie bei Aspektorientierter Programmierung) Andreas Schmidt Einführung/Organisation 6/19
... und was ist dann MDA? Initiative der OMG im Umfeld MDSD Schwerpunkt bei der MDA liegt auf der Standardisierung und Interoperabilität Verwendete Standards: Modelle basieren auf UML als Modellierungssprache (inkl. UML-Profile) PIM: Platform independent model PSM: platform specific model XMI (XML Metadata Interchange) stellt Austauschformat von Modellen dar MDA setzt auf mehrstufige Transformationen (PIM -> PSM ->Code) MDA versucht Transformationssprache zu standardisieren (QVT) sehr aufgeblasene Spezifikation momentan keine vollständige Implementierung verfügbar Andreas Schmidt Einführung/Organisation 7/19
... und so sieht es die OMG bei der MDA Transformation mittels Query View Transformation (QVT) PIM T 1 PSM T 2 Code plattformunabhängiger Code plattformabhängiger Code Quellcode (z.b. Java) Konzepte PIM: Konto, Überweisung, Kredit,... Konzepte PSM: Tabellen, Attribute, Primärschlüssel, Fremdschlüssel,... Andreas Schmidt Einführung/Organisation 8/19
Nachteile der MDSD Nachteile: Erlernen neuer Technologien notwendig erhöhter (einmaliger) Aufwand für Entwicklung/Bereitstellung der Infrastruktur für modellegtriebene Softwareentwicklung Entwicklung der Transformationsregeln, Templates zur Codegenerierung eventuell Entwicklung einer Domänensprache (DSL) für das konkrete Anwendungsfeld ( --> Softwarefamilie) Andreas Schmidt Einführung/Organisation 9/19
was kann alles generiert werden? Datenbankschemata Zugriffsschichten für Datenbanken Benutzerschnittstellen Teile der Applikationslogik Dokumentation Konfigurationen (z.b. im Zusammmenspiel mit Frameworks wie Struts, Spring, Hibernate,...) Tests (Unit-Tests, Constraint-Tests, Generierung von Mockobjekten, Lasttests,...) Wrapper Import/Export Module... Andreas Schmidt Einführung/Organisation 10/19
MDSD: Abstraktionsebene Maschinenesprache Assembler 3GL-Sprachen (C++/Java,...) MDSD / Domänenspezifische Sprachen (DSL) Abstraktion Konkretisierung Andreas Schmidt Einführung/Organisation 11/19
Beispiel zur Abstraktion (Inline Code Expander) <?php <?php <class: Film (title, year, director) > <class: Person (surname, first_name, day_of_birth) > $p1 = new Person('Waits', 'Tom', '9.9.1949'); $f1 = new Film('Short Cuts', 1989, 'Jim Jarmusch'); echo "a little test:\n--------------\n"; echo $p1->get_surname()." ". $p1->get_first_name()." ". $p1->get_date_of_birth()."\n"; echo $f1->get_title()." ". $f1->get_year()."\n";?> } } class Film { private $title; private $year; private $director; function construct($title,$year,$director) { $this->title = $title; $this->year = $year; $this->director = $director; function get_title() { return $this->title; } function get_year() { return $this->year; } function get_director() { return $this->director; } Andreas Schmidt Einführung/Organisation 12/19
Inhalt der Vorlesung Theorieteil Vorstellung von verschiedene Arten von Softwaregeneratoren Funktionsweise/Architektur von Generatoren, Template-Systemen Modelle/Metamodelle XMI als Beispiel für ein Austauschformat von Metamodellen Modelltransformationen Extraktion von Metainformationen aus bestehenden Anwendungen Praxisteil Entwicklung eines einfachen Generators (Input XML, Output: Quellcode) Beschäftigung mit existierenden Generatorwerkzeugen (Auswahl) inkl. kleinem Vortrag Andreas Schmidt Einführung/Organisation 13/19
Ablauf der Vorlesung Einführung in die theoretischen Konzepte (siehe vorherige Seite) Parallel dazu eine praktische Aufgabe: Entwicklung eines eigenen minimalen Generators mit folgender Funktionalität: Codegenerierung mittels Template Engine Transformation in internes Generatormodell weitere Transformationen/Verifikationen des Modells Transformation in eigenes Modell (XML-basiert) Einlesen einer XMI-Datei (z.b. aus Poseidon UML) Auswahl eines existierenden Generatorwerkzeugs und Realisierung einer kleinen Anwendung damit Vortrag/Präsentation darüber Andreas Schmidt Einführung/Organisation 14/19
Bewertung Note setzt sich aus entwickeltem Generator und Vortrag zusammen 4-5 Übungsaufgaben pro Übung 3-4 Punkte wenn einwandfrei erledigt (siehe Hinweise Homepage) alle Punkte: 1.0,..., 0 Punkte: 5.0 Präsentation/Vortrag gibt ebenfalls Note Gewichtung: 50/50 Andreas Schmidt Einführung/Organisation 15/19
Termine Vorschlag: ca. 6-7 Wochen à 4 Stunden/Woche 2 Stunden Theorie 2 Stunden Praxis (Rechnerraum) 1-... Termine für Abschlusspräsentationen konkrete Termine/Zeiten (Stand 22.3.2013 - Änderungen möglich): Vorlesung: Freitag, 1. Block M303 (8:00 Uhr - 9.30 Uhr) Übungen/Abnahmen: Freitag, 2. Block, M303 Vorträge/Vorstellung Projekt:... Andreas Schmidt Einführung/Organisation 16/19
Literatur Kurshomepage: http://www.smiffy.de/mdsd/ Markus Völter, Thomas Stahl: Modellgetriebene Softwareentwicklung. Techniken, Engineering, Management. Dpunkt.Verlag GmbH, März 2005 - kartoniert - 410 Seiten Jack Herrington: Code Generation in Action. Manning Verlag, 2003, 350 Seiten, ISBN: 1930110979 Andreas Schmidt Einführung/Organisation 17/19
weitere Ressourcen Krzysztof Czarnecki, Ulrich Eisenecker: Generative Programming: Methods, Tools, and Applications, Addison-Wesley Professional; 1. Auflage, 2000 Homepage Markus Völter: http://www.voelter.de/services/mdsd.html Guter Einführungsartikel zu modellgetriebener Softwareentwicklung: http://www.voelter.de/data/articles/mdsd.pdf http://www.omg.org/mda/ Andreas Schmidt Einführung/Organisation 18/19
Generator Modell UML modeling tool XSLT Metamodel Metamodel Rules T1 Rules Rules T3 Stylesheet Extensions XMI XSLT XML- File DOM processing with Meta API-calls Model 1 T2 Model 2 Code Generation (Smarty) Source Code PP Formatted Source Code Stylesheet DTD V1 subclasses Templates Rules Andreas Schmidt Einführung/Organisation 19/19