Softwareentwicklung und Kundenanalyse ohne Datenschutzrisiko
Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober...
-
Upload
aurel-allgeyer -
Category
Documents
-
view
104 -
download
0
Transcript of Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober...
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)
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)
Olaf Kaus, OOT, 6.Oktober 2003 4
Ergebnis
Ein Blick auf KIBS!
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…
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
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
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>
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 );
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“)
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>
Olaf Kaus, OOT, 6.Oktober 2003 12
Lösung: OO-Techniken / Design-Patterns
Quelle: ProgrammGeneration von M. Völter
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
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
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>
Olaf Kaus, OOT, 6.Oktober 2003 16
„GVizard“
Das alles zusammen ergibt:
GVizard!
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“
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
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
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
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
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)
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
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)
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
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 …
Olaf Kaus, OOT, 6.Oktober 2003 27
AndroMDA Entwicklungsablauf
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“
Olaf Kaus, OOT, 6.Oktober 2003 29
ENDE
Fragen
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