Archiv

Autor Archiv

Eclipse Summit Europe 2010

Eclipse Summit Europe 2010

Vom 2.-4. November findet wieder die Eclipse Summit Europe in Ludwigsburg statt. Ich bin jetzt zweimal dort gewesen und war beide Male begeistert von der Möglichkeit, mit den Eclipse-Entwicklern und PMC Mitgliedern zu diskutieren, aber auch konkrete Probleme meiner Firma anzusprechen.

Der “Call for Papers” ist noch nicht rausgegangen und daher ist auch noch Zeit, die eigenen Ideen dort zu präsentieren.
Jetzt heißt es, die Mittel für die Konferenzteilnahme einzuwerben. :-)

Categories: Conferences, Eclipse Tags: ,

Jährliches Meeting der GI Fachgruppe Softwarearchitketur

Am 15.+16. July 2010 trifft sich in München die Fachgruppe Softwarearchitektur der Gesellchaft für Informatik. Das ganze ist in diesem Jahr verpackt in eine kleine Konferenz mit dem Titel Software Architectures for the Cloud.

Ich erinnere mich noch deutlich an das Jahr 2004 und das Gründungstreffen des GI-Arbeitskreises Software Architektur.  Komischerweise ging es damals in Oldenburg eigentlich nur darum, ein Buch zu schreiben. Es wirkte irgendwie wie abgesprochen und etliche Teilnehmer waren doch etwas überrascht. Das ganze kam mir darüber hinaus sehr akademisch vor und ich habe mich die letzten 6 Jahre deshalb aus den GI Aktivitäten herausgehalten.

Die Agenda für dieses Jahr sieht aber eigentlich recht spannend aus. Ich denke, daß ich in diesem Jahr den Kontakt ‘mal wieder aufnehmen werde, zumal ich Florian Matthes auch persönlich ganz gut kenne.

REST: ein Architekturstil und kein weiteres Protokoll

Ich war schon immer ein Freund davon, nicht alles selbst zu erfinden, sondern den Austausch mit anderen zu suchen und Best Practices anzunehmen. Um so mehr war ich erfreut, in der IT-Szene München eine Vortragsankündigung der JBoss User Group München zum Thema “Java API for RestFul Web Services und RESTEasy” zu finden. REST wurde bei uns schon länger als mögliche Schnittstelle für neue Clients diskutiert, ohne daß ich eine Ahnung gehabt hätte wie sich dieses “Protokoll” von den bisher verwendeten WebServices unterscheidet.

Die wichtigste Erkenntnis vorneweg: REST ist kein weiteres Protokoll, um Clients anzubinden sondern ein eigener Architekturstil, der zu einem anderen Anwendungsentwurf führt. Die Referenten Stefan Tilkov und Serge Pagop präsentierten zunächst einmal die Konzepte von Rest, um dann anhand der Implementation von JBoss RESTEasy konkrete Implementierungsbeispiele zu geben. Der konzeptionelle Überblick war prägnant und unterhaltsam und hat mich überzeugt, diesen Architekturstil mindestens prototypisch einzusetzen. Die Beispielsession hätte meiner Meinung nach noch konkreter mit Edit-Compile-Run Zyklen durchgeführt werden sollen.

Bei einem WebService Modell werden die Objekte und ihre Zugriffsmethoden über WSDL/SOAP einem entfernten Klienten zur Verfügung gestellt. Es existieren Tools, um auf Basis der WSDL-Beschreibung clientseitige Stubs zu generieren und dann in der präferierten Programmiersprache auf die Ojekte im Server zuzugreifen. Es wird also das auf dem Server vorhandene Objektmodell mit den angebotenen spezifischen Operationen lokal im Client zugreifbar gemacht.

Ganz anders bei REST. REST wurde von Roy Fielding in seiner Doktorarbeit definiert. REST kann man im wesentlichen durch die folgenden 5 Merkmale beschreiben:

  1. Jedes “Ding” bzw. jede Ressource hat eine ID
  2. Die Resourcen werden über Links verknüpft.
    Der Server stellt dem Klienten die Verknüpfungen zwischen verschiedenen Ressourcen als Links zur Verfügung. Auch Statusübergänge werden als Link repräsentiert.
  3. Es gibt standardisierte Methoden für alle Ressourcen
    • Get
    • Put
    • Post
    • Delete (und einige wenige andere)
  4. Jede Ressource kann verschiedene Repräsentationen haben
    Es ist also möglich für verschieden Arten von Klienten unterschiedliche Repräsentationen nach außen zu geben: beispielsweise eine PDF-Repräsentation zum Drucken einer Rechnung und eine XML-Repräsentation zum Weiterleten der Teileliste an den Empfänger. Die benötigte Repräsentation wird zwischen Sender und Empfänger ausgehandelt. Selbst verschieden Versionen einer Ressource-Repräsentation können über diesen Mechanismus nach außen gegeben werden.
  5. statuslose Kommunikation
    Eine Grundannahme ist, daß der Server keine Information über den Status des Klienten hält. Der Status eines Serverobjektes kann bzw. muß jederzeit wieder abgerufen werden können. Was der Klient jedoch damit macht, ob er eine URI bereits gelesen hat, ist Sache des Klienten und nicht des Servers. Es  gibt somit einen Ressourcenstatus, der im Server gespeichert wird, und einen Klientenstatus, den der Klient selbst speicher muß. Durch dieses Design kann der Server wesentlich besser skalieren.

Durch dieses einfache Modell,das in der HTTP Spezifikation festgelegt ist, können einheitliche und jedem bekannte Mechanismen für den Zugriff genutzt werden.Außerdem sind auch Fehlermeldungen mit einer festen Bedeutung vordefiniert und es ist möglich, für HTTP vorgesehene Cache- und Load-Balancing Mechanismen auch für den Zugriff auf den eigenen Backend-Server einzusetzen. Nicht zuletzt erlaubt es REST, den KLienten in jeder beliebigen Programmiersprache zu erstellen, für die eine HTTP-Client Bibliothek zur Verfügung steht.

Die REST Schnittstellen werden über Annotationen an bestehende Java Beans hinzugefügt.Die Annotationen beschreiben im wesentlichen den Pfad (die URI) einer Ressource und wie die öffentlichen Methoden mit auf Methoden der Objekte im Server und auf die Parameter dieser Methoden abbgebildet werden. Es bietet sich an, die Annotationen nicht in dem POJO selbst hinzuzufügen, sondern eine Ressourcenfassade einzuführen.

Stefan Tilkov präsentierte noch einen Ausflug zum Thema “asynchronous response handling“um aufzuzeigen, wie man in REST länger laufende Operationen oder Transaktionen modelliert. Auch hier hilft der HTTP Standard weiter: es gibt eine spezifische Antwort “202 accepted” die in einem solchen Fall zurückgegeben werden sollte. Sie zeigt an, daß die Bearbetung nicht abgeschlossen ist.Eine vom Klienten angegebene “Return URL” könnte vom Server aufgerufen werden, um sein Ergebnis zu posten.

Die Entscheidung für REST ändert definitiv die Architektur von Klient und Server, da nicht einfach das vorhandene Objektmodell über ein weiteres Protokoll zur Verfügung gestellt wird.Die wesentlichen Vorteile von REST sind, daß der Server einfach über einen Browser getestet werden kann und daß es einfach aus dynamischen Sprachen wie Ruby, JavaScript oder Python  genutzt werden kann.

Links

  1. Fielding, Roy Thomas: Architectural Styles and the Design of Network-based Software Architectures. Doctoral dissertation, University of California, Irvine, 2000
  2. Tilkov, Stefan:A Brief Introduction to REST . Online publication, Dec 10, 2007
  3. RESTEasy, Online publication
  4. Jersey, Online publication
  5. Best practices for Web services versioning, Online publication
    Kyle Brown, Michael Ellis, IBM January 30, 2004
  6. The REST Statelessness Constraint, Online Publication, Sat, 2009-Jun-13

Best practices for Web services versioning

Architekten mauern keine Wände und Softwarearchitekten programmieren nicht

Können Sie Sich vorstellen, daß Sie einen Architekten beauftragen, ein schickes Einfamilienhaus für Sie zu bauen um dann feststellen zu müssen, daß er auch das Fundament gießt und die Wände mauert? Natürlich nicht. Er wird Ihnen Entwürfe des Hauses vorstellen und den von Ihnen gewählten Entwurf dann durch einen Bauunternehmer umsetzen lassen. Eventuell übernimmt er noch die Bauleitung, er wird aber keinesfalls selbst Hand anlegen.

Warum also sollte ein Softwarearchitekt programmieren?

Auf den ersten Blick ist die Forderung, daß ein Softwarearchitekt programmieren soll unsinnig. Er ist doch eine Autorität seines Faches, weiß wie Systeme in Komponenten zerlegt werden und kann das wunderbar in UML beschreiben. Er wird also einen Entwurf erstellen, diesen in Form einer Powerpoint-Präsentation dem Management vorstellen, mit Hilfe eines passenden MDA-Tools den Code generieren und fertig ist das gewünschte System.

Die Praxis sieht in der Regel anders aus:

  • Das Deployment muß aufgrund von Performanz-Anforderungen so geändert werden, daß eine Komponente mal auf dem einen und mal auf dem anderen Knotentyp installiert wird.
  • Das Protokoll zur Kommunikation zwischen zwei Knoten erzeugt zu viel Kontrolldaten und muß optimiert werden. Hierfür setzt man am besten eine bestehende Komponente aus einem Open Source Projekt ein, da man Inter-Prozeß-Kommunikation nicht wirklich als seine Business Domain ansieht.
  • Im Feldversuch stellt sich heraus, daß ein Teil der Software nicht auf die parallele Nutzung vorbereitet ist und deshalb leider nicht reproduzierbare Ergebnisse liefert.

Hätte man diese Aspekte der Software in einem Entwurf festhalten können oder wird man sie nach der Änderung der Software in Entwurfsdiagramm einfügen? In der Regel nicht und das ist für mich eine wesentliche Eigenschaft von Software: die endgültige Architektur findet sich nur in der Software selbst wieder. Software ist im Gegensatz zu einem Gebäude so leicht veränderbar, daß der Entwurf sich während der Programmierung wiederholt ändert.

Der Softwarearchitekt muß daher Programmcode lesen können, mit der Entwicklungsumgebung umgehen können und in der Lage sein, die dynamischen Aspekte des entwickelten Systems auf der Basis von Logfiles, Coredumps und Heapdumps zu verstehen.

Das Verhältnis zwischen Architekten und Entwicklern

Neben der Anforderung an den Architekten, das laufende System zu verstehen um es modellieren zu können, benötigt er seine Programmierkentnisse auch, um seine Rolle im Team wahrnehmen zu können.

  1. Der Architekt sollte als Mentor für andere Entwickler arbeiten
  2. Der Architekt sollte verstehen, welche von anderen vorgeschlagene Komponenten zur Architektur des Gesamtsystems passen
  3. Der Architekt sollte Code anderer beurteilen können

Es ist klar, daß der Architekt nicht zu hundert Prozent mit Programmieraufgaben verplant sein darf. Er muß diese aber zumindest übernehmen können. Er muß in der Lage sein, mit anderen als “Pair” an einem neuen Thema arbeiten können. Er muß Fehlermeldungen der Kunden auf den aktuellen Code beziehen und gemeinsam mit anderen Lösungsansätze erarbeiten können. Vielleicht beschränkt sich seine Programmiertätigkeit im Projekt auf die Erstellung von Prototypen; wichtig ist aber, daß er Programmieren kann und von allen Teammitgliedern auch in dieser Rolle als Autorität wahrgenommen wird. Nur dann werden die Entwickler bei schwierigen Fragestellungen, und vor allem wenn sie vom ursprünglichen Entwurf abweichen wollen, das Gespräch mit dem Softwarearchitekten suchen. Diese Kommunikation ist die unabdingbare Voraussetzung dafür, daß eine Software nicht wuchert und entartet, sondern auch nach mehreren Versionen ein Entwurf noch erkennbar und im Team bekannt ist und die Software somit auch wartbar bleibt.

Links

Es ist nicht so, daß ich der erste bin, der über nicht programmierende Architekten nachdenkt. Das Thema ist alt und wird wieder und wieder diskutiert. Ich habe das Thema aufgrund eines aktuellen Erlebnisses aus meiner täglichen Arbeit aufgegriffen. Einige Artikel zu dem Thema sind zu finden unter:

Categories: Entwicklungsprozeß Tags: ,

Technische Innovationen vs. kundenorientierte Entwicklung

Bisher habe ich Gunter Dueck nur von seiner regelmäßigen Kolumne im Informatikspektrum gekannt. In dieser Woche auf der OOP habe ich ihn zum ersten ‘mal live erlebt und man kann wirklich nur von einem Erlebnis reden. Sein Thema waren Infrastrukturen (The Smarter Planet) mit der für mich wesentlichen Aussage, daß Infrastruktur nicht um der Technik willen gebaut werden sollte. Er brachte ein schönes Beispiel, das ich nur sinngemäß zitieren kann:

Vor ca. 10 Jahren hat er sich mit den ersten digitalen Kameras beschäftigt. Diese waren schwer, hatten eine schlechte Auflösung und es war schwer, die Kamera mit einem Computer zu verbinden. Das war aber die einzige Möglichkeit, sich die Bilder anzusehen. Seine Frau hielt digitale Kameras daher auch für komplett überflüssig. Eines Tages kam seine Frau aus der Filiale einer Drogeriekette nach Hause und berichtete, daß man dort neuerdings digitale Bilder direkt von einer Diskette oder CD auf Papier drucken könne und sie nun auch gerne eine digitale Kamera hätte.

Zu diesem Zeitpunkt, der sicherlich 6 Jahre später kam, war also für den Kunden die richtige Infrastruktur verfügbar, um die Technik für sich nutzbringend einzusetzen. Es wird generell so sein, daß der Entwicklungsstand der Technik der tatsächlichen Nutzbarkeit durch den Anwender einige Innovationszyklen voraus ist. Was ist aber die Nachricht, die man daraus ablesen soll:

  • soll man nur noch an Technik arbeiten, die der Kunde dann direkt einsetzen kann?
  • nimmt man in Kauf, daß die Entwicklung der Nutzung voraus ist und daher der “Return of Invest” auf sich warten läßt?

Ich habe nach dem Vortrag natürlich sofort über die Entwicklung von OpenScape, das Produkt an dem ich arbeite, nachdenken müssen und mir kamen etliche Fragen in den Kopf. Sollen wir nur das umsetzen, was Kunden explizit als Anforderung formuliert haben? Können solchermaßen formulierte Anforderungen noch innovativ sein oder orientieren wir uns dann nur noch an dem was der Wettbewerb schon kann? Ist das Finden der Balance zwischen den Anforderungen der Kunden und der technologischen Innovation eine Aufgabe des Architekten?

Fangen wir mit der letzten Frage an, denn sie ist nur rhetorischer Natur. Von einem Softwarearchitekten werden mehr Fähigkeiten erwartet, als nur ein guter Entwickler zu sein. Dieses Thema hat Frank Buschmann auf der OOP in seinem Vortrag Was ein Software-Architekt wissen sollte ausgiebig ausgeleuchtet.

Wer außer dem Architekten kann denn beurteilen, ob eine Technologie notwendigerweise eingesetzt werden sollte oder vielmehr eine “Spielerei” ist, deren Einsatz für den Business Case nicht relevant ist. Die Schwierigkeit ist wie immer, die richtige Balance zu finden. Ob die Anforderung vom Produktmanagement, dem Endkunden, einem Servicetechniker oder einem der Entwickler definiert wurde, die wichtigste Grundlage die Anforderung umzusetzen ist der Kundennutzen. Andere Einflußfaktoren bei der Entscheidungsfindung sind

  • Einsparmöglichkeiten
  • das Ablösen von benutzten technischen Komponenten
  • Innovationen

Bei der Beurteilung dieser Faktoren ist nicht nur das Produktmanagement sondern auch der Architekt gefragt: die Einführung einer neuen Installationsroutine ist nur dann sinnvoll, wenn der Servicetechniker die Installation oder ein Update in kürzerer Zeit durchführen oder mit weniger Fehlern durchführen kann. In diesem Fall kann man den Nutzen für die Firma wieder in Geld bemessen. Der Architekt hat die Verantwortung auszuschließen, daß hier eine Baustelle geöffnet wird, nur weil es ein neues Tool zur Programmierung eines Installers oder einen weiteren Packaging Mechanismus für Linux Distributionen gibt.

Der Architekt muß sich mit den aktuellen und relevanten Technologien auskennen und jederzeit überprüfen, ob die von ihm mitentwickelte Lösung nicht inzwischen durch eine Standardimplementation, ein OpenSource Projekt oder eine zugekaufte 3rd Party Komponente abgelöst werden kann. Das kostet Überwindung und und bedeutet notwendigerweise, daß der Architekt die notwendigen Soft-Skills benötigt, sein Team zu überzeugen, daß die eigene Implementation nicht mehr dem Stand der Kunst entspricht oder einfach nur deshalb abgelöst werden sollte, weil sich die Wartungskosten verringern.

Handelt es sich um ein besonders innovatives Thema, fällt es dem Architekten besonders schwer, den Kundennutzen zu bemessen. Wie soll er über etwas urteilen,was es so noch nicht gegeben hat? Der Bewegungssensor im iPhone, der vornehmlich ersteinmal dafür da ist automatisch den Bildschirm zu drehen, wenn man das Telefon in eine andere Position bringt, hat ein enormes Potential für neue Formen der Interaktion. Zuerst preschen natürlich die Spieleentwickler vor und nutzen einfach das gesamte Telefon zur Steuerung. Soll man dieses Konzept auf andere Anwendungsprogramme übertragen und ein Schütteln des Telefons nutzen, in einem Client den Serverzustand zu aktualisieren (Reload)? Ist das eine Spielerei, die ein verantwortungsvoller Architekt unterbinden sollte, oder ist es nur so möglich, alteingefahrene Wege zu verlassen und dem Kunden neue Erfahrungen zu vermitteln?

Orientiert sich die Entwicklung neuer Produkte nur an existierenden Anforderungen, werden anhand von Checklisten nur die Features der Konkurrenz nachgebaut. Ist die Produktentwicklung nur technologiegetrieben, besteht die Gefahr, daß man zwar der “First Mover” ist, sich das Produkt aber nicht verkaufen lässt. Deshalb ist es unabdingbar den Architekten in die Verantwortung zu nehmen, eine Balance zwichen Business Prioritäten, architekturellen Risiken und technologischen Innovationen zu finden.

Testen ist nicht gleich TDD

10. Dezember 2008 Wolfgang Strunk Keine Kommentare

Bei meinem momentanen Arbeitgeber wird seit 3-4 Jahren in vielen Bereichen eine testgetriebene Entwicklung durchgeführt. Manchmal werden die Tests auch erst nach dem eigentlichen Code erstellt, aber wenigstens noch bevor ein neues Feature in das Produkt eingebaut wird.

So jedenfalls mein Weltbild. Die Realität hat mich dann heute leider wieder eingeholt: auf die Frage, ob wir denn eine ausreichende Testabdeckung für ein neues Feature haben, kam als Antwort wie selbstverständlich:

Das Feature ist freigegeben und den Rest (das Testen) machen wir über die eingehenden Bugs aus der Testabteilung.

So kann man natürlich Testen, eine ausreichende Testabdeckung und eine schnelle Verifikation von durchgeführten Änderungen sind so wohl nicht möglich. Es scheint doch noch viel Aufklärungsarbeit notwendig zu sein.

Softwarearchitektur

11. Dezember 2004 Wolfgang Strunk Keine Kommentare

Softwarearchitektur ist ein Forschungsgebiet der Informatik, das in den letzten Jahren zunehmend an Bedeutung gewonnen hat. Die steigende Komplexität und die zunehmende Interoperabilität zwischen verschiedenen Softwaresystemen verlangen ein systematisches Strukturieren und fundierte Beschreibungen der Strukturen. Eine die eine adhoc-Entwicklung ist heutzutage unmöglich und analog zum Bauwesen erscheint das Vorgehen auf Basis einer Vorlage, einer Architektur, notwendig .Nur so ist die Entwicklung und die Wartung großer und komplexer mit vertretbarem Aufwand und genügender Qualität noch möglich.

Software architecture is… a software design at a level of abstraction that focuses on the patterns of systems organization that describes how functionality is partitioned and how those elements are interconnected. [Sha90]

Categories: Uncategorized Tags: