Mittwoch, 23. Mai 2012


Artikel

April 2010 | Artikel

Auf der Suche nach dem Heiligen Gral der Softwareentwicklung

(Link zum Artikel: http://www.entwickler.de/jaxenter//003011)

Ein Gespräch mit Eike Stepper über die Vorzüge modellgetriebener Verfahren

  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Probleme lassen sich direkt im Code einer General-Purpose-3GL-Sprache wie Java lösen - oder auf einer abstrakteren Ebene über Modelle beschreiben, aus denen dann automatisiert Code generiert wird. Dieses letztgenannte Prinzip der modellgetriebenen Softwareentwicklung (MDSD) findet besonders in Europa immer mehr Anhänger, skeptischer reagiert man hingegen in den USA auf den MDSD-Ansatz. Begeben sich MDSD-Anhänger nicht letztlich auf die Suche nach einem unerreichbaren "Heiligen Gral der Softwareentwicklung", wenn sie anstreben, komplett lauffähige Anwendungen in nur wenigen Knopfdrücken zu generieren?

In der mitunter hitzig geführten Debatte über Sinn und Unsinn von Codegenerierung sind Argumente der MDSD-Gegner meist schnell zur Hand: Zu schwierig sei der Einstieg in MDSD, schwer wartbar der generierte Code. MDSD beschneide zudem die Kreativität und führe zu einem Kontrollverlust über sein Projekt. Eike Stepper, Leiter des Eclipse-Modeling-Projekts CDO Model Repository und Moderator des Eclipse Modeling Day auf der JAX 2010, nimmt Stellung zu diesen Vorwürfen und erklärt, warum er ausdrücklich keine Domäne sieht, in der Modeling-Technologien nicht von Nutzen wären.

JAXenter: Hallo Eike! Modeling wird von einigen beinahe als „Heilger Gral“ der Softwareentwicklung angesehen, da es ihrer Meinung nach den Entwicklungsprozess entscheidend vereinfacht – andere können gar nichts mit MDSD anfangen. Woran liegt es, dass hier so ein Glaubenskrieg herrscht?

Eike Stepper: Ich denke, das hängt mit den spezifischen Erwartungen zusammen und, falls ein Proof of Concept gewagt wurde, ob diese Erwartungen erfüllt wurden oder nicht. Wenn beispielsweise der Fokus auf der Konservierung von Geschäftswissen auf hohem semantischem Niveau liegt, dann führt wohl kaum ein Weg an Modeling vorbei. Wenn die modellierten Konzepte dann noch für mehrere Plattformen implementiert werden müssen, sehe ich wenig Alternativen zur Code-Generierung.

Man darf nicht verleugnen, dass die Einführung von Modellierung und Generierung einen enormen Einfluss auf alte und lieb gewonnene Entwicklungsprozesse haben kann. Ohne externe Unterstützung oder eigene Erfahrungen darin sind die Erfolgschancen tatsächlich fragwürdig. Und schließlich ist die Wahl der Tools auch nicht zu unterschätzen. In diesem Bereich ist durchaus noch Potenzial bei den Eclipse-Modeling-Technologien vorhanden, und wir haben kürzlich begonnen, diesen Bedarf in formalen Gremien mit der Industrie zu besprechen. Ich bin sicher, dass daraus sehr interessante Produkte erwachsen und die Overall Experience von Eclipse Modeling auf ein neues Niveau gehoben werden kann.

Was übrigens bei der "Heiligen-Gral-Debatte“ oft übersehen wird, ist die Tatsache, dass Modeling nicht nur eine mögliche Disziplin des Entwicklungsprozesses ist, sondern dass Modeling-Technologien zunehmend auch integrale Bestandteile von Laufzeitsystemen werden. Beim CDO Model Repository, dessen Lead ich seit 6 Jahren bin, ist der Einsatz als Runtime Library traditionell sogar der Hauptanwendungsbereich. Meiner Erfahrung nach wird die Diskussion in diesem Bereich nicht ganz so hitzig geführt, da die technologischen Vorteile leichter argumentierbar sind.

JAXenter: Was sind für dich die größten Vorteile Modell-getriebener Verfahren? Und wo macht es keinen Sinn, Modelle einzusetzen?

Eike Stepper: Ich sehe den Hauptvorteil von Modeling darin, dass das Geschäftswissen einer bestimmten Domäne auf einem sehr hohen Niveau und dadurch für eine längere Zeit konserviert werden kann, als dies mit Low-Level-Technologien wie Java oder EJB getan werden könnte. Das Wissen ist somit von mehr Menschen und anderen Technologien konsumierbar.

Je nachdem, wie geschickt man sich bei der Einführung von Modellierung und Generierung anstellt, kann man außerdem mit Kosteneinsparungen rechnen. Es ist interessant bei den erfolgreichen Benutzern zu beobachten, wie zu Beginn die Kosten ansteigen. Dies verwundert nicht, da teilweise intensiv in Wissensaufbau investiert werden muss. Wenn dieses Wissen dann aber sinnvoll eingesetzt wird, bleibt am Ende schlicht und einfach dramatisch weniger Code übrig, der dann ja für eine lange Zukunft gewartet werden muss.

Ferner gibt es bestimmte Anforderungen, die den Einsatz von Modeling-Technologien sogar fast unabdingbar machen. Ein mir bekanntes Beispiel ist die Notwendigkeit, mit enorm großen Datenmengen umzugehen. Wenn man sein Domänenmodell, egal ob es zur Entwicklungszeit oder Laufzeit benutzt wird, mit EMF umsetzt, dann kann man mit wenigen Mausklicks beliebige Skalierbarkeit dazugenerieren oder die Daten-Backends ohne Impact auf den Code austauschen.

Ich kenne kein Gebiet, in dem es ausdrücklich nicht sinnvoll wäre, Modelle einzusetzen. Probleme lassen sich einfach besser mit Modellen als mit Code beschreiben. Und zur Lösung dieser Probleme kann man dann oft wenigstens teilweise Generierung einsetzen. Das ist MDSD.

JAXenter: In unserem Quickvote auf JAXenter sagen über 30 %, dass der MDSD-Ansatz gescheitert ist, da der spätere Aufwand mit generiertem Code zu groß sei. Für weitere 5% ist die Lernkurve für MDSD zu steil. Alles Vorurteile oder ist da etwas Wahres dran?

Eike Stepper: Normalerweise kaufe ich das Lernkurvenargument nicht. Sollte man jemandem trauen, der eine steile Lernkurve, also das Erreichen von viel Wissen in kurzer Zeit, für etwas Schlechtes hält? Nein ernsthaft, ich frage jedes Mal zurück, wenn ich diesen Einwand höre: "Was ganz konkret und genau ist es denn, das euch Steine in den Weg gelegt hat?" Wenn wir dies wüssten, dann könnten wir ja vermutlich etwas dagegen unternehmen. Ob Du es glaubst oder nicht, ich habe kein einziges Mal eine nützliche Antwort darauf bekommen. Ich glaube, man muss sich auch einfach mal von der verlockenden Vorstellung verabschieden, dass die Lösungen für komplexe Probleme in jedem Falle simpel sind. Ich kenne sehr viele Modeling User, welche alle diese Hürden innerhalb einiger weniger Tage genommen haben. Wenn lediglich 5% dies nicht schaffen, bin ich damit sogar ganz zufrieden. Dies dürfte ungefähr gleich dem Anteil an der Gesamtentwicklerschaft sein, der generall keine anspruchsvollen Probleme lösen kann.

In vielen Fällen hat sich der Anspruch, möglichst 100% der Zielanwendung zu generieren, als nachteilig herausgestellt. Obwohl dies manchmal gelingen mag, ist es meistens besser, einen pragmatischeren Ansatz zu wählen und nur die Teile eines Systems zu modellieren, die dafür besonders geeignet sind. Die Datenstrukturen einer Geschäftsdomäne gehören auf jeden Fall dazu.

Was den späteren Aufwand mit dem generierten Code betrifft, würde ich gerne genauer wissen, worin sich dieser Aufwand manifestiert. Meiner ausnahmslosen Erfahrung mit Kunden nach, tritt bei angemessener Anwendung von MDSD genau der gegenteilige Effekt ein. Generierter Code verursacht ja eigentlich gar keine Aufwände. Lediglich die Integration handgeschriebener Geschäftslogik kann einen gewissen Overhead verursachen. Dieser wird jedoch meistens durch die Einsparung auf der Lines-Of-Code-Achse mehr als wettgemacht.

JAXenter: Welche Rolle spielt die Eclipse-Plattform im Bereich Modeling?

Eike Stepper: Abgesehen davon, dass Eclipse Modeling die Referenzimplementierungen für einige der OMG-Spezifikationen beherbergt, gibt es wohl nirgends sonst eine solche Fülle an Zusatztechnologien mit einem so hohen Interoperabilitätsgrad. Wenn man sich erst einmal an EMF als Integrationstechnologie gewöhnt hat, bleibt zukünftig kaum ein Zusatzwunsch unerfüllt. Und die Eclipse Foundation und ihr Open-Source-Prozess garantieren ein Maximum an Transparenz und Offenheit. In Umkehrung der Frage erklärt dies wohl auch, warum Modeling einer der wichtigsten Bereiche innerhalb von Eclipse ist und ständig an Bedeutung gewinnt.

In diesem Zusammenhang ist noch erwähnenswert, dass der Großteil der Eclipse-Modeling-Technologien, welche auch zur Laufzeit in Endprodukten Einsatz finden, auch außerhalb der Eclipse-Plattform und ohne OSGi lauffähig sind.

JAXenter: Du moderierst zusammen mit Sven Efftinge den Eclipse Modeling Day. Kannst du kurz beschreiben, was die Besucher erwartet?

Eike Stepper: Wir haben versucht, den Fokus zu etwa gleichen Teilen einerseits auf einige der Haupttechnologien von Eclipse Modeling (EMF, CDO, Xtext, Data Binding und Query) und andererseits auf Erfahrungsberichte aus spannenden Anwendungsprojekten (z.B. Banking, Homeland Security) aufzuteilen. Abgerundet wird das ganze mit einem kontroversen Talk über die Ups und Downs der Code-Generierung, sowie einer längeren Abschlussdiskussion zum Thema Modeling vs. Solving Problems. Mit diesen insgesamt neun Slots sollte für jeden etwas Spannendes dabei sein.

JAXenter: Wie geht es deiner Einschätzung nach weiter mit der Software-Modellierung? Welche Projekte werden in Angriff genommen? Welche Probleme gilt es zu bewältigen?

Eike Stepper: Natürlich hat jeder der existierenden Building Blocks bei Eclipse Modeling seine eigenen kleineren oder größeren Potenziale. Aber ich denke, eine der größten Herausforderungen des Modeling-Projekts als Ganzem ist die erhebliche Verbesserung einer konsistenten Tool-Erfahrung. Wie ich eingangs erwähnte, ist es diesbezüglich bereits gelungen, ein Forum für die Anforderungen der Industrie und die Technologieanbieter bei Eclipse aufzusetzen. Ich bin sehr gespannt, ob wir es nun endlich bald schaffen, eine übergreifende Werkzeugplattform für Modeling bereitzustellen, die in Punkto Funktionsumfang, Komfort, Skalier- und Erweiterbarkeit den Vergleich mit dem Flaggschiff JDT nicht mehr zu scheuen braucht.

JAXenter: Vielen Dank für dieses Gespräch!

Eike Stepper ist der ursprüngliche Autor von CDO und Net4j und leitet das inzwischen neunköpfige, internationale Committer-Team. Mit seiner 1991 gegründeten Firma ES-Computersysteme konnte er in vielen Projekten Erfahrungen als Entwickler und Berater sammeln. Themen um Modeling, OSGi-Softwaredesign und "gutes Entwickeln" faszinieren ihn immer wieder.

Die Eclipse Days der JAX 2010:
  1. Blog von Eike Stepper

andere Artikel dieser Serie

Kommentare

Gravatar Trepper 15.04.2010
um 10:23 Uhr
MDSD ist das Symptom einer Krankheit, die besonders im Java-Umfeld verbreitet ist. Statt Probleme an der Wurzel zu packen, werden immer neue Abstraktionen erfunden und darauf Abstraktionen von Abstraktionen aufgesetzt. Siehe auch: http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12

MDSD ist nun ein weiterer Versuch, vermeintlicher Vereinfachung, aber letztlich führt man nur zusätzliche Komplexität ein. Besser wäre es, gleich eine mächtigere Sprache wie Scala zu nehmen und sich damit Domain Specific Languages zu schreiben, statt irgendwelche komplett neuen Sprachen zu erfinden und daraus mit zusätzlichen Werkzeugen Java zu erzeugen.
#zitieren
Gravatar Eike Stepper 15.04.2010
um 11:57 Uhr
Hallo Trepper,

meiner bescheidenen Meinung nach ist die Fähigkeit des Menschen zu abstrahieren absolut positiv zu bewerten. Ohne sie wäre gar keine hochentwickelte Technik entstanden und wir alle hätten keine so interessanten Jobs.

Wenn Du Scala-Programme schreibst, dann verwendest Du sicher auch Abstraktionen über Abstraktionen. Daher will ich mal annehmen, dass Dein Argument eher auf den Technologiebruch zwischen Modellen und Code abziehlt. Grundsätzlich hättest Du damit recht, aber auch diese Diskussion bleibt recht kleinkrämerisch solange man mit exzellentem Tooling den grundsätzlichen Bruch handlebar machen kann. In diesem Zusammenhang warte ich zum Beispiel mit Spannung auf konsumierbare Releases von EMF Refactor.

Ich möchte noch einmal betonen, dass ich den Hauptvorteil der Modellierung nicht in der möglicherweise folgenden Generierung von Code sehe (der Schritt könnte auch durch Interpretation zur Laufzeit ersetzt werden). Es geht vor allem um die Wissenkonservierung auf hohem semantischen Niveau. Ich persönlich (und die Mehrzahl meiner Kunden) möchte dies nicht mit Implementierungstechnologien wie Scala machen.
#zitieren
Gravatar Sascha 15.04.2010
um 16:09 Uhr
Naja, ich denke, MDSD war eigentlich mal der Versuch, Techniker und Nicht-Techniker (=> Fachanwender) besser zusammenzubringen, um über verständliche und lesbare Modelle dann hinterher die fertige Software erzeugen zu lassen.

Der aktuelle Stand des Ganzen ist aber der, das der Einzige, der diese Modelle versteht, immer noch der Techniker ist. Insofern ist es erstmal eine weitere Abstraktionsschicht, die (vielleicht) Wissen konserviert, aber keinen wirklichen sonstigen Mehrwert gegenüber einer klaren Architektur mit parallel fortgeschriebener Dokumentation bringt.

Ich wage zu behaupten, das MDSD da aufgrund der Komplexität der entsprechenden Generatoren keinen Geschwindigkeitsvorteil bringt und sogar die Einstiegshürde für neue Entwickler in einem Projekt im Vergleich zu Plain-Old-Java-Projekten höher legt.

Was aber nicht heisst, das der Techniker in mir solche Tools und Ansätze nicht spannend findet. :-)
#zitieren
Gravatar Eike Stepper 15.04.2010
um 19:25 Uhr
Hi Sascha,

ich gebe Dir recht, die ursprünglichen Erwartungen insbesondere an die MDA waren vermutlich übertrieben und haben nicht unbedingt viel gemein mit den heutigen, pragmatischeren Ansätzen. Das Ziel sollte nicht sein, partout keinen Code mehr von Hand zu schreiben, sondern Modelle genau dort einzusetzen wo man sich in einem bestimmten Projekt am meisten davon verspricht.

Ich habe MDSD z.B. in einigen Banking Software Projekten eingeführt, in denen riesige Stammdatenmengen in unendlichen Formularen bewirtschaftet werden mussten, die letztlich alle sehr ähnlichen Code hatten. Oft beginnen die Domänenexperten früher oder später, selber die Modelle für Daten und UIs zu verstehen und anzupassen. Aber nicht immer, und das ist auch nicht immer nötig. Der Unterschied zwischen einer Handskizze und einem Modell ist immer geringer, als der zu irgendeinem Low-lovel Code.

Ich kenne übrigens auch nicht wenige Fälle, in denen das Business seine Requirements direkt mit einer General Purpose Modellierungssprache wie UML erstellt. Aber das kann man sicher nicht immer erwarten.
#zitieren
Gravatar Trepper 16.04.2010
um 10:19 Uhr
Aber eine gute DSL, z. B. in Scala, kann den Umweg über eine Modellierungssprache sparen und ist direkt ausführbar bzw. kann vorher durch den ganz normalen Compiler geprüft werden. Ich sehe auch kein Problem damit, wissen dauerhaft in so einer Darstellung zu speichern, denn wenn die DSL gut ist, ist es genauso lesbar wie eine Modellierungssprache. Modellierungssprachen sind einfach überflüssig. #zitieren
Gravatar Eike Stepper 16.04.2010
um 11:44 Uhr
Hallo Trepper,

das kann ich mir auch gut vorstellen. Ich hoffe, dass ich bald endlich mal Zeit finde, mich mit Scala und nicht-EMF DSLs zu beschäftigen.
#zitieren
Gravatar RPR 18.04.2010
um 00:17 Uhr
Schon allein beim Gedanken an MDA und Co bekomme ich einen dicken Hals - schlechte Erfahrungen von früher mit "ganz praxisnahen Architekten" (die nur noch TogetherJ benutzen wollten)...

Aber nach etwas Nachdenken:
Modellierung macht doch schon seit vielen Jahren in einigen Gebieten Sinn. Z.B. bei Datenbank-Modellen. Da möchte ich niemals auf ein ERD-Diagramm des Projekts verzichten und ein Tool, das daraus auf Knopfdruck DDL generiert.
(Die Alternativen - nämlich zum einen DDL von Hand zu schreiben und zum anderen die DDL aus den Pojos generieren zu lassen, sind IMHO einfach nur unbeholfen und zeigen nur, dass man wenig Ahnung hat - evtl. noch immer geistig bei EJB 1 hängt.)
ERDs helfen ungemein, den Überblick zu behalten und neue Features "anständig" in Daten zu giessen oder zu refactorn.

Es ist also keine grundsätzliche Ablehnung von (grafischer) Modellierung bei Entwicklern (wie mir) zu verzeichnen, sondern eine spezifische, welche mit der Art und Weise zu tun hat, wie modellgetriebene Entwicklung bislang versucht wurde:
1. Die Abhängigkeit von bestimmten proprietären Tools um überhaupt arbeiten zu können. Oder gar, um Diagramme lesen und bearbeiten zu können. Absolutes No-Go!
2. Die Benutzung von UML als Modellierungssprache (mir tut jeder leid, der damit etwas "zeigen" soll - ein geschriebener Absatz in 5 Minuten versus ein riesiges Diagramm in 5 Stunden)
3. Die Versteifung auf das "Malen von Diagrammen" (wie Trepper schon schreibt: DSLs tuns doch auch).

Wieterhin gibt es offenbar eine ziemlich schlechte Stimmung rund um MDA / MDSD - warum:
1. Die schlechten Erfahrungen von Anfang des Jahrzehnts (s.o. und ich sag nur "Alles ist ein BO")
2. Der Marketing-Gag, der suggeriert, dass die Fachabteilung das Codieren nun selbst übernehmen könnte (da bekommt jeder Techniker sofort den Hass pur - abgesehen davon, dass die Fachabteilung nach etwas Überlegen ihrerseits auch keinen Bock darauf hat, nun selbst stundenlang konsistente Diagramme auszufeilen, believe me).
3. Auch der Gag mit der "Anwendung auf Knopfdruck" oder "heute Java morgen .NET" ist destruktiv, weil jeder mit Ahnung weiss, dass es nicht funktionieren wird, wenns komplexer als ein "Hello-World" wird. Noch dazu setzte man früher Entwickler mit solchen "Revolutionen" unter Druck ("guck mal, deine Arbeit macht nun dieser Knopf hier") - kein Wunder also ...

Ich denke, MDSD würde (endlich mal etwas) mehr Erfolg haben wenn:
- Die "Sprachen" (früher Diagramme genannt) benutzbarer werden würden - evtl. durch DSLs.
- Die Sprachen aber auch standardisiert werden würden (ohne die lustigen proprietären Erweiterungen, die alles wieder kaputt machen).
- Das Tooling standardisiert werden würde.
- Man die Marketing-Gags aufgeben würde, dass MDX Entwickler-Know-How ersetzen kann. Da kommt so was wie mit der (automatischen) Doku komplexer Gesamtzusammenhänge doch schon viel besser.

So long!
#zitieren
Gravatar MoWe 19.04.2010
um 21:27 Uhr
Wie schon geschrieben wurde sollte dringend zwischen MDA (mit den einher gehenden Versprechungen) und Werkzeugen, die im MDSD-Umfeld entstanden sind, unterschieden werden. Wir arbeiten sehr erfolgreich mit EMF + XText. Die saubere Trennung von Interface und Implementierung, Containment-Logik, Notification, inverse Properties, Proxy-Resoultion, gute Modularisierungs-Mögichkeiten etc. ect. sind Dinge, die in unserem Falle ungemein hilfreich sind. Woanders ist das ganze vielleicht Ballast, in unserem Use-Case nicht.
Die "Nimm doch Scala"-Diskussion greift zu kurz. Auch hier ist -oh Wunder- der Use-Case entscheident. Wir haben beispielsweise über XText eine DSL definiert, für die es eine eigenen Interpreter gibt, dessen operationale Semantik eben nicht zu der von Scala passt. Ausserdem bietet das EMF-Umfeld Tools im IDE-Bereich, die Scala (noch) nicht hat. Es geht hier nicht darum, ob Scala generell eine "bessere" oder "schlechtere" Option ist.
Bei aller berechtigter Kritik an MDA, Pauschalaussagen ("Generatoren sind zu komplex") jenseits der Betrachtung konkreter Use-Cases sind -diplomatisch gesagt- naiv.
#zitieren