Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober...

30
Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003

Transcript of Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober...

Page 1: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Generative Softwareentwicklung in der Praxis

Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003

Page 2: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 2

Überblick

• Generator Werkzeug („GVizard“)• Problemstellung

• Ergebnis „Kibs-Live“

• Lösungsweg

• „GVizard“-Live

• Model Driven Architecture (MDA )• Konzepte

• MDA-Werkzeuge• Funktionsweise von „AndroMDA“

• MDA-Live (Beispiel-Anwendung)

Page 3: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 3

Problemstellung

• „KIBS“-Anwendung

• Web-Anwendung• JSP/Servlet • Struts, Tomcat, TopLink, MS-Access/Oracle

• Verwaltung von Bauteilen in Kernkraftwerken

• Problem

• Dialoge für n-„Einbauteile“• Dialoge haben gleiches Verhalten und ähnliche Datenstrukturen.

• Anlegen, Suchen, Bearbeiten, Hilfeseite, Druckseite, Excel-Export)

Page 4: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 4

Ergebnis

Ein Blick auf KIBS!

Page 5: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 5

Lösungsweg: Analyse

• Erstellen von verschiedenen Datei-Typen• Java, JSP, HTML, XML

• Einsatz von Datei-Schablonen(Templates)

• Platzhalter in DateiHallo Herr ${empfänger}…

• Templates müssen Logik enthaltenHallo {if empfänger.geschlecht==mänlich:}Herr{?}Frau…

Page 6: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 6

Lösungsweg: Template-Engine

• „Jakarta“ OpenSource Template-Engine „Velocity“

• Javabasiertes Framework für die Erzeugung jegliche Art von Textdateien

• Einsatz in verschiedenen anderen OpenSource-Projekten• Web-Architekturen

• UML-Werzeuge

• Datenbank-Mapping

• Einfache Handhabung1. Erstellen des Templates

2. Anreichern mit dynamischen Daten

3. Generieren der Ausgabedatei

Page 7: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 7

Velocity Template-Syntax

Platzhalter

${variablenname}

Schleifen

#foreach( $row in $variablenname)

${row}

#end

Bedingungen

#if( $variablenname==true)

mach was

#end

Page 8: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 8

Velocity Beispiel

<HTML> <BODY> Hello $user! <table> #foreach( $skill in $customer.skills() )

#if ( $skill.hasJava() ) <tr>

<td> $skill.getLevel()

</td> </tr>

#end #end </table></BODY></HTML>

Page 9: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 9

Velocity-Context

// InitialisiernVelocity.init();

// Context aufbauen und füllenVelocityContext context = new VelocityContext();context.put( “user", new String(“Olaf Kaus") );context.put( “customer", new Customer() );

// Template einlesenTemplate template = null;template = Velocity.getTemplate(“skilltemplate.vm");

// Template und Context zusammenführenStringWriter sw = new StringWriter();template.merge( context, sw );

Page 10: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 10

Problem: Verbindung von eigenen und generierten Texten

• Erzeugte Datei kann nur als Ausgangsdokument verwendet werden.

• Bei jedem neuen Generieren wird das Textdokument vollständig ersetzt.

• Lösungen:• Include-Mechanismen

• OO-Techniken / Design-Patterns

• Geschützte Bereiche („Protected Regions“)

Page 11: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 11

Lösung: Include-Mechanismen

• JSP…<jsp:include page="../includes/genfooter.jsp" />…

• XML<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE generic SYSTEM ".\generic-generator.dtd" [<!ENTITY EditBOAction SYSTEM "GenBOAction.xml">

]>

<generic version="0.2"> &EditBOAction;</generic>

Page 12: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 12

Lösung: OO-Techniken / Design-Patterns

Quelle: ProgrammGeneration von M. Völter

Page 13: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 13

Lösung: Protected Regions

private Customer customer = new Customer();

public boolean isValid(){

// PROTECTED REGION ID(12..3ValidateData) START

// Implementierung der geschützten isValid-Methode

// PROTECTED REGION END

}

// PROTECTED REGION ID(12..3EigeneMethoden) START

// --> Raum für eigene Methoden <--

public void setWert(String wert){

}

// PROTECTED REGION END

Page 14: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 14

• Entwicklung eines GUI

• Deklarative Beschreibung der Oberfläche

• Eingabemöglichkeiten• Textfelder

• Auswahllisten (ComboBox)

• Selektionen (CheckBox)

• Tabelleneingabe

Eingabe der dynamischen Daten

Page 15: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 15

Beispiel-Deklaration

<textfield name="mytext" label="Textfeld:" value="Vorbelegter Text"/>

<filebox name="myfile" label="Dateiname:" basepath="c:\" value=""/>

<checkbox name="mycheckbox" label="CheckBox" value="false"/>

<combobox name="mycomboTest" label="ComboBox:">

<entry value="Eintrag 1"/>

<entry value="Eintrag 2" selection="true"/>

</combobox>

<!-- Tabellen-Definition -->

<table name="mytable" label="Table-Test" visiblerows="5">

<column label="Dateiname" typ="FileBox" value="C:\"/>

<column label="Name" typ="TextField" value="Eintrag"/>

<column label="Datentypen" typ="ComboBox">

<entry value="Zeile 1"/>

<entry value="Zeile 2"/>

</column>

<column label="Selektiert" typ="CheckBox" value="true"/>

</table>

Page 16: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 16

„GVizard“

Das alles zusammen ergibt:

GVizard!

Page 17: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 17

MDA (Model Driven Architecture)

• MDA ist ein relativ neuer Standard der „Object Management Group“ (OMG)

• OMG Gründung in 1989

• Offenes Konsortium aus ca. 800 Firmen

• OMG erstellt herstellerneutrale Spezifikationen zur Verbesserung der Interoperabilität und Protabilität von Softwaresystemen. Bekannte Ergebnisse sind:

• CORBA, IDL

• UML, XMI, MOF

• MDA, das neue „Flagschiff“

Page 18: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 18

Ziele von MDA

• Entwicklungsgeschwindigkeit erhöhen: Automation durch Formalisierung(Vergleich zu Produktionsstrassen im Automobilbau)

• Softwarequalität

• Wiederverwendbarkeit

• Wartbarkeit durch Trennung von Verantwortlichkeiten(Separation of Concerns)

• Handhabbarkeit von Technologiewandel

Page 19: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 19

Ansatz von MDA

Fachliche Spezifikation

.NET-Model XML-ModelJ2EE-Model

.NET-Code XML-CodeJ2EE-Code

PIMPlatform Independent Model via UML-Profil

PSMPlatform Specific Models via UML-Profil

Implementierung

Regelbasierte Transformationen (Templates) sind i.d.R. Toolgestützt

Page 20: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 20

PIM – PSM - Code

public interface Account extends EJBObject{.. public interface AccountHome extends EJBHome{.. public abstract class AccountBean implements EntityBean{.. public class AccountKey implements java.io.Serializable{..

Quelle: b+m Informatik AG

Page 21: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 21

MDA Begriffe (1)

• Modell• Repräsentation von Struktur, Funktion oder Verhalten eines Systems

• MDA-Modelle sind formal

• Modelliert mittels UML

• Plattform• Abstraktionsgrad ist nicht festgelegt

• Linux, Windows, .NET, J2EE, Swing, JSP, EJB, XML, …

• Anwendungsarchitektur

• Plattformen können aufeinander aufbauen

Page 22: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 22

MDA Begriffe (2)

• PIM, PSM• PIM = Abstrahiert von technologischen Details.

Konzepte (Klassen, Abläufe, etc.) der Anwendungsdomäne werden beschrieben

• PSM = Modell (im MDA-Sinne), das die Konzepte (z.B. Schnittstellen) einer Plattform verwendet, um ein System zu beschreiben.Programmiersprache, Betriebssystem, Middleware, Applikationsserver, Datenbank, usw.

• Konzepte sind stabiler als Technologien• Formale Modelle besitzen Potential für automatisiere Transformation

• UML-Profile• UML ist der Rahmen einer Sprachfamilie• Erweiterungsmechanismen:

• Stereotypen• Tagged Values• Modellierungsregeln (Constrains)

Page 23: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 23

MDA Entwicklungsprozess

Architekt

1: Templatesentwerfen

Fachdesigner

2: Modellieren

Entwickler

3: Modellattributieren

UML

Generator

4: Codeerzeugen

Template

XM I

5: Business-logik einfügen

Code

Build-Skript

6: Übersetzenund verpacken

7: Deployenund testen

Komponenten, DB-Skripten, etc.

Quelle: AndroMDA, M. Bohlen

Page 24: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 24

MDA Werkzeuge

• Kommerzielle• ArcStyler (Interactive Objects)

• OptimalJ (Compuware) (Middelgen Studie)

• …

• OpenSource• AndroMDA

• b+m Generator

• …

• Unterschiede• Eingabeformat (XMI), ohne/mit PSM, Template-Sprache (JPyton, Velocity)

Page 25: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 25

AndroMDA

• Codegenerierungsframwork nach MDA

• Einsatz von diversen OpenSource-Frameworks• MDR (XMI-Modelle einlesen mit NetBeans Metadata Repository)

• Velocity als Template-Engine

• Ant als Build/Deploy-Tool

• Steckbare Cartridges unterstützen konkrete Technologien• Java = allgemein benötigte Objekte

• EJB

• Hibernate = O/R-Mapping

• Struts = MVC Web-Framework

• weitere in Arbeit

Page 26: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 26

AndroMDA Cartridges

• Cartridge-Meta-Informationen

• XML-Beschreibung• Realisierte Aspekte

• Stereotypen

• Ausgabekanäle für generierten Code

• Namenskonventionen für generierte Dateien

<cartridge name="struts"> <property name="work"value="struts" />

<stereotype name="WebAction" /> <stereotype name="WebAppConfig" /> <stereotype name="WebForm" /> <stereotype name="WebPage" />

<outlet name="forms" /> <outlet name="actions" /> <outlet name="pages" /> <outlet name="config" />

<template stereotype="WebForm" sheet="templates/StrutsForm.vsl" outputPattern="{0}/{1}.java" outlet="forms" overWrite="true" />

<template …

Page 27: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 27

AndroMDA Entwicklungsablauf

Page 28: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 28

Zusammenfassung

• Es wird nichts generiert, was nicht vorher in Form einer Referenzimplementierung verifiziert wurde. (Qualität/Lesbarkeit, Performance)

• Ersatz von „Copy-And-Paste“-Programmierung

• 60% bis 80% des Sourcecodes kann generiert werden

• Leistungsteigerung um ca. 30%

• UML-Modell (Dokumentation) bleibt bis zum Schluss des Projektes konsistent.

• ZIEL: „Executable UML“

Page 29: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 29

ENDE

Fragen

Page 30: Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.

Olaf Kaus, OOT, 6.Oktober 2003 30

LINKS

• GVizard ab 13.10.2003: www.oo-modeller.de

• ProgrammGeneration: www.voelter.de

• AndroMDA: www.andromda.org

• b+m Generator: www.architectureware.de

• MDA Werkzeuge: www.omg.org/mda/committed-products.html

• Middlegen Study: www.middleware-company.com

• Object Management Group: www.omg.org

• Velocity: jakarta.apache.org/velocity