schwerpunkt: moderne programmierpraktiken - SIGS DATACOM
schwerpunkt: moderne programmierpraktiken - SIGS DATACOM
schwerpunkt: moderne programmierpraktiken - SIGS DATACOM
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Mit Sonderbeilage<br />
Quality Management<br />
Januar / Februar 2012 • Nr. 1<br />
€ 8,90 Österreich 9,90 Schweiz sfr 16,50<br />
www.OBJEKTspektrum.de<br />
SCHWERPUNKT MODERNE PROGRAMMIERPRAKTIKEN<br />
Die Zeitschrift für Software-Engineering und -Management<br />
SCHWERPUNKT:<br />
MODERNE PROGRAMMIERPRAKTIKEN<br />
DI und AOP: Eine Bilanz<br />
Steve, Gregg und<br />
Duke im Gespräch<br />
SPECIAL<br />
Mit Diana Larsen,<br />
Johanna Rothman und<br />
Matthias Bohlen<br />
Flow in Lean –<br />
Flow im Team<br />
FACHTHEMEN<br />
G 6540F<br />
Sicherer Smartphone-<br />
Einsatz<br />
Betrieb von SOAbasierten<br />
Lösungen
editorial – ordnung im chaos<br />
„Compilerbau ist die am besten durchdrungene<br />
Disziplin in der ansonsten<br />
chefredakteur<br />
doch noch recht unreifen Informatik!“<br />
So oder so ähnlich hat sich mein<br />
Doktorvater Prof. Nagl gern ausgedrückt,<br />
um seine Freude über diese gereifte<br />
Mischung aus Theoretischer Informatik,<br />
Programmiersprachen konzep ten und<br />
Best Practices in der technischen<br />
Umsetzung auszudrücken. Und daran<br />
muss te ich während der Entstehung dieser Ausgabe von<br />
OBJEKTspektrum immer wieder denken.<br />
Wenn wir hier und heute über <strong>moderne</strong> Program -<br />
mierpraktiken sprechen, dann sind wir in genau dieser guten<br />
Tradition des Compilerbaus, nur 25 Jahre nach dem oben<br />
genannten Zitat meines Lehrers. Heute wird nicht mehr über<br />
die Vor- und Nachteile modularer Programmier sprachen -<br />
konzepte diskutiert und auch die Welle objektorientierter<br />
Sprachen wie C++ und Smalltalk ist über uns hinweg<br />
geschwappt. Und wenn auch in der heutigen kommerziellen<br />
Anwendungsentwicklungswelt eher über Ruby, Java und<br />
ObjectiveC diskutiert wird, wie in dem unterhaltsamen<br />
Artikel von Holger Bohlmann, Manuel Küblböck und<br />
Henning Spille, so hat doch jede dieser vergangenen Wellen<br />
deutliche Spuren bei den <strong>moderne</strong>n Praktiken hinterlassen.<br />
Erich Gamma war beispielsweise mit seinen Design Patterns<br />
auch der Pate für deren kleine Brüder, die Idiome, die André<br />
Janus und Jens Jäger ebenso beschreiben wie die schmutzigen<br />
kleinen Brüder der Anti-Pattern, die Code Smells.<br />
Der wesentliche Sinn vieler <strong>moderne</strong>n Praktiken liegt wie der<br />
vieler Konzepte aus der Vergangenheit in der losen Kopplung<br />
von Komponenten und der sauberer Kapselungen. Aber es<br />
geht eben auch um mehr als eine logische Strukturierung: Es<br />
geht um immer mehr Flexibilität in der Konstruktion von<br />
Software, selbst bei sehr komplexen Anwendungsstrukturen.<br />
Und Flexibilität bedeutet eben auch, dass man sich von einer<br />
zentralen Steuerung endgültig verabschiedet und Kontrolle<br />
zunehmend dezentralisiert, wie Eberhard Wolff in seiner<br />
Bilanz über die Dependency Injection und aspektorientierte<br />
Programmierung herleitet.<br />
Und damit bilden die Praktiken ein praktisches Hilfsmittel für<br />
eine konkrete Umsetzung flexibler Services in einer sauberen<br />
Architektur im Sinne der SOA-Evangelisten früherer Jahre.<br />
Auch Veit Köppen und Liane Will beschreiben übrigens in<br />
ihrem Artikel über die praktische Umsetzung beim professionellen<br />
ITIL-basierten Betrieb von SOA-Anwendungen eine<br />
besondere Herausforderung beim Einsatz von SOA.<br />
Komme ich aber zurück auf die „neue Flexibilität“ unserer<br />
Programmierpraktiken. Sie bildet auch die Basis <strong>moderne</strong>r flexibler<br />
Management-Disziplinen. Marko Schulz und Andreas<br />
Havenstein betonen daher in ihrem Artikel über den Certified<br />
Scrum Developer: „Scrum erfordert flexible Strukturen, damit<br />
das Team jederzeit auf geänderte Anforderungen reagieren<br />
kann, die der Product Owner (PO) einbringt. Ein CSD muss<br />
Entwurfsprinzipien kennen und anwenden können, die zu entkoppelten<br />
Strukturen führen.“ Aber auch der CSD ist mit dem<br />
Drang nach Flexibilität immer in der Gefahr, eine saubere<br />
Architektur zu vernachlässigen.<br />
Damit haben wir auch schon den Bogen gespannt von den<br />
Programmierpraktiken zu den Programmierern und den anderen<br />
Menschen im Entwicklungsprozess, die allen meinen<br />
Gesprächs partner im OOP-Special dieses Heftes so sehr am<br />
Herzen liegen. Matthias Bohlen zieht die Parallelen zwischen<br />
dem „Flow im Lean“ und dem „Flow im Team“, Johanna<br />
Rothman gibt Tipps, um die richtigen Leute einzustellen und<br />
wie man mit Hilfe dieser Menschen seine Arbeit erledigt<br />
bekommt. Diana Larsen umschreibt die Softwareentwicklung<br />
als einen komplexen Tanz von dem Ganzen (dem organisatorischen<br />
System) und seinen Teilen (den betroffenen<br />
Menschen).<br />
Ich finde es wirklich auffällig, dass so viele Technik-Freaks<br />
irgendwann den Weg hin zur Arbeitsorganisation finden, die<br />
einen über Kanban, die anderen über systemische<br />
Betrachtungen von Teams. Oft hatte ich ja den Verdacht, dass<br />
der Grund darin zu suchen ist, dass man mit zunehmendem<br />
Alter nicht mehr der doch sehr schnellen technischen<br />
Entwicklung standhält (Autoren und Leser des<br />
OBJEKTspektrums sind hier natürlich ausgenommen. ☺) Aber<br />
in diesem Heft ist mir der Zusammenhang zwischen diesen<br />
scheinbar weichen Themen und den eher technischen Themen<br />
wieder so richtig bewusst geworden: Wir bauen immer komplexere<br />
Systeme und merken, dass eine zentrale Kontrolle dieser<br />
Komplexität nicht mehr Herr wird. Sowohl die<br />
Programmierpraktiken als auch die Managementpraktiken<br />
versuchen, Ordnung im Chaos zu halten, indem sie Kontrolle<br />
dezentralisieren. Oder wie Diana Larsen sagt: „Es ist eigentlich<br />
paradox, dass wir erst dadurch mehr Kontrolle über komplexe<br />
Ergebnisse bekommen, dass wir auf Kontrolle über die<br />
Teile verzichten.”<br />
Ihr Thorsten Janning<br />
Meet the Editor @ OOP 2012<br />
am <strong>SIGS</strong> <strong>DATACOM</strong>-Stand<br />
Di, 24.01.2012 15.45–16.15 Uhr<br />
Mi, 25.01.2012 10.30–11.00 Uhr<br />
1/2012
CHWERPUNKT: MODERNE PROGRAMMIERPRAKTIKEN<br />
SCHWERPUNKT:<br />
MODERNE PROGRAMMIERPRAKTIKEN<br />
Holger Bohlmann<br />
Manuel Küblböck<br />
Henning Spille<br />
EIN KAFFEE NACH DEM MITTAG:<br />
AUS DEM ALLTAG VON<br />
DREI ENTWICKLERN · · · · · · · · · · · · · · · · · · · 10<br />
Moderne Programmierpraktiken haben sich mit Java schon vor<br />
Jahren verbreitet. Mittlerweile arbeiten viele Java-Entwickler mit<br />
aktuellen Plattformen, wie z. B. der App-Entwicklung fürs iPhone.<br />
Die Autoren zeigen in einem kleinen Spiel auf, wie sich <strong>moderne</strong><br />
Programmier praktiken in verschiedenen Plattformen gemausert<br />
haben. Hierzu treffen sich der Apple-iOS-Entwickler Steve, der<br />
Rubyist Gregg und Duke, der in Java entwickelt, auf einen Kaffee<br />
in der Mittagspause und berichten von ihren Erfahrungen.<br />
EDITORIAL · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3<br />
AKTUELLES · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6<br />
PRODUKTNEUHEITEN · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 8<br />
LESERBRIEF · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9<br />
BUCHBESPRECHUNG: YVES STALGIES REZENSIERT:<br />
THE LEAN STARTUP · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 40<br />
BUCHBESPRECHUNG: MICHAEL STAL REZENSIERT:<br />
BASISWISSEN SOFTWAREARCHITEKTUR · · · · · · · · · · 74<br />
STELLENMARKT · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 46<br />
IMPRESSUM · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 57<br />
SEMINARE & VERANSTALTUNGEN · · · · · · · · · · · · · · · 77<br />
THEMENVORSCHAU & INSERENTENVERZEICHNIS · · 79<br />
<strong>schwerpunkt</strong><br />
Holger Bohlmann<br />
Manuel Küblböck<br />
Henning Spille<br />
EIN KAFFEE NACH DEM MITTAG:<br />
AUS DEM ALLTAG VON DREI ENTWICKLERN · · · · · · 10<br />
Der IDE-Glaubenskrieg visualisiert.<br />
André Janus<br />
Jens Jäger<br />
CODE-FLAVOURS:<br />
NÜTZLICHE JAVA-IDIOME · · · · · · · · · · · · · · 20<br />
Während Anti-Pattern das negative Gegenstück zu den bekannten<br />
Design-Pattern bzw. Entwurfsmustern sind, gibt es auf niedriger<br />
Abstraktionsebene die Code-Smells als Gegensatz zu den<br />
weniger bekannten Idiomen. Die Autoren stellen in diesem<br />
Artikel einige alt bekannte und auch neue Java-Idiome vor.<br />
Andreas Havenstein<br />
Marko Schulz<br />
CERTIFIED SCRUM DEVELOPER:<br />
DER GANZHEITLICHE ENTWICKLER · · · · · · · · · · · · · · · 16<br />
André Janus<br />
Jens Jäger<br />
CODE-FLAVOURS:<br />
NÜTZLICHE JAVA-IDIOME · · · · · · · · · · · · · · · · · · · · · · · · 20<br />
Eberhard Wolff<br />
DI UND AOP:<br />
EINE BILANZ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 24<br />
4 5 www.objektspektrum.de
Das OBJEKTspektrum-Team<br />
wünscht Ihnen<br />
frohe Weihnachten und<br />
einen guten Rutsch ins neue Jahr.<br />
ausblick auf die OOP 2012<br />
Johanna Rothman<br />
SECHS VERHALTENSWEISEN …<br />
… DIE MITARBEITER EINES<br />
AGILEN TEAMS BESITZEN SOLLTEN · · · · · · · · · · · · · · 27<br />
Matthias Bohlen<br />
FLOW IN LEAN, FLOW IM TEAM:<br />
WAS LEAN MIT DEM PERSÖNLICHEN<br />
ERLEBEN ZU TUN HAT · · · · · · · · · · · · · · · · · · · · · · · · · · · · 30<br />
Diana Larsen<br />
WAS UNS ZU ERFOLGREICHEN PROJEKTEN FÜHRT …<br />
… UND MANCHMAL AUCH DAVON ABHÄLT · · · · · · 38<br />
Matthias Bohlen<br />
FLOW IN LEAN, FLOW IM TEAM:<br />
WAS LEAN MIT DEM PERSÖNLICHEN<br />
ERLEBEN ZU TUN HAT · · · · · · · · · · · · · · · · · · 30<br />
Flow herrscht in der Arbeit, wenn Bedarf und Lieferfähigkeit<br />
gegeneinander ausbalanciert sind, z. B. durch den Einsatz<br />
von Lean-Verfahren in der Produktentwicklung. Flow gibt es<br />
auch in der Psyche, wenn vom Einzelnen soviel gefordert<br />
wird, wie er auch leisten kann. Im Flow-Zustand entstehen<br />
die besten Ergebnisse, die Arbeit ist angenehm, man vergisst<br />
die Zeit. Dass man für Flow im Sinne von „Lean<br />
Product Development” dasselbe Wort verwendet wie in der<br />
Psycholo gie, ist kein Zufall. In dem Artikel geht es darum, die<br />
Beziehung zwischen Flow in Lean und Flow in der Psyche<br />
herzustellen und zu erforschen.<br />
fachartikel<br />
Veit Köppen<br />
Liane Will<br />
LIVING SOA:<br />
EVOLUTION DES BETRIEBS VON<br />
SOA-BASIERTEN LÖSUNGEN · · · · · · · · · · · · · · · · · · · · · 42<br />
Albert Zündorf<br />
GEH MIR AUS DEM WEG!<br />
WAS MODELLIERUNGSWERKZEUGE VON<br />
WHITE-BOARDS LERNEN KÖNNEN · · · · · · · · · · · · · · · 52<br />
Eldar Sultanow<br />
MIGRATIONSMANAGEMENT:<br />
FALLSTUDIE ZUR MIGRATION EINER<br />
INDUSTRIELLEN RICH-CLIENT-ANWENDUNG · · · · · · 58<br />
Albert Zündorf<br />
GEH MIR AUS DEM WEG!<br />
WAS MODELLIERUNGSWERKZEUGE VON<br />
WHITE-BOARDS LERNEN KÖNNEN · · · · · · 52<br />
Viele grafische Editoren unterbrechen den Benutzer bei seiner<br />
Arbeit. Insbesondere UML-Modellierungswerkzeuge<br />
stören den Arbeitsfluss des Entwicklers mit Pop-Ups und<br />
der Notwendigkeit, in Werkzeugleisten herumzusuchen.<br />
Gleichwohl werden Softwarearchitekten nicht in<br />
Mausmetern bezahlt. Um die Bedienbarkeit von grafischen<br />
Benutzungsoberflächen zu verbessern, muss man die<br />
Menschen dabei beobachten, wie sie arbeiten. Die daraus<br />
resultierenden Erkenntnisse können den Arbeitsablauf<br />
erheblich beschleunigen.<br />
Bernd Körner<br />
ABGRENZUNG ALS METHODE DER<br />
ANFORDERUNGSANALYSE:<br />
TEIL 2: ABGRENZUNGEN HERAUSARBEITEN · · · · · · · 66<br />
Isabel Münch<br />
TECHNIK PLUS SENSIBILITÄT:<br />
SICHERER SMARTPHONE-EINSATZ<br />
IN UNTERNEHMEN · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 75<br />
Klassendiagramm am Whiteboard.<br />
1/2012 www.sigs-datacom.de
<strong>schwerpunkt</strong><br />
mehr zum thema:<br />
http://www.it-agile.de/agile-entwicklung.html<br />
die autoren<br />
EIN KAFFEE NACH DEM MITTAG:<br />
AUS DEM ALLTAG VON DREI<br />
ENTWICKLERN<br />
Moderne Programmierpraktiken haben sich mit Java schon vor Jahren verbreitet. Mittlerweile<br />
arbeiten viele Java-Entwickler mit aktuellen Plattformen, wie z. B. der App-Entwicklung fürs<br />
iPhone. Wir möchten in einem kleinen Spiel aufzeigen, wie sich <strong>moderne</strong> Programmier -<br />
praktiken in verschiedenen Plattformen gemausert haben. Hierzu treffen sich der Apple-iOS-<br />
Entwickler Steve, der Rubyist Gregg und Duke, der in Java entwickelt, auf einen Kaffee in der<br />
Mittagspause und berichten von ihren Erfahrungen.<br />
Holger Bohlmann<br />
(E-Mail: holger.bohlmann@it-agile.de)<br />
arbeitet seit fast 10 Jahren als Softwareentwickler<br />
in verschiedenen Projekten. Ursprünglich im<br />
Java/J2EE-Bereich, dann auch mit Ruby on Rails<br />
und seit kurzem auch in der iPhone-Entwicklung.<br />
Thema: Entwicklungsumgebungen<br />
(IDE)<br />
Duke: In der Java-Welt gibt es eine Vielzahl<br />
ziemlich guter IDEs. Die Frage, welche<br />
davon die beste ist, artet schon mal gerne in<br />
einen Glaubenskrieg aus (Duke zeichnet<br />
dabei Abbildung 1). Dabei bekämpfen sich<br />
gleich mehrere große Lager aus Eclipse-,<br />
IntelliJ IDEA-, NetBeans- und JDeveloper-<br />
An hä ngern. Es ist eine Schlacht auf sehr<br />
hohem Niveau, die auch insgesamt die<br />
Reife und Vielfalt an Java-Tools widerspiegelt.<br />
Alle genannten IDEs bieten automatische<br />
Refaktorisierungen, Syntax prüfung<br />
und gute Debugging-Unterstüt zung. Ich<br />
persönlich benutze am liebsten Eclipse<br />
wegen der schier unendlichen Anzahl an<br />
Plug-Ins. Egal, was man machen möchte,<br />
mit sehr hoher Wahrscheinlichkeit gibt es<br />
schon ein Eclipse-Plug-In dafür.<br />
Gregg: Die IDE-Glaubenskriege sind<br />
schon legendär. Insgesamt sind aber mittlerweile<br />
alle Entwicklungsumgebungen im<br />
Java-Bereich so gut, dass sie für den<br />
Entwickler eine echte Hilfe in der täglichen<br />
Arbeit darstellen. Vor zehn Jahren habe ich<br />
noch Java-Code mit einem Texteditor<br />
namens Ultra-Edit geschrieben. Wenn ich<br />
jetzt auf Ruby schaue, könnte ich etwas<br />
bösartig sagen, ich bin wieder bei Ultra-<br />
Edit angekommen. Okay, ich habe auch<br />
viel mit Textmate und Rubymine von<br />
JetBrains gemacht. Letztere haben ja auch<br />
schon IntelliJ IDEA gebaut. Textmate sieht<br />
erst einmal wie ein einfacher Editor aus,<br />
hat aber dazu eine riesige Sammlung von<br />
so genannten Bundles, die einen, wenn man<br />
sie denn kennt, auch effektiv unterstützen.<br />
Was ich ein wenig vermisse, sind die<br />
Refaktorisierungsmöglichkeiten aus<br />
Manuel Küblböck<br />
(E-Mail: manuel.kueblboeck@it-agile.de)<br />
interessiert sich für alles, was das Entwickeln von<br />
qualitativ hochwertiger Software einfacher und<br />
effektiver macht. Aktuell befasst er sich mit objektfunktionalen<br />
Sprachen und Continuous Delivery.<br />
Henning Spille<br />
(E-Mail: henning.spille@it-agile.de)<br />
arbeitet seit einigen Jahren bei der it-agile GmbH.<br />
Ursprünglich entwickelte er mit Java und schreibt<br />
heute native iPhone-Anwendungen.<br />
Abb. 1: Der IDE-Glaubenskrieg visualisiert.<br />
Ec lipse. Hier ist man leider noch viel auf<br />
Textersetzung angewiesen, eine automatische<br />
Refaktorisierung ist nicht in der Art<br />
und Weise möglich wie bei einer statischen<br />
Programmiersprache, auch wenn sich<br />
Entwicklungsumgebungen wie Rubymine<br />
da große Mühe geben. Insgesamt bleibt<br />
aber das Gefühl, dass man wieder wie früher<br />
entwi ckelt.<br />
Steve: Als iOS-Entwickler habe ich nicht<br />
viel Auswahl. Es bleibt mir eigentlich nur<br />
eins: Xcode zu verwenden. Die Entwick -<br />
lungsumgebung aus dem Hause Apple ist<br />
seit OS X für fast jegliche Software für Mac<br />
oder iOS der Ursprung. Erweiterungen zur<br />
IDE wie für Eclipse gibt es keine. Apple<br />
gibt den Weg strikt vor. Refaktori -<br />
10 11
<strong>schwerpunkt</strong><br />
sierungshilfen, wie z. B. Extrahieren, Um -<br />
benennen, Verschieben oder automatisches<br />
Einfügen von Boilerplate-Code, den es in<br />
Objective-C viel gibt, existieren leider<br />
nicht. Syntax-Checks des gerade getippten<br />
Codes kann Xcode auch nicht – das liegt<br />
aber vielleicht auch mit an der dynamisch<br />
typisierten Sprache Objective-C. Dafür<br />
kommt Xcode mit einigen Entwicklungs -<br />
werkzeugen daher. Diese beinhalten beispielsweise<br />
den Interface Builder – ein<br />
WYSIWYG-Editor für die Oberflächen der<br />
Apps. Dieser ist zwar selbst auf aktuellen<br />
Mac-Notebooks eher langsam, funktioniert<br />
aber halbwegs zuverlässig. Interessant ist<br />
auch der eingebaute Profiler Instruments.<br />
In Kombination mit dem iPhone-Simulator<br />
kann man hier zuverlässig nach Speicher -<br />
löchern, Zombis (freigegebenen, aber noch<br />
im Zugriff befindlichen Objekten) und<br />
Zeitfressern in der Anwendung fahnden. In<br />
der neuesten Version wird sogar die Ver -<br />
sionsverwaltung Git unterstützt.<br />
Abb. 2: Dependency Injection.<br />
Thema: Dependency-<br />
Injection (DI)<br />
Duke: Auch bei DI profitiert man als Java-<br />
Ent wickler von der Fülle und Reife an Ent -<br />
wicklerwerkzeugen. Die ersten Berührun -<br />
gen mit DI hatte ich mit Struts, das Anfang<br />
des neuen Jahrtausends das vorherrschende<br />
MVC-Framework für die Web-Entwick lung<br />
war. Da es ziemlich konfigurationslastig<br />
war, wurde ihm aber bald durch Spring der<br />
Rang abgelaufen. Obwohl beide<br />
Frameworks mittlerweile auch andere<br />
Optionen anbieten, findet das Zusammen -<br />
bauen von Applikationen aus Komponen -<br />
ten meistens in XML-Konfigurations -<br />
dateien statt. Das ist ungünstig, weil<br />
da durch die Fehlererkennung zur Kompi -<br />
lierzeit – einer der großen Vorteile von statisch<br />
getypten Sprachen – verloren geht.<br />
Außerdem werden diese Konfigurations -<br />
dateien leicht unübersichtlich und sind nicht<br />
Debugger-freundlich. Mittlerweile geht der<br />
Trend daher weg von schwergewichtigen<br />
Frameworks hin zu „Convention over<br />
Configuration” und spezialisierten Biblio -<br />
theken. Nicht zuletzt, weil wir uns da einiges<br />
von Ruby & Rails abgeschaut haben<br />
(Gregg nickt und lächelt). Google Juice<br />
erfreut sich hierbei großer Beliebtheit. Es<br />
kommen aber auch immer mehr und mehr<br />
Stimmen auf, die generell anzweifeln, ob DI<br />
überhaupt einem Framework oder einer<br />
Bibliothek überlassen werden soll. Der<br />
Einfachheit und Verständlichkeit wegen setzen<br />
viele daher auf eine Imple mentierung<br />
von DI in einfachen Assembler-Klassen.<br />
Gregg: Als ich mit Ruby & Rails angefangen<br />
habe, habe ich mich schon gewundert:<br />
Wie macht man hier eigentlich DI? In Java<br />
fand ich es sehr hilfreich, wenn einem die<br />
(technischen) Abhängigkeiten von außen<br />
gegeben wurden. Damit wurde das Testen einzelner<br />
Teile meiner Anwendung erst möglich<br />
(Gregg zeichnet Abbildung 2). Sonst konnte<br />
ich da keinen Schnitt ansetzen und hatte sofort<br />
alle möglichen technischen Systeme an der<br />
Backe. Mittlerweile habe ich gemerkt, dass<br />
das bei Ruby eigentlich völlig unnötig ist.<br />
Nein, jetzt nicht das Testen, sondern das<br />
Problem mit den Abhängigkeiten. Es ist zum<br />
Beispiel möglich, eine Methode an einer<br />
Klasse dynamisch neu zu definieren und durch<br />
einen Mock zu ersetzen. Den Mock schreibe<br />
ich ganz einfach, my_mock = mock(), und mit<br />
meinem aktuellen Mock-Framework, (zum<br />
Beispiel my_mock.should_receive(:my_method).<br />
Es ist nicht nötig, dafür extra irgendwelche<br />
Interfaces zu definieren. Und nebenbei: Der<br />
Klassiker Datenbank ist so eng an meinem<br />
Modell dran, da möchte ich vielleicht auch<br />
nichts abkoppeln. Das lässt sich alles so einfach<br />
und schnell testen, wozu sollte man da<br />
nicht direkt gegen eine In-Memory-Daten -<br />
bank Tests fahren?<br />
Steve: Bislang ist mir für DI auch nichts<br />
Brauchbares untergekommen. Gefühlt<br />
habe ich es aber auch noch nicht vermisst,<br />
was vielleicht daran liegt, dass die iPhone-<br />
Apps eher spezialisiert und klein sind. Die<br />
Oberfläche kann über den Interface-<br />
Builder zusammengebaut werden und man<br />
konfiguriert die Abhängigkeiten graphisch.<br />
Obwohl: Unsere Controller sind schon<br />
recht groß und mehr oder minder fest an<br />
die GUI und an das Datenmodell geknüpft.<br />
Wenn man Daten lokal speichert, dann<br />
muss man Core-Data von Apple benutzen,<br />
das sehr fest an das Modell geknüpft ist.<br />
Ich wüsste nicht, wie ich da die Abhän -<br />
gigkeit zur Persistenz entkoppeln könnte<br />
(Steve blickt fragend in die Runde).<br />
Thema: Release-Prozess<br />
Duke: Die meisten Anwendungen laufen ja<br />
in irgendeinem Applikationsserver, wie<br />
z. B. Tomcat. Die Integration mit Buildund<br />
CI-Werkzeugen ist da recht gut, sodass<br />
das auf Knopfdruck passieren kann. Mit<br />
den richtigen Tools (z. B. [JRe], [Liv]) entfällt<br />
auch das lästige neu Kompilieren und<br />
ein neues Deployment. Das zeitaufwändige<br />
Hoch- und Runterfahren des Servers kann<br />
einem schon ziemlich auf den Geist gehen,<br />
wenn man erst einmal erlebt hat, wie viel<br />
schneller man bei dynamischen Sprachen<br />
vom Schreiben des Codes zur laufenden<br />
Anwendung wechseln kann. Alle Java-<br />
Anwendungen laufen auf der Java Virtual<br />
Machine (JVM) und sind somit selbstverständlich<br />
plattformunabhängig. Diese ist<br />
mittlerweile auch richtig schnell. Teilweise<br />
ist ja JRuby sogar schneller als Ruby selbst.<br />
Gregg: Und bald ist JRuby bestimmt<br />
auch noch schneller als Java (Gregg lacht).<br />
Ja, wenn ich da an klassische Client/Server-<br />
Anwendungen denke, das war schon<br />
schlimm, ein Release auszurollen. Mit den<br />
Web-Anwendungen ist es ja viel einfacher<br />
1/2012
Thema: Continuous<br />
Integration (CI)<br />
Duke: Ich würde behaupten, dass fast alle<br />
Java-Projekte zumindest rudimentärer CI<br />
einsetzen. Die Bandbreite ist hier aber<br />
ziemlich hoch. Einen CI-Server zu haben,<br />
der bei jedem Check-in die Anwendung<br />
baut und testet, ist hier bei Weitem noch<br />
nicht das Ende der Fahnenstange. Dabei ist<br />
CI nicht nur eine Tool-, sondern vielmehr<br />
eine Kulturfrage. Wer seinen Code nicht<br />
mehrmals täglich integriert und Build-<br />
Fehler sofort behebt, macht kein CI. Uns<br />
hat es CI ermöglicht, die Release-Zyklen<br />
von Monaten auf Wochen bzw. Tage zu<br />
verkürzen. Wir sind zwar noch nicht bei<br />
Continuous Deployment, also dem auto<strong>schwerpunkt</strong><br />
geworden, ich tippe nur einen einzigen<br />
Befehl und schon ist meine Anwendung<br />
live, die Datenbank ist migriert und alles<br />
läuft rund. Das kann über mehrere Server,<br />
z. B. mit Capistrano (vgl. [Cap]), erfolgen.<br />
Sehr hilfreich ist natürlich die Tatsache,<br />
dass es keinen klassischen Build-Prozess<br />
gibt, der einem viel Kopfschmerzen bereiten<br />
könnte. Ich bin sehr froh, dass ich mich<br />
damit nicht mehr herumschlagen muss. Ich<br />
habe zu viel Zeit in Werkzeuge wie Ant<br />
oder später dann Maven investiert, die beide<br />
einen ganz einfachen Build-Prozess versprochen<br />
haben. Es ist besser geworden,<br />
aber ich finde, das Thema ist nie zufriedenstellend<br />
gelöst worden. Dann lieber Skript-<br />
Sprachen benutzen, die sich damit noch nie<br />
wirklich herumärgern muss ten.<br />
Steve: Der Release einer App über den<br />
Appstore gestaltet sich relativ einfach. In<br />
Xcode erzeugt man ein Binary, das direkt<br />
über Xcode in den Appstore geladen werden<br />
kann. Nach einer circa einwöchigen<br />
Prüfung durch Apple, ob die Anwendung<br />
reif für den Appstore ist, wird die App je<br />
nach Wunsch automatisch oder per Maus -<br />
klick in der App-Verwaltung bei Apple freigegeben.<br />
Vorher muss man sich allerdings<br />
bei Apple als Entwickler oder Firma regis -<br />
trieren, um Anwendungen in den Appstore<br />
laden zu dürfen. Der Nachteil ist natürlich<br />
die nicht vorhandene Vorhersag barkeit:<br />
zum Einen, wann das Update zur<br />
Verfügung steht, und zum anderen, wann<br />
der Anwender die Applikation tatsächlich<br />
aktualisiert. Da verhält es sich mit Apps<br />
eher so, wie mit klassischen Client/Server-<br />
Anwendungen: Wenn man dem Benutzer<br />
nicht mit Fehlermeldungen oder Fehlfunk -<br />
tionen nerven möchte, muss die App<br />
abwärtskompatibel bleiben.<br />
Abb. 3: Der TDD-Zyklus.<br />
matischen Ausliefern in der Produktion bei<br />
jedem Commit, angelangt, aber wir haben<br />
zumindest jederzeit eine lauffähige Version,<br />
die wir ausliefern könnten.<br />
Gregg: Build-Fehler? Nun, einen Build<br />
kenne ich ja nicht (zwinkert). Bei uns ist es<br />
so, dass die Tests auf den lokalen Rechnern<br />
schon eine Weile brauchen, da fühlt sich<br />
das kontinuierliche Testen nicht immer so<br />
gut an. Am schlimmsten sind unsere Ober -<br />
flächentests, die mit Hilfe von Cucumber<br />
und RSpec laufen. Diese testen gegen eine<br />
laufende Web-Applikation (vgl. [Che10]).<br />
Gut, aber auch langsam. Und das alte<br />
Problem haben wir auch: Eine große<br />
Anwendung mit einer komplexen Daten -<br />
struktur erfordert schon ein wenig Setup an<br />
Daten – und es dauert, das für jeden Test<br />
wieder und wieder aufzubauen. Es gibt<br />
technische Tricks und Hilfsmittel, aber das<br />
Problem ist nicht gelöst. Ein echter Fort -<br />
schritt sind übrigens Multi-Core-Systeme.<br />
Da sich Tests in Ruby leicht parallel ausführen<br />
lassen, kann man auf einem<br />
Rechner mit vielen Rechnerkernen auch<br />
eine deutliche Geschwindigkeits stei gerung<br />
erleben. Damit haben wir auch unserem<br />
CI-Server so richtig Beine ge macht. Auf<br />
dem läuft auch das CI-System der Wahl:<br />
Jenkins, oder wie es früher hieß, Hudson.<br />
Steve: Als CI-Server nutzen wir natürlich<br />
auch einen Mac. Auf einer anderen<br />
Plattform könnten wir den Objective-C-<br />
Code für eine iPhone-App gar nicht kompilieren.<br />
Dieser wird über den Konsolen -<br />
befehl xcodebuild gestartet. Das wiederum<br />
setzt auf der Konfiguration in Xcode auf,<br />
welche nur für OSX zu haben ist. Zum<br />
Glück kann man Jenkins direkt von der<br />
Konsole aus starten und auch zuverlässig in<br />
OSX integrieren, sodass Jenkins auch nach<br />
einem ungewolltem Neustart des Rechners<br />
wieder hochfährt. Mit ein wenig Kenntnis<br />
der Konsole und dem Tool Betabuilder (vgl.<br />
[Han10]) oder Testflight (vgl. [Tes]) ist es<br />
auch möglich, direkt eine Betaversion zum<br />
Download zur Verfügung zu stellen. Diese<br />
können sich der Product Owner und die<br />
Tester direkt auf ihrem iOS-Gerät installieren,<br />
sofern sie eine halbwegs aktuelle<br />
Version des Betriebs systems haben. Über<br />
den App-Store lässt sich ja nichts schnell<br />
aktualisieren, schon gar nicht für einen eingeschränkten<br />
Benutzerkreis (Gregg und<br />
Duke schütteln den Kopf). Vorher führt<br />
unser CI-Server Tests mit einem Akzep -<br />
tanztest-Framework namens Frank (vgl.<br />
[Fra]) durch. Diese dauern zwar inzwischen<br />
eine halbe Stunde, haben sich aber schon<br />
mehrfach als Regressionstests bewährt.<br />
Frank benutzt den iPhone-Simulator für<br />
Akzeptanztests, der nur einmal gestartet<br />
werden kann. Darum ist es trotz Mehrkern-<br />
Rechner und Cucumber nicht möglich,<br />
mehrere Tests gleichzeitig auszuführen.<br />
Thema: Test-Driven<br />
Development (TDD)<br />
Duke: Der Vater von TDD, Kent Beck, ist<br />
auch der Macher von JUnit, dem TDD-<br />
12 13
<strong>schwerpunkt</strong><br />
Abb. 4: Auszug der Entwicklung von Programmiersprachen.<br />
Framework für Java. Damit sollte doch<br />
wohl klar sein, dass TDD zu Java gehört<br />
wie zu keiner anderen Sprache. Man kann<br />
mit Java auch tatsächlich richtig gut TDD-<br />
Style programmieren. Das Problem liegt<br />
eher darin, dass man in Java meist an<br />
Legacy-Code rumschraubt, der eben nicht<br />
mit TDD erstellt wurde, und daher meist<br />
kein testbares und damit gutes Design aufweist.<br />
Da kann es dann schon mal etwas<br />
schwieriger werden.<br />
Gregg: Klar machen wir auch TDD, wer<br />
nicht? Ich muss auch sagen, dass es bei<br />
Ruby on Rails noch viel wichtiger ist, Tests<br />
zu haben. Das hilft, die vielen kleinen<br />
Flüchtigkeitsfehler auszumerzen, die man<br />
ganz schnell mal macht. Schließlich haut<br />
einem ja nicht ständig ein Compiler oder<br />
eine Entwicklungsumgebung auf die Finger.<br />
Aber ich fühle im Team doch einen gewissen<br />
Druck, mehr und mehr Richtung<br />
Akzeptanztests der Web-Seiten zu gehen,<br />
denn die testen ja dann alles im Zusam -<br />
menspiel durch. Damit verlässt man jedoch<br />
TDD-Zyklen (Gregg zeichnet dabei Abbil -<br />
dung 3). Ich selbst würde die Unit-Tests, mit<br />
denen das Thema Testen erst richtig anfing,<br />
nicht vernachlässigen. Akzeptanz tests sind<br />
aufwändiger zu schreiben: So kann ich zum<br />
Beispiel für eine Anwendung mit 100<br />
Suchoptionen entsprechend viele, langsame<br />
Akzeptanztests schreiben oder aber die<br />
Suche an sich testen und tiefer im System<br />
dann die 100 Suchoptionen, die sich nur in<br />
Datenbankzugriffen unterscheiden.<br />
Eins habe ich fast vergessen: Testen soll<br />
das Design treiben. Man kann natürlich<br />
dagegen halten, dass Rails einem ein festes<br />
Rahmenwerk vorgibt und es nicht so viel<br />
Design zu steuern gibt. Ich kann jedem<br />
auch empfehlen, im großen weiten Netz<br />
nachzuschauen, wie es andere so machen.<br />
Das gehört bei Ruby on Rails zum guten<br />
Ton (vgl. [Rai]).<br />
Steve: Die Anwendung ist insgesamt sehr<br />
eng mit dem SDK verwoben, was TDD<br />
nicht leicht macht. Zum Beispiel ist genau<br />
festgelegt, wie eine View sich beim zugehörigen<br />
View-Controller zu melden hat. Eine<br />
Table-View (wie z. B. in Kontakte) ruft<br />
beim Berühren eines Kontakts die Methode<br />
(void)tableView:(UITableView*)tableView<br />
didSelectRowAtIndexPath:(NSIndexPath*)indexPath<br />
auf und der entsprechende View-Controller<br />
entscheidet dann anhand des IndexPaths, was<br />
zu tun ist. Gelegentlich schafft man es dennoch,<br />
die Fachlogik – die ja eigentlich ohnehin<br />
nicht in der App, sondern im Server bleiben<br />
sollte – von der View und dem<br />
allgegenwärtigen ManagedObjectContext zu<br />
trennen und vernünftig zu testen. Während<br />
des Projekt alltags neigen wir dazu, nach der<br />
Imple mentierung Akzeptanztests zu schreiben,<br />
um Regression vorzubeugen.<br />
Thema: Programmiersprache<br />
Duke: Java ist weit verbreitet und man findet<br />
Java-Entwickler sprichwörtlich an jeder<br />
Ecke. Das macht sie sehr attraktiv für viele<br />
Firmen. Leider entwickelt sich die Sprache<br />
nur sehr langsam weiter und daher schiele<br />
ich schon öfter mal neidisch auf neuere<br />
Sprachen, die mit Features wie Closures<br />
und Higher-Order-Functions aufwarten.<br />
Die können zwar oft auch auf der JVM laufen,<br />
sind aber meist zu instabil oder komplex,<br />
um sich gegen den Platzhirsch durchzusetzen.<br />
Viele kolportieren ja schon das<br />
Ende der Java-Vormachtstellung, können<br />
sich aber noch nicht darauf einigen, wer<br />
denn gegen Java antreten soll.<br />
Gregg: Wenn Leute von Ruby sprechen,<br />
bekomme ich immer wieder zu hören: „Das<br />
ist doch nur eine Skriptsprache”. Da kann<br />
ich nur müde lächeln. Früher fand ich statisch<br />
typisierte Sprachen auch toll. Alles<br />
wird überprüft, alles ist festgezurrt. Und<br />
das ist auch das Problem: Einige Dinge sind<br />
einfach so simpel zu machen, wenn man<br />
keine statischen Typen hat. Versuch doch<br />
einmal, in einer statisch getypten Sprache<br />
eine Methode an eine bestehende Klasse<br />
zur Laufzeit hinzuzufügen oder gar zu<br />
ändern! Die statische Typisierung ist auch<br />
der Grund für all die Interfaces, Delegates<br />
und was auch immer, die man sich schaffen<br />
muss, um ein System flexibel zu gestalten.<br />
Das macht es aber auch unübersichtlicher<br />
und aufgeblähter. In Ruby ist es oft deutlich<br />
einfacher, kürzer und damit eleganter möglich<br />
sich auszudrücken. Apropos kurz: In<br />
Ruby on Rails hat das DRY-Prinzip (Don’t<br />
repeat yourself) einen sehr hohen<br />
Stellenwert. Wiederholungen werden geradezu<br />
gehasst und auch durch die<br />
Möglichkeiten, die Ruby bietet, sehr effektiv<br />
vermieden.<br />
Steve: Objective-C ist eine Erweiterung<br />
von C (Steve zeichnet zusammen mit den<br />
anderen nebenbei Abbildung 4). Einsatz -<br />
gebiet von Objective-C ist Mac-OS und<br />
iOS von Apple. Wer für die Geräte von<br />
Apple Software schreiben will, kommt nur<br />
schwer um Objective-C herum. Als Apple-<br />
Jünger merkt man sehr schnell, wenn das<br />
typische Look & Feel einer Mac-Anwen -<br />
dungen nicht gegeben ist. Ein Versuch von<br />
Apple, in Xcode eine Cocoa-Java-Bridge<br />
einzubauen, wurde schnell wieder unterlassen.<br />
Die Lernkurve für Objective-C empfinden<br />
viele Java-Entwickler als steil wie<br />
eine Wand. Verwöhnt von der JVM, die<br />
brav jedes Objekt wegräumt, das nicht<br />
mehr benötigt wird, muss man sich stark<br />
umgewöhnen, um jedes erzeugte Objekt<br />
von Hand wieder aufzuräumen. Beim<br />
Weiterreichen von Instanzen können<br />
Anfänger schnell den Überblick verlieren,<br />
1/2012
<strong>schwerpunkt</strong><br />
wer da gerade welche Instanz eines Objekts<br />
hält (retain) und wann diese freigegeben<br />
(released) werden darf. Beim Implemen -<br />
tieren einer Klasse und seiner Properties<br />
(Instanzvariablen in Java) muss man sich<br />
hierüber auch schon Gedanken machen.<br />
Die Allgegenwärtigkeit des Umstands führt<br />
nach kurzer Übung zum speicherschonenden<br />
Entwickeln. Als dynamisch typisierte<br />
Sprache kann man zur Laufzeit mittels<br />
Kategorien bestehende Klassen um Metho -<br />
den erweitern. Dies gilt auch für Klassen<br />
des SDKs, wie etwa NSString, die nicht als<br />
Quellcode vorliegen.<br />
Thema: Externe Systeme<br />
Duke: Hier wurde früher viel mit RMI und<br />
– falls man zu einem nicht-Java-System<br />
sprechen wollte – CORBA gearbeitet.<br />
Danach waren Web-Services für eine Weile<br />
sehr populär. Wie immer findet man dafür<br />
jeweils leicht entsprechende Bibliotheken.<br />
Wobei man bei den vielen APIs in Sachen<br />
Web-Services schon mal den Überblick verlieren<br />
kann. Nicht umsonst gibt es bei<br />
Oracle einen eigenen Web-Services-Kurs,<br />
um bei JAX-RPC, JAXB, JAXR, SAAJ, etc.<br />
(Gregg und Steve schauen sich fragend an)<br />
nicht den Über- und Durchblick zu verlieren.<br />
Heutzutage machen wir das natürlich<br />
auch gerne mit REST-Schnittstellen.<br />
Gregg: Heute gibt es immer mehr externe<br />
Systeme, die angebunden werden. Mittler -<br />
weile geht das ja glücklicherweise nicht<br />
mehr über proprietäre Schnittstellen, sondern<br />
in meinem Bereich einfach über eine<br />
passende REST-Schnittstelle. Die Daten<br />
werden über XML oder besser noch über<br />
JSON übertragen. Damit ist der Zugriff<br />
offen, leicht anzubinden und auch von<br />
allen System aus möglich. Rails bietet hierfür<br />
eine geradezu natürliche Unterstüt zung.<br />
Das ist ein deutlicher Schritt nach vorne.<br />
Dazu gibt es über Ruby-Gems noch die<br />
Möglichkeit, sich Bibliotheken jeglicher<br />
Art in seine Anwendung zu holen.<br />
Softwareverteilung ist ja eigentlich ein alter<br />
Hut, wenn man auf UNIX-Paketverwal -<br />
tungswerkzeuge schaut. Aber es hat eine<br />
Weile gedauert, bis es das auch für<br />
Software-Frameworks gab. Jedenfalls ist es<br />
damit heutzutage möglich, sich auch noch<br />
für alle möglichen Fremdsysteme passende<br />
Bibliotheken zu installieren.<br />
Steve: Apps für mobile Geräte sind die<br />
Endpunkte in den Systemlandschaften.<br />
Leistungsfähig genug, um als eigenständiger<br />
Client zu agieren, versuchen native<br />
Literatur & Links<br />
Apps, eine möglichst flüssige Bedienung zu<br />
erzeugen. Auf dem iPhone können dazu in<br />
der SqLite-Datenbank alle nötigen Daten<br />
abgespeichert werden. Datenaustausch<br />
sollte möglichst viel im Hintergrund stattfinden,<br />
um dem Benutzer bei langsamen<br />
Verbindungen nicht unnötig warten zu lassen<br />
– was viele Apps leider falsch machen.<br />
Häufig werden bereits vorhandene<br />
Schnittstellen an Systemen mitbenutzt. Oft<br />
sind das nicht die <strong>moderne</strong>n, leichtgewichtigen<br />
Schnittstellen, die für langsame<br />
Verbindungen vonnöten wären. Optimal<br />
sind zustandslose Protokolle, wie JSON<br />
über eine REST Schnittstelle. So können<br />
viele Daten auch bei langsamen Verbin -<br />
dungen schnell und zuverlässig in beide<br />
Richtungen wechseln und die View mit<br />
Inhalt füllen.<br />
■<br />
[Cap] Capistrano, Utility and framework for executing commands, siehe:<br />
https://github.com/capistrano/capistrano/<br />
[Che10] D. Chelimsky, D. Astels, Z. Dennis, A. Hellesøy, B. Helmkamp, D. North, The RSpec<br />
Book: Behaviour Driven Development with RSpec, Cucumber, and Friends, The Pragmatic<br />
Programmers 2010<br />
[Fow04] M. Fowler, Inversion of Control Containers and the Dependency Injection pattern, 2004,<br />
siehe: http://martinfowler.com/articles/injection.html<br />
[Fra] Frank, siehe: http://blog.thepete.net/2010/07/frank-automated-acceptance-tests-for.html<br />
[Han10] Hanchor LLC, Introducing iOS Beta Builder, 2010, siehe:<br />
http://www.hanchorllc.com/2010/08/24/introducing-ios-beta-builder/<br />
[Inf11] InfoWorld, Review: Top Java programming tools, 2011, siehe:<br />
http://www.infoworld.com/d/developer-world/infoworld-review-top-java-programming-tools-191<br />
[JRe] JRebel, What does JRebel do?, http://www.zeroturnaround.com/jrebel/<br />
[Liv] LiveRebel siehe: http://www.zeroturnaround.com/liverebel/<br />
[Rai] Ruby on Rails Screencasts, siehe: http://railscasts.com/<br />
[Tes] Testflight, siehe: http://testflightapp.com<br />
14 15
<strong>schwerpunkt</strong><br />
mehr zum thema:<br />
http://scrumalliance.org/CSD<br />
http://www.it-agile.de/csd.html<br />
die autoren<br />
CERTIFIED SCRUM DEVELOPER:<br />
DER GANZHEITLICHE<br />
ENTWICKLER<br />
Scrum trat einst als allgemeines Projekt-Rahmenwerk an, mit dem sich nicht nur Softwareent -<br />
wicklung betreiben lässt, sondern beispielsweise auch Marketing und Projektmanagement. In<br />
der Praxis merkten viele Teams jedoch, dass es schwer ist, mit Scrum zu arbeiten, wenn man<br />
nicht auch <strong>moderne</strong> Programmierpraktiken benutzt. Diesem Umstand zollte die Scrum<br />
Alliance Tribut und führte den „Certified Scrum Developer” ein. So finden Teams noch besser zu<br />
einem runden Vorgehen nach Scrum. In diesem Artikel zeigen wir, welche Praktiken die Scrum<br />
Alliance für Softwareentwickler empfiehlt, welche Gefahren drohen, falls sie sie nicht beherrschen,<br />
und welchen Nutzen sie daraus ziehen, wenn sie sie erlernen und einsetzen.<br />
Andreas Havenstein<br />
(E-Mail: andreas.havenstein@it-agile.de)<br />
ist bei der it-agile GmbH Trainer, Senior-<br />
Softwareentwickler und Architekt. Sein<br />
Schwerpunkte sind flexible Architekturen und die<br />
Anwendungsentwicklung unter Einsatz agiler<br />
Methoden, insbesondere von XP.<br />
Als Mitte der Neunziger Jahre schwergewichtige,<br />
dokumentenlastige Prozesse den<br />
Markt dominierten, gab es eine Gruppe<br />
von Softwareentwicklern und Projekt -<br />
managern, die der Trägheit der Wasserfall-<br />
Prozesse eine leichtgewichtige Alternative<br />
entgegenstellen wollten. Kent Beck beispielsweise<br />
erkannte, dass die bis zum<br />
Maximum gesteigerte Anwendung bewährter<br />
Engineering-Praktiken in Kombination<br />
mit vielen kurzen Feedback-Schleifen ein<br />
Softwareprojekt zum Erfolg führen kann.<br />
Er fasste Entwicklungspraktiken zum<br />
eXtreme Programming (XP) zusammen<br />
und schuf und beschrieb in [Bec00] den<br />
ersten großen Vertreter dessen, was später<br />
als agile Softwareentwicklung bezeichnet<br />
wurde.<br />
Scrum entstand zu einer ähnlichen Zeit<br />
wie XP und wurde Anfang des neuen<br />
Jahrtausends bekannter, als Ken Schwaber<br />
ein erstes Buch hierzu veröffentlichte (vgl.<br />
[Sch01]). In den darauf folgenden Jahren<br />
setzte ein so großer Scrum-Boom ein, dass<br />
Marko Schulz<br />
(E-Mail: marko.schulz@it-agile.de)<br />
unterstützt Teams dabei, agile Softwareentwick -<br />
lungs praktiken umzusetzen. Neben Schulungen<br />
legt er bevorzugt selber mit Hand an und programmiert<br />
mit. Insbesondere beachtet er technische<br />
Grundlagen wie TDD und evolutionäres Design.<br />
agile Softwareentwicklung und Scrum für<br />
viele synonym wurden. Entwicklungs -<br />
praktiken, in XP noch dominierender<br />
Bestandteil, rückten in den Hintergrund.<br />
Scrum ist ein Methodenrahmen, der prinzipiell<br />
unabhängig von der Software erstel -<br />
lung angewandt werden kann und der keine<br />
Aussage darüber trifft, mit welchen<br />
Mitteln Anforderungen in Software umgesetzt<br />
werden sollen.<br />
Abb. 1: Der ganzheitliche Mensch, wie Leonardo da Vinci ihn sah.<br />
Scrum ohne Unterbau<br />
Die Erfahrung der letzten Jahre hat gezeigt,<br />
dass es vielen Scrum-Teams nicht gelingt,<br />
Sprint-Ergebnisse mit ausreichend hoher<br />
Qualität zu erstellen. Martin Fowler<br />
bezeichnete dies in [Fow09] als Flaccid<br />
Scrum und auch Ken Schwaber gestand in<br />
einem Interview ein, dass viele Entwick -<br />
lungsteams nicht ausreichend mit <strong>moderne</strong>n<br />
Entwicklungspraktiken vertraut sind<br />
(vgl. [Inf]).<br />
Auch die Scrum Alliance hat diesen Miss -<br />
stand erkannt und eine neue Zertifizierung,<br />
den Certified Scrum Developer (CSD), de -<br />
finiert. Zusätzlich zu der Kenntnis des<br />
Scrum-Prozesses muss ein CSD auch weitere<br />
technischen Fähigkeiten zur Erstellung<br />
von Software erlernen.<br />
16 17
Continuous Integration<br />
Um permanentes Feedback über den Ent wicklungsstand zu<br />
bekommen, muss ein gemeinsames Quellcode-Repository vor<strong>schwerpunkt</strong><br />
Grundsätzlicher Nutzen und Schaden von Zertifizierungen<br />
wurden unter anderem in [Col09] diskutiert, ohne dass wir es<br />
hier wiederholen wollen. Ob die CSD-Zertifizierung als<br />
Werbe-Etikett sinnvoll ist, sollte jeder für sich selbst entscheiden.<br />
Unseren Erfahrungen nach ist die mit dem CSD-<br />
Zertifikat verbundene Schu lung aber so wertvoll, dass wir<br />
sie jedem Entwickler – gerade im Scrum-Kontext – ans Herz<br />
legen.<br />
Kasten 1: Braucht die Welt eine weitere<br />
Zertifizierung?<br />
Praktiken eines<br />
Scrum-Entwicklers<br />
Insbesondere Fähigkeiten und Kenntnisse in den im Folgenden<br />
beschriebenen Be reichen sind notwendig, um als CSD im<br />
Scrum-Kontext qualitativ hochwertige Soft ware erstellen zu<br />
können.<br />
Architektur und Design<br />
Scrum erfordert flexible Strukturen, damit das Team jederzeit<br />
auf geänderte Anfor derungen reagieren kann, die der Product<br />
Owner (PO) einbringt. Ohne flexible Strukturen kommt es zu<br />
der gefürchteten steilen Aufwandskurve, bei der Änderungen<br />
und komplett neue Features mit dem Fortschritt der<br />
Entwicklung so teuer werden, dass sie schließlich nicht mehr<br />
vertretbar umzusetzen sind. Ein CSD muss Entwurfsprinzipien<br />
kennen und anwenden können, die zu entkoppelten Strukturen<br />
führen.<br />
Test Driven Development<br />
Die Grundregeln von TDD sind sehr einfach Bob Martin hat sie<br />
in [Mar] auf nur drei Gesetze heruntergebrochen:<br />
■ Schreibe keinen Produktivcode ohne einen fehlschlagenden<br />
Test.<br />
■ Schreibe nur soviel Testcode, bis du einen fehlschlagenden<br />
Test hast.<br />
■ Du darfst nur genau so viel Pro duktivcode schreiben, wie<br />
gerade notwendig ist, um den einen fehlschlagenden Test zu<br />
erfüllen.<br />
Jeder, der versucht hat, konsequent TDD zu betreiben, hat<br />
jedoch gemerkt, wie herausfordernd diese Regeln sind. So setzen<br />
viele Teams nur ansatzweise TDD um und kommen nicht<br />
dazu, sein eigentliches Potenzial auszuschöpfen. Die konsequente<br />
Anwendung von TDD-Praktiken führt zu flexiblem<br />
Design und erzeugt ein Sicher heitsnetz für Refaktorisierungen<br />
und funktionale Umstrukturierungen.<br />
handen sein. Darauf basierend müssen auto matisierte, getestete<br />
Builds mit hoher Geschwindigkeit erstellt werden können.<br />
Das ist der erste, fundamentale Schritt, um letztendlich zu<br />
Continuous Deployment (vgl. [Rie09]) zu gelangen, wie es von<br />
im mer mehr Entwicklungsteams betrieben wird.<br />
Collaboration<br />
Scrum fordert und fördert eine enge Zu sam menarbeit – sowohl<br />
innerhalb des Ent wicklerteams, als auch mit dem PO und<br />
Stakeholdern. Wie dies geschehen kann, ist jedoch nicht näher<br />
festgehalten. So kommt es im oder kurz vor dem Sprint-Review<br />
immer wieder zu Überraschungen, was implizit angenommen<br />
und nicht klar kommuniziert wurde.<br />
Ein CSD muss dagegen in der Lage sein, kommunikativ<br />
sowohl innerhalb des Teams (z. B. mit Pair-Programming) als<br />
auch mit dem Kunden (z. B. durch das Schreiben von automatisierten<br />
Akzeptanz tests) zusammenzuarbeiten.<br />
Refaktorisierung<br />
So, wie der PO erst mit der Zeit eine Vor stellung davon<br />
gewinnt, welches die wertvollsten Features einer Software sind,<br />
bekommt auch das Entwicklungsteam erst mit der Zeit eine<br />
Vorstellung davon, welches die passende Architektur ist, um<br />
diese Features bestmöglich umzusetzen.<br />
Viele Entwickler schieben die Fortent wick lung der<br />
Architektur vor sich her – und das vor allem aus zwei Gründen:<br />
■ Es fällt ihnen schwer zu entscheiden, wann eine<br />
Refaktorisierung angebracht ist.<br />
■ Es fällt ihnen schwer, einen sicheren, zügigen Weg zu einer<br />
besseren Architektur zu finden, insbesondere falls dieser<br />
den begrenzten Rahmen der in integrierten<br />
Entwicklungsumge bungen eingebauten Refaktorisierungs -<br />
möglichkeiten sprengt.<br />
Ein CSD muss wissen, wann und wie Refaktorisierungen<br />
durchgeführt werden sollen, um die Architektur zu gestalten<br />
und fortzuentwickeln.<br />
Für die Zertifizierung als CSD fordert die Scrum Alliance,<br />
dass ein Entwickler sowohl den Scrum-Prozess, als auch agile<br />
Entwicklungspraktiken kennt (vgl. [Scr]). Ein verbreiteter<br />
Weg zur CSD-Zertifizierung besteht darin, die Scrum-<br />
Grundlagen über einen CSM-Kurs und die<br />
Entwicklungspraktiken über einen AEP-Kurs (Agile<br />
Entwicklungsprak tiken) zu lernen.<br />
Alternativ zum CSM-Kurs kann ein Entwickler auch einen<br />
CSPO-Kurs (Certified Scrum Product Owner) oder eine<br />
Einführung in die Scrum-Grundlagen (SG) sowie eine zusätzliche<br />
Wahlpflichtvertiefung (WV) besuchen, wie in<br />
Abbildung 2 zu sehen ist. Viele Entwickler haben jedoch<br />
schon einen CSM-Kurs besucht, um die Scrum-Grundlagen<br />
kennenzulernen, selbst wenn sie nicht als Scrum-Master<br />
arbeiten.<br />
Kasten 2: Die CSD-Zertifizierung.<br />
1/2012
<strong>schwerpunkt</strong><br />
Abb. 2: Das CSD-Zertifizierungsschema.<br />
Der ganzheitliche Entwickler<br />
Ein CSD ist damit ein „ganzheitlicher”<br />
Entwickler. Er kennt den Scrum-Prozess<br />
und die XP-Entwicklungspraktiken und<br />
kann damit qualitativ hochwertige Sprint-<br />
Inkremente erstellen.<br />
Damit wurde für Scrum nicht wirklich<br />
etwas Neues gefunden, sondern – wie schon<br />
XP – entdeckt der CSD bereits bekannte<br />
Praktiken neu. Warum? Weil wir merken,<br />
was für große Probleme wir haben, wenn wir<br />
diese Praktiken nicht verfolgen. Und weil wir<br />
wieder merken, dass dies kein Selbstläufer ist,<br />
sondern wir uns als Entwickler mit diesen<br />
Praktiken allein und im Team immer wieder<br />
auseinandersetzen müssen.<br />
■<br />
Literatur & Links<br />
[Bec00] K. Beck, Extreme Programming Explained, Addison-Wesley 2000<br />
[Col09] J. Coldewey, J. Link, Die Ent-Zertifizierung des Fortschritts, in: OBJEKTspektrum<br />
03/2009<br />
[Fow09] M. Fowler, Flaccid Scrum, 2009, siehe: http://martinfowler.com/bliki/FlaccidScrum.html<br />
[Inf] InfoQ, Interview with Ken Schwaber – Part 3, siehe:<br />
http://www.infoq.com/news/2010/09/kenschwaber-interview-part3<br />
[Mar] B. Martin, The Three Laws of TDD, siehe:<br />
http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd<br />
[Rie09] E. Ries, Continuous deployment in 5 easy steps, 2009, siehe:<br />
http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html<br />
[Sch01] K. Schwaber, M. Beedle, Agile Software Development with Scrum, Prentice Hall 2001<br />
[Scr] Scrum Alliance, Certified Scrum Developer, siehe: http://www.scrumalliance.org/CSD<br />
18 19
<strong>schwerpunkt</strong><br />
die autoren<br />
CODE-FLAVOURS:<br />
NÜTZLICHE JAVA-IDIOME<br />
Während Anti-Pattern das negative Gegenstück zu den bekannten Design-Pattern bzw.<br />
Entwurfsmustern sind, gibt es auf niedriger Abstraktionsebene die Code-Smells als Gegensatz<br />
zu den weniger bekannten Idiomen. Wir stellen in diesem Artikel einige alt bekannte und auch<br />
neue Java-Idiome vor. Denn man verbessert sich und lernt besser durch positive statt durch<br />
negative Beispiele.<br />
In der Begriffswelt der Softwaretechnik<br />
begegnen einem Design-Pattern, Anti-<br />
Pattern sowie Code-Smells und Idiome in<br />
vielen Zusammenhängen. Die genaue<br />
Bedeutung der Begriffe ist oft aber nicht<br />
explizit erklärt oder wird einfach vorausgesetzt.<br />
Dabei sind die Definitionen keineswegs<br />
einfach oder eindeutig.<br />
Pattern und Anti-Pattern<br />
Nachdem sich Entwurfsmuster (Design<br />
Pattern, vgl. [Gam96]) als nützliche<br />
Lösungen für wiederkehrende Probleme in<br />
der objektorientierten Softwareentwick -<br />
lung etabliert haben, wurden bald darauf<br />
ihre negativen Gegenstücke, die Anti-<br />
Pattern (vgl. [Bro07]), beschrieben. Anti-<br />
Pattern schildern schlechte Lösungen und<br />
Beispiele, wie sie oft in der Praxis anzutreffen<br />
sind. Im Gegensatz zu den Entwurfs -<br />
mustern bezieht sich der Begriff Anti-<br />
Pattern nicht nur auf den Entwurf<br />
ob jekt orientierter Software, sondern auch<br />
Abb. 1: Sprachspezifität vs. Abstraktion.<br />
auf Architektur-, Prozess- und Mana -<br />
gement probleme.<br />
Idiome und Code-Smells<br />
Neben den Anti-Pattern gab es auch deren<br />
„kleine Brüder”, die Code-Smells (vgl.<br />
[Fow01]). Diese „schlechten Gerüche”<br />
beschreiben schlechten Stil oder ungünstige<br />
Lösungen auf der Ebene weniger oder zum<br />
Teil nur einer Codezeile (Beispiel: „Magic<br />
Number”). Das Gegenstück sind die<br />
Idiome (vgl. [Wik-a]), die zwar für „echte”<br />
Entwurfsmuster zu klein sind bzw. sich auf<br />
einer zu niedrigen Abstraktionsebene befinden,<br />
aber dennoch in vielen Kontexten einsetzbar<br />
sind.<br />
Zielsetzung und Abgrenzung<br />
Genau wie die Entwurfsmuster passen<br />
Idiome nicht immer. Und eine übertriebene<br />
oder erzwungene Anwendung verwirrt<br />
eher, als dass sie hilft. Der Hintergrund der<br />
André Janus<br />
(E-Mail: mail@andre-janus.de)<br />
ist freiberuflicher Software Engineer/Consultant<br />
und Doktorand der AG Softwaretechnik an der Uni<br />
Magdeburg. Er beschäftigt sich mit Systeminte -<br />
gration, Web-Anwendungen auf Basis von Java-<br />
Technologien und Qualitätssicherung im Kontext<br />
agiler Softwareentwicklung.<br />
Jens Jäger<br />
(E-Mail: mail@jensjaeger.com)<br />
ist freiberuflicher Software-Engineer. Er beschäftige<br />
sich mit agiler Softwareentwicklung und<br />
Usability sowie der Analyse, Modellierung und<br />
Implementierung komplexer datenbankgestützter<br />
Systeme mit den Technologien JavaEE und Ruby on<br />
Rails.<br />
Pattern und Idiome ist es nämlich nicht nur,<br />
gelungene Lösungen wiederzuverwenden,<br />
sondern auch Strukturen zu schaffen, die<br />
für alle am Code schreibenden Entwickler<br />
zu verstehen sind – und damit eine Basis für<br />
Architektur- und Design-Diskussionen zu<br />
schaffen.<br />
Die Grenze zwischen Entwurfsmuster<br />
und Idiom ist zudem nicht eindeutig zu ziehen.<br />
In der Regel sind Idiome sprachspezifisch<br />
(vgl. [Idi]), weswegen wir in diesem<br />
Artikel von „Java-Idiomen” sprechen. Es<br />
gibt sogar Java-EE-Pattern (vgl. [Ora10]),<br />
die noch spezifischer nur für die Java-EE-<br />
Plattform gelten. Die Code-Smells andererseits<br />
werden wieder als sprachunabhängig<br />
angesehen. Die Terminologie im Bereich<br />
Pattern und Idiome ist also alles andere als<br />
eindeutig. Wir haben daher versucht, die<br />
Situation in Abbildung 1 anschaulich darzustellen.<br />
Nützliche Java-Idiome<br />
Im Folgenden werden wir auf einige be -<br />
kannte Java-Idiome eingehen, aber auch<br />
20 21
<strong>schwerpunkt</strong><br />
public class Singleton<br />
{<br />
/**<br />
* Privater Konstruktor verhindert externe Instanzierung<br />
*/<br />
private Singleton()<br />
{<br />
}<br />
/**<br />
* Innere statische Holder-Klasse<br />
*/<br />
private static class Holder<br />
{<br />
private static final Singleton INSTANCE = new Singleton();<br />
private Holder()<br />
{<br />
}<br />
}<br />
/**<br />
* Statische Factory-Methode<br />
*/<br />
public static Singleton getInstance()<br />
{<br />
return Holder.INSTANCE;<br />
}<br />
}<br />
Listing 1: Singleton-Implementierung mit<br />
dem Holder-Idiom.<br />
eher unbekanntere „Code Flavours” vorstellen.<br />
Quellen für Idiome gibt es im Web<br />
viele, besonders umfangreich ist beispielsweise<br />
[Jav], neu und innovativ, aber auch<br />
streitbar ist aus unserer Sicht etwa [Cod].<br />
Holder-Idiom<br />
Das Holder-Idiom – auch Holder Pattern<br />
genannt – dient der thread-sicheren Imple -<br />
mentierung von Singletons in Java. Das<br />
Singleton-Pattern (vgl. [Gam96]) ist eines<br />
der bekanntesten Entwurfsmuster. Es wird<br />
verwendet, wenn nur eine Instanz einer<br />
Klasse existieren darf. Singletons haben bei<br />
falscher Verwendung einige Nachteile. Sie<br />
ermöglichen z. B. die Verwendung als globale<br />
Variable, um prozedural statt objektorientiert<br />
zu programmieren. Unter anderem<br />
sind Singletons nur schwer zu testen. Das<br />
Entwurfsmuster Singleton sollte also nur<br />
sehr sparsam verwendet werden. In<br />
Legacy-Code wird man jedoch sehr wahrscheinlich<br />
auf einige Singletons treffen, die<br />
im schlimmsten Fall nicht thread-sicher<br />
implementiert sind.<br />
Das Holder Idiom (vgl. [Jen]) gewährleis -<br />
tet die Thread-Sicherheit durch die<br />
Verwendung einer inneren statischen Klasse.<br />
Die Initialisierungsphase einer Klasse ist<br />
durch die Java Language Specification (vgl.<br />
[Sun]) garantiert nicht nebenläufig. Ein weiterer<br />
Vorteil ist, dass die Initialisierung erst so<br />
spät wie möglich – bei der ersten<br />
Verwendung – stattfindet (siehe Listing 1).<br />
Localized-Instance-Idiom<br />
Das Localized-Instance-Idiom eignet sich<br />
zum dynamischen Verwenden länderspezifischer<br />
Klassen – daher wird es auch<br />
Localized Class genannt. Auch in Zeiten<br />
von Dependency Injection (DI) und<br />
Inversion of Control gibt es sinnvolle<br />
Anwendungen für dieses Idiom, gerade<br />
wenn in älteren Anwendungen keine DI-<br />
Frameworks zur Verfügung stehen oder<br />
deren Einsatz aus irgendwelchen Gründen<br />
nicht möglich ist.<br />
Zu einer Basisklasse MyBusinessClass exis -<br />
tieren auch länderspezifische Varianten,<br />
wie z. B. MyBusinessClass_DE oder<br />
MyBusinessClass_US, die von der Basisklasse<br />
erben und Methoden mit länderspezifischer<br />
Logik überschreiben. In der Basisklasse findet<br />
sich eine Methode, die automatisch die<br />
jeweilige Klasse instanziiert und – in dieser<br />
Variante des Idioms – als Fallback ein<br />
Objekt der Basisklasse zurückgibt. Die<br />
Vorteile liegen auf der Hand: Länder -<br />
spezifische Logiken können voneinander<br />
getrennt implementiert werden – gleichzeitig<br />
kann der Aufruf der entsprechenden<br />
Logik völlig transparent und einheitlich<br />
erfolgen. Beim Aufruf muss man nicht einmal<br />
wissen, ob es eine länderspezifische<br />
Logik gibt (siehe Listing 2).<br />
Dieses Idiom ist relativ komplex und<br />
kann auch schon zu den Entwurfsmustern<br />
gezählt werden. Dennoch ist es sprachspezifisch<br />
(und damit ein Idiom), da das<br />
Instanziieren der Klasse so nicht in allen<br />
Sprachen möglich ist.<br />
Transfer-Container<br />
Aktuelle Anwendungen stehen nicht allein<br />
im luftleeren Raum – heutzutage ist es<br />
üblich, verschiedene Systeme über unterschiedliche<br />
Schnittstellen zu verbinden. Die<br />
genaue technische Umsetzung kann durch<br />
Web-Services (SOAP, REST) oder mit<br />
Message Queueing (z. B. mit „MQSeries”)<br />
public class MyBusinessClass<br />
{<br />
protected MyBusinessClass()<br />
{<br />
}<br />
public static MyBusinessClass localizedInstance()<br />
{<br />
Class< ? > myClass = MyBusinessClass.class;<br />
String context = … // get context from somewhere, for<br />
example "DE”<br />
String myClassName = myClass.getName() + context;<br />
Class< ? > myLocalizedClass;<br />
try<br />
{<br />
myLocalizedClass = Class.forName(myClassName);<br />
}<br />
catch (ClassNotFoundException e)<br />
{<br />
myLocalizedClass = myClass;<br />
}<br />
MyBusinessClass myInstance;<br />
try<br />
{<br />
myInstance = (MyBusinessClass)<br />
myLocalizedClass.newInstance();<br />
}<br />
catch (InstantiationException e)<br />
{<br />
myInstance = new MyBusinessClass ();<br />
} catch (IllegalAccessException e)<br />
{<br />
myInstance = new MyBusinessClass ();<br />
}<br />
return myInstance;<br />
}<br />
public doBusinessLogic()<br />
{<br />
// implement the standard behaviour here<br />
}<br />
}<br />
public class MyBusinessClass_DE extends MyBusinessClass<br />
{<br />
@Override<br />
public doBusinessLogic()<br />
{<br />
// implement the country-specific behaviour here<br />
}<br />
}<br />
// usage of localized instances<br />
MyBusinessClass.localizedInstance().doBusinessLogic();<br />
Listing 2: Basis-Implementierung des<br />
Localized-Instance-Idioms.<br />
1/2012
<strong>schwerpunkt</strong><br />
public class TransferContainer()<br />
{<br />
private Status status;<br />
private Object buisnessObject;<br />
public enum Status { OK,<br />
NOT_SUPPORTED_IN_THIS_COUNTRY }<br />
…<br />
}<br />
StringBuilder sql = new StringBuilder();<br />
sql.append("SELECT *");<br />
sql.append(" FROM table1");<br />
sql.append(" WHERE column1 = "value"");<br />
sql.append(" AND column2 = "uelav"");<br />
Listing 4: Mit StringBuilder-<br />
Concatenation in Java eingebettetes SQL.<br />
final Bar bar;<br />
public void doCalulation(final Foo foo)<br />
{<br />
bar = calculate(foo);<br />
}<br />
Listing 5: Finale Variablen als lokale<br />
Variable und als Methoden-Parameter.<br />
Listing 3: Einfaches Beispiel für einen<br />
Transfer-Container.<br />
Enum Business Constants<br />
In fast jedem Projekt, das fachliche Pro -<br />
zesse abbildet, gibt es Konstanten für vererfolgen.<br />
Die entsprechenden Bibliotheken<br />
abstrahieren die Transportschicht und sorgen<br />
für eine Fehlerbehandlung bei Kom -<br />
muni kationsfehlern.<br />
Es gibt jedoch zahlreiche Anwendungs -<br />
fälle, bei denen eine Fehlerbehandlung nicht<br />
sinnvoll in der Transportschicht abgehandelt<br />
werden kann. Beispielsweise sei ein System<br />
genannt, das für mehrere Länder in<br />
Produktion ist, aber bestimmte Schnitt -<br />
stellen nicht in allen Ländern zur Verfügung<br />
stellt. Hier ist es sinnvoll, nach dem Vorbild<br />
der Internet-Protokolle (vgl. [Int91]) eine<br />
weitere Schicht zwischen Transportschicht<br />
und fachlicher Logik einzuziehen: den<br />
Transfer-Container. Im einfachsten Fall ist<br />
dieser ein „Umschlag” um das fachliche<br />
Objekt mit einer Variable, die den<br />
Rückgabestatus enthält (siehe Listing 3).<br />
Der Transfer-Container sorgt für eine<br />
Separation of Concerns, indem Dinge, die<br />
nicht wirklich technisch sind, aber auch<br />
nicht in ein fachliches Objekt gehören, klar<br />
gekapselt sind. Je nach Implementierung<br />
bekommt der Aufrufer des Transfer-<br />
Containers eine genaue Rückmeldung, was<br />
eigentlich passiert, statt eines wenig aussagekräftigen<br />
http-500-Fehlers (Internal<br />
Server Error).<br />
StringBuilder-Concatenation<br />
Da es in Java nicht, wie in JRuby, die so<br />
genannten Multiline Strings gibt und<br />
zudem ältere Versionen des Java-Compilers<br />
beim Konkatenieren von Strings jedes Mal<br />
ein neues String-Objekt erzeugen, werden<br />
in Java oft StringBuilder als Notlösung verwendet.<br />
Diese werden benutzt, um größere<br />
Strings – z. B. eingebettetes SQL für JDBC<br />
oder JavaScript – zusammenzusetzen und<br />
dabei trotzdem noch die Lesbarkeit zu<br />
erhalten. Auch wenn es sich hier um ein<br />
recht naives Idiom handelt, ist die Lösung<br />
dennoch häufig anzutreffen und sowohl<br />
hilfreich als auch übersichtlich (siehe<br />
Listing 4).<br />
Bei der StringBuilder-Concatenation<br />
handelt es sich eindeutig um ein Idiom, da<br />
es sowohl zu klein für ein Entwurfsmuster<br />
als auch zu spezifisch für die Sprache Java<br />
ist. Auch wenn <strong>moderne</strong>re Compiler den +-<br />
Operator wie beispielsweise in Java 1.4<br />
durch den StringBuffer und seit Java 5 durch<br />
den StringBuilder ersetzen, gibt es dennoch<br />
Fälle, in denen die automatische Umset -<br />
zung nicht optimal ist (vgl. [Cap11]).<br />
Außerdem kann man durch eine manuelles<br />
Verwenden des StringBuilder zum Beispiel<br />
SQL gut lesbar im Java-Code einbetten.<br />
Finale Variablen<br />
Alle lokalen Variablen und Variablen in der<br />
Parameterliste einer Methode sollten mit<br />
dem Schlüsselwort final versehen sein. Zur<br />
Erinnerung: Finale Variablen können nur<br />
einmalig initialisiert werden. Die Initia li -<br />
sierung muss nicht mit der Deklaration<br />
erfolgen (siehe Listing 5).<br />
Auf den ersten Blick sieht es etwas ungewohnt<br />
aus, jede Variable mit final zu versehen.<br />
Es führt jedoch zu weniger Fehlern und<br />
erzwingt einen sauberen Program mierstil.<br />
Wenn eine Variable ein zweites Mal beschrieben<br />
wird, ist dies eine Mehrfachverwendung,<br />
die man eigentlich vermeiden sollte (vgl.<br />
[Mar08]). Code analyse-Tools, wie<br />
„Findbugs” (vgl. [Sou-a]) oder „PMD” (vgl.<br />
[Sou-b]), werten dies daher auch als Fehler.<br />
Mit dem Schlüssel wort final kann man so mit<br />
Mitteln der Sprache Java logische Fehler und<br />
Schreib fehler effektiv verhindern, die im<br />
Zweifel erst durch Codeanalyse-Werkzeuge<br />
und im schlechtesten Fall gar nicht gefunden<br />
würden.<br />
schiedenste Dinge. Sobald jedoch mehr als<br />
eine Konstante des gleichen fachlichen Typs<br />
existiert, sollten Enums bevorzugt werden.<br />
Dadurch ist der fachliche Kontext zusam -<br />
mengehörender Werte im Code abgebildet.<br />
Da Enum-Typen wie vollwertige Klassen<br />
behandelt werden, können sie beliebig<br />
komplex entworfen werden (vgl. [Kra06]).<br />
Dies kann man sich geschickt zu Nutze<br />
machen, um Geschäftslogik abzubilden<br />
(siehe Listing 6). In dem Beispiel werden<br />
drei Fabriken angelegt und für jede Fabrik<br />
werden die dort hergestellten Produkte im<br />
Konstruktor übergeben. Somit ist für jeden<br />
Programmierer sofort klar, welche Pro -<br />
dukte aus welcher Fabrik kommen.<br />
Das Enum-Business-Constants-Idiom<br />
hilft, Logik an einer Stelle zu halten, und<br />
vereinfacht so den Code und hilft Fehler zu<br />
vermeiden.<br />
Fazit<br />
Durch Code-Flavours bzw. Idiome können<br />
allgemein bekannte und gute Lösungen<br />
wiederverwendet werden. Code-Flavours<br />
machen den Code damit lesbar und wartbar.<br />
Entwickler haben Begriffe, die die<br />
Struktur des Codes beschreiben und damit<br />
Design-Diskussionen vereinfachen.<br />
Da aber die Abstraktionsebene niedriger<br />
und die Lösungen (sprach-)spezifischer<br />
sind als bei den Pattern, ist die Gefahr auch<br />
größer, hier durch ein Over-Engineering,<br />
also das übertriebene oder falsche Nutzen<br />
der Idiome, den Code komplexer zu<br />
machen als notwendig. Außerdem sind einzelne<br />
Pattern und Idiome durchaus umstritten:<br />
So gilt Singleton in Zeiten von DI vielen<br />
als Anti-Pattern. Und auch der<br />
StringBuilder wird von vielen nicht<br />
genutzt, da der Compiler dies in den meis -<br />
ten Fällen erledigt. Auch andere Idiome<br />
und Pattern – gerade solche, die wir hier<br />
vorgestellt haben – finden sicher nicht bei<br />
22 23
<strong>schwerpunkt</strong><br />
public enum Factory<br />
{<br />
STUTTGART, NEW_YORK(Product.P2, Product.P3), TOKIO;<br />
private final Product[] products;<br />
Factory(Product … products)<br />
{<br />
this.products = products;<br />
}<br />
public Product[] getProducts()<br />
{<br />
return this.products;<br />
}<br />
}<br />
Listing 6: Fabrik-Beispiel für Enum-<br />
Business-Constants.<br />
allen Gefallen. Wir freuen uns daher über<br />
kritisches Feedback – natürlich auch über<br />
positives.<br />
Trotz aller Kritik sind Code-Flavours<br />
eine gute Wahl, um die Entwicklung von<br />
Software und deren Qualität weiter zu verbessern.<br />
Für bestimmte Probleme in<br />
bestimmten Kontexten stellen sie genau die<br />
richtige Lösung dar. Daher sollten angehende<br />
Entwickler, auch im Sinne eines besseren<br />
Lernens, eher die guten Beispiele als<br />
die schlechten Beispiele kennen und verstehen.<br />
■<br />
Literatur & Links<br />
[Bro07] W.J. Brown, R.C. Malveau, H.W. McCormick III, T.J. Mowbray, Anti Patterns:<br />
Entwurfsfehler erkennen und vermeiden, mitp 2007<br />
[Cap11] M. Caprari, Java bytecode, string concatenation and StringBuilder, 2011, siehe:<br />
http://caprazzi.net/posts/java-bytecode-string-concatenation-and-stringbuilder/<br />
[Cod] Code Monkeyism, siehe: http://codemonkeyism.com/generation-java-programming-style/<br />
[Fow01] M. Fowler, K. Beck, J. Brant, W. Opdyke, Refactoring, Improving the Design of Existing<br />
Code, Addison-Wesley 2001<br />
[Gam96] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Entwurfsmuster: Elemente wieder verwendbarer<br />
objektorientierter Software, Addison-Wesley 1996<br />
[Idi] Idiom or Pattern, siehe: http://c2.com/ppr/wiki/JavaIdioms/IdiomOrPattern.html<br />
[Int91] Internet Protocol, 1991, siehe: http://tools.ietf.org/html/rfc791<br />
[Jav] Java Idioms, siehe: http://c2.com/ppr/wiki/JavaIdioms/JavaIdioms.html<br />
[Jen] jensjaeger.com, Singletons in Java mit dem Holder-Pattern, siehe:<br />
http://www.jensjaeger.com/2010/04/singletons-in-java-mit-dem-holder-pattern<br />
[Kra06] K. Kreft, A. Langer, Effective Java: Neue Sprachmittel für Java 5.0 - Teil 1: Einführung<br />
in Aufzählungstypen, in:JavaSpektrum 6/2006<br />
[Mar08] R.C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall<br />
2008<br />
[Ora10] Oracle, Java EE Pattern, 2010, siehe: http://java.sun.com/developer/technicalArticles/J2EE/patterns/<br />
[Sou-a] Sourceforge.net, Find Bugs in Java Programs, siehe: http://findbugs.sourceforge.net/<br />
[Sou-b] Sourceforge.net, PMD, siehe: http://pmd.sourceforge.net/<br />
[Sun] Sun, Java Language Specification, Kap. 12.4, siehe:<br />
http://java.sun.com/docs/books/jls/third_edition/html/execution.html#44557<br />
[Wik-a] Wikipedia, Idiom, siehe: http://de.wikipedia.org/wiki/Idiom_%28Softwaretechnik%29<br />
1/2012
Vorteile von DI<br />
DI weist eine ganze Reihe von Vorteilen auf:<br />
Die Softwarestruktur wird verbessert.<br />
Der Bestellservice weiß nicht mehr, welche<br />
Klasse die Kundenverwaltung konkret<br />
implementiert. Natürlich muss er noch die<br />
Schnittstelle kennen, aber mehr nicht.<br />
Dadurch werden die Abhängigkeiten der<br />
einzelnen Objekte reduziert. Ohne DI können<br />
die Objekte zum Beispiel Factories nut<strong>schwerpunkt</strong><br />
der autor<br />
DI UND AOP:<br />
EINE BILANZ<br />
„Dependency Injection” (DI) und Aspektorientierte Programmierung (AOP) sind seit Jahren<br />
wesentliche Grundlage für Enterprise-Java-Anwendungen im Java-EE- und Spring-Umfeld. Es ist<br />
an der Zeit, Bilanz zu ziehen, den bisherigen Erfolg in der Praxis und die Vorteile dieser Ansätze<br />
darzustellen und einen Blick in die Zukunft beider Technologien zu wagen.<br />
Normalerweise muss jedes Objekt in einem<br />
System sich die anderen Objekte, deren<br />
Methoden es aufrufen will, zusammensuchen.<br />
Bei Dependency Injection (DI) werden<br />
die Objekte von außen zugewiesen,<br />
also, metaphorisch gesprochen, „injiziert”.<br />
Neben der Zuweisung der abhängigen<br />
Objekte werden diese Objekte meistens<br />
auch erzeugt. Daher gehört DI zur<br />
Kategorie der Ent wurfs muster, die sich um<br />
das Erzeugen von Objekten kümmern, wie<br />
z. B. Factory Method, Singleton oder<br />
Abstract Factory (vgl. [Gam94]). Ähnlich<br />
wie DI beschreiben diese Patterns nicht nur,<br />
wie die Objekte erzeugt werden, sondern<br />
auch, wie auf sie zugegriffen werden kann.<br />
So gibt es beim Singleton meistens eine<br />
Methode, die Zugriff auf die einzige<br />
Instanz gewährt. Im Extremfall muss das<br />
Objekt noch nicht einmal erzeugt werden,<br />
sondern es kann bereits vorhanden sein.<br />
DI hat hier aber eine andere Vorgehens -<br />
weise als Singleton oder Factory Method<br />
entsprechend der Inversion of Control: Der<br />
eigene Code sucht sich keine Objekte<br />
zusammen und erzeugt auch keine, sondern<br />
sie werden von außen in den Code injiziert.<br />
Nehmen wir als Beispiel einen Service für<br />
die Verarbeitung von Bestellungen: Dieser<br />
bekommt abhängige Objekte, wie z. B. die<br />
Kundenverwaltung, „injiziert”. Konkret:<br />
Eine Set-Methode wird aufgerufen oder der<br />
Service wird dem Konstruktor als Para -<br />
meter übergeben. Um dies zu erreichen,<br />
kann der Entwickler selbst Code schreiben<br />
– dieser wird jedoch schnell unübersichtlich,<br />
sodass sich in der Praxis DI-Container<br />
wie Spring oder Java EE durchgesetzt<br />
haben.<br />
zen, um Abhängigkeiten aufzulösen. Ins -<br />
besondere dieses Vorgehen führt zu<br />
Problemen in der Architektur: Jedes Objekt<br />
nutzt die Factory, die wiederum jedes<br />
Objekt erzeugen kann (siehe Abbildung 1).<br />
Also hängt jedes Objekt über die Factory<br />
von jedem anderen Objekt im System ab.<br />
Möglichst wenige Abhängigkeiten sind<br />
aber Voraussetzung für die leichte Änderbarkeit<br />
von Software. Mit DI hängt jedes<br />
Objekt nur von den genutzten Schnittstel -<br />
len ab. Die Implementierung der Schnitt -<br />
stelle ist nur dem DI-Container bekannt, zu<br />
dem die Objekte aber keine Abhängigkeit<br />
haben. (siehe Abbildung 2)<br />
Das Testen wird vereinfacht. Dem<br />
Bestell service kann sehr einfach eine<br />
Kundenverwaltung injiziert werden, die<br />
immer einen bestimmten Kunden zurück -<br />
gibt, der zum Testen eines bestimmten<br />
Szenarios nützlich ist. Dieser Ansatz ist für<br />
Unit-Tests sinnvoll. Dabei wird eine einzelne<br />
Klasse getestet und alle abhängigen<br />
Objekte werden durch entsprechende einfachere<br />
Versionen (so genannte Mocks oder<br />
Stubs) ersetzt, die entsprechende konstante<br />
Testdaten zurückliefern. Durch DI kann<br />
man solche Mocks oder Stubs sehr einfach<br />
Eberhard Wolff<br />
(E-Mail: eberhard.wolff@adesso.de)<br />
arbeitet als Architektur- und Technologie-Manager<br />
für die adesso AG in Berlin. Er wurde von Oracle in<br />
die Gruppe der Java-Champions aufgenommen, ist<br />
Autor einiger Fachbücher und spricht regelmäßiger<br />
auf verschiedenen Konferenzen.<br />
injizieren: Man erzeugt das zu testende<br />
Objekt, ohne den sonst üblichen DI-<br />
Mecha nismus zu nutzen. Dann injiziert<br />
man die entsprechenden Mocks oder Stubs.<br />
Oft wird die Konfigurierbarkeit der<br />
Kompo nenten als weiterer Vorteil von DI<br />
übersehen. Neben abhängigen Objekten<br />
wie der Kundenverwaltung können für den<br />
Bestellservice auch Einstellungen wie der<br />
Mindestbestellwert durch DI konfiguriert<br />
werden. Bei Spring beispielsweise können<br />
Einstellungen aus Properties-Dateien oder<br />
System-Properties genutzt werden und<br />
natürlich ist der Mechanismus auch<br />
erweiterbar, sodass Einstellungen aus praktisch<br />
jeder Quelle ausgelesen werden können.<br />
Das ist von Vorteil, weil so Fehler –<br />
wie nicht vorhandene Konfigurations -<br />
einstellungen oder Konfigurationsdateien –<br />
durch den DI-Container behandelt werden.<br />
Das reduziert den rein technischen<br />
Infrastruktur-Code in den Anwendungen.<br />
Auf den ersten Blick ist DI eine Erfolgs -<br />
geschichte: Ursprünglich in Spring und<br />
Abb. 1: Ohne DI nutzen Services häufig Factories, um Referenzen auf andere Services<br />
zu erzeugen. So entsteht eine Struktur, in der jeder Service die Factory kennt und die<br />
Factory dann jeden Service. Letztendlich hängt das gesamte System voneinander ab,<br />
was Wiederverwendbarkeit behindert und ein Zeichen für eine schlechte Architektur ist.<br />
24 25
<strong>schwerpunkt</strong><br />
Abb. 2: Mit DI werden die Services durch den DI-Container erzeugt. Dadurch haben<br />
sie weniger Abhängigkeiten und können leicht in einem anderen Kontext eingesetzt<br />
werden oder für Tests mit anderen Abhängigkeiten versehen werden.<br />
anderen Projekten, wie z. B. „PicoCon -<br />
tainer” (vgl. [Pic]), implementiert, hat es<br />
über EJB 3.0, JSR 299 (CDI) und JSR 330<br />
Einzug in Java EE gefunden und mittlerweile<br />
kommt keine Java-EE-Anwendung<br />
mehr ohne diesen Ansatz aus. Dadurch<br />
sollte sich zumindest die Strukturver bes -<br />
serung tatsächlich auch in den meisten<br />
Projekten manifestiert haben. Bei den anderen<br />
beiden Punkten ist ein solcher Opti -<br />
mismus nicht angebracht:<br />
DI vereinfacht, wie bereits dargestellt,<br />
Unit-Tests. Neben diesen Tests bieten DI-<br />
Container wie Spring oder EJB 3.1 als<br />
Alternative die Flexibilität, auch außerhalb<br />
eines Applikationsservers komplexe Infra -<br />
strukturen zu starten. Dort können die echten<br />
Implementierungen des Kundenservice<br />
mit allen abhängigen Objekten ablaufen,<br />
um damit Tests durchzuführen. Diese Tests<br />
decken Fehler im Zusammenspiel der<br />
Komponenten auf, zählen also zu den<br />
Integrationstests. Vorteil der DI bei<br />
Integrationstests ist die Flexi bilität, den<br />
Code in unterschiedlichen Umgebungen<br />
laufen zu lassen, also auch außerhalb eines<br />
Applikationsservers. Die zunehmende<br />
Popularität von Tools wie „Arquilian” (vgl.<br />
[JBo-a]) zeigt aber, dass Tests in<br />
Applikationsservern zunehmend genutzt<br />
werden. Die Vorteile von DI werden also<br />
nur teilweise realisiert.<br />
Die Konfiguration von Objekten ist leider<br />
nicht bei allen DI-Containern gegeben.<br />
Abb. 3: Mit AOP wird die Logik für die Behandlung der Transaktionen zentral implementiert<br />
und dann an die passenden Stellen in der Geschäftslogik integriert.<br />
Viele Projekte laden immer noch ihre<br />
Konfigurationen selbst – mit manchmal<br />
erheblichen Aufwand und nicht immer fehlerfrei.<br />
Hier werden die Möglichkeiten der<br />
DI-Lösungen immer noch zu wenig<br />
genutzt.<br />
Lange wurde gegen DI auch ins Feld<br />
geführt, dass DI „Programmierung in<br />
XML” sei. Durch die Möglichkeit zur<br />
Nutzung von Java-Annotationen hat sich<br />
dieses Problem mittlerweile erledigt. Aber<br />
die Annotation haben auch Nachteile:<br />
Änderungen an der Konfiguration können<br />
oft nur durch Änderungen im Programm -<br />
code erreicht werden. Das bedeutet auch<br />
ein erneutes Kompilieren und Installieren<br />
der Anwendung. Bei XML reichen eine<br />
Änderung an einer Konfigurationsdatei<br />
und ein Neustart. Dadurch sind die<br />
Systeme mit XML flexibler anpassbar.<br />
Wie sieht die Nutzung von DI in neuen<br />
Sprachen aus? Für DI in Scala wird das<br />
Cake Pattern (vgl. [Ode08]) empfohlen.<br />
Dieses beschreibt die Umsetzung von DI in<br />
Scala mit bestimmten Codestrukturen.<br />
Beim Scala-Framework „Lift” sind die<br />
Konfiguration und die benötigten<br />
Abhängigkeiten der Objekte vollständig im<br />
Code implementiert. Dieser Ansatz benötigt<br />
sehr viel (siehe oben). Trotz der<br />
Unterstützung von DI in Lift nannte der<br />
Entwickler des Frameworks Dave Pollack<br />
den größten Teil von DI einen „load of horse<br />
poop” (vgl. [Osd]). Vielleicht baut Lift<br />
deswegen nicht auf den Erfahrungen der<br />
etablierten DI-Frameworks auf. Zusam -<br />
men fassend kann man sagen, dass sich DI<br />
mittlerweile in den Frameworks und in der<br />
Infrastruktur etabliert hat, auch wenn nicht<br />
der volle Wert dieser Ansätze genutzt wird.<br />
Aspektorientierte<br />
Programmierung<br />
Ideen zur Aspektorientierten Program -<br />
mierung (AOP) lassen sich bis in die 1990er<br />
Jahre zurückverfolgen. Der Aspekt wird in<br />
den eigentlichen Code „eingewebt”, um<br />
dadurch so genannte Cross Cutting<br />
Concerns zentral an einer Stelle zu implementieren<br />
(siehe Abbildung 3), statt dies<br />
ständig im Code zu tun (siehe Abbildung 4).<br />
Eine zentrale Implementierung von einigen<br />
speziellen Cross Cutting Concern – wie<br />
Sicherheit und Transaktionen in Enterprise-<br />
Anwendungen – wurde bereits in EJB 1.0<br />
angeboten. EJB enthielt damals aber kein<br />
AOP-System, mit dem ein Entwickler ähnliche<br />
Erweiterungen implementieren könnte.<br />
Um eine solche Basis zu schaffen, wurde<br />
1/2012
<strong>schwerpunkt</strong><br />
Abb. 4: Ohne AOP muss in jedem<br />
Service in jeder Methode Code – zum<br />
Beispiel für die Behandlung von<br />
Transaktionen – geschrieben werden.<br />
AOP plötzlich interessant und es entstanden<br />
Projekte wie das mäßig erfolgreiche JBoss<br />
AOP (vgl. [JBo-b]) oder Spring mit der AOP-<br />
Unterstützung. Spring AOP führte später<br />
eine Kompatibilität mit AspectJ ein.<br />
Dadurch hatten Entwickler ein sehr<br />
mächtiges Werkzeug, um selbst Erwei -<br />
terungen analog zu Transaktionen und<br />
Sicherheit zu implementieren. Spring bietet<br />
auch einige Aspekte an, die über<br />
Transaktionen und Sicherheit hinaus<br />
gehen. Aber AOP hatte dann irgendwann<br />
den Ruf, komplex zu sein, vielleicht, weil<br />
der Entwickler eine neue Sprache für die<br />
Definition der Stellen im Code lernen muss -<br />
te, an denen die Aspekte ansetzen sollen:<br />
die Pointcut Expressions. Ein typischer<br />
Entwickler nutzt diese Sprache nicht sehr<br />
häufig, was das Erlernen nicht erleichtert.<br />
Eine andere Befürchtung ist oft, dass der<br />
Code an irgendwelchen Stellen erweitert<br />
wird und so die Entwickler den Überblick<br />
verlieren, was wo passiert. Wenn aber technische<br />
Dienste, wie die Behandlung von<br />
Exceptions durch AOP, getrennt von der<br />
Hauptlogik implementiert werden, sind die<br />
Aufgaben klar getrennt – wie das bei anderen<br />
technischen Services auch der Fall ist.<br />
Durch die konsequente Nutzung von<br />
AOP können also viele Anwendungen vereinfacht<br />
und viele technische Elemente zentral<br />
implementiert werden. Diese Möglich -<br />
keiten werden bei Spring leider nur selten<br />
genutzt. In der Java-EE-Welt hat sich inzwischen<br />
ein Ansatz etabliert, in dem nur<br />
Interceptoren implementiert werden und<br />
keine vollständige Sprache für Pointcuts<br />
wie in der Spring/AspectJ-Welt.<br />
Noch ein Blick auf neuere Sprache: Scala<br />
unterstützt AOP gar nicht. Es ist allerdings<br />
möglich, einzelne Methoden mit Trans -<br />
aktionen oder Sicherheitsabfragen zu versehen.<br />
Dafür nutzt man Funktionen, denen<br />
man die ursprüngliche Methode übergibt.<br />
Die Funktion führt dann vor und nach der<br />
Methode Logik für Transaktionen oder<br />
Sicherheit aus. Dazu nutzt man das Scala-<br />
Literatur & Links<br />
Feature der Higher Order Functions. Das<br />
sind Funktionen, die selber Funktionen bzw.<br />
Methoden als Parameter akzeptieren. Mit<br />
Scala ist es aber nicht möglich, alle<br />
Methoden einer Klasse oder gar aller Klas -<br />
sen mit einer bestimmten Annotation mit<br />
solcher Funktionalität auszustatten. Das ist<br />
erstaunlich, denn ein solches Feature ist für<br />
Enterprise-Anwendungen sehr hilfreich. Bei<br />
dynamischen Sprachen wie Groovy sind im<br />
Gegensatz zu Scala ähnliche Features durch<br />
Meta-Progamming elegant implementierbar.<br />
Fazit<br />
Bei AOP nutzt Java EE einfachere, aber<br />
auch weit weniger mächtige Ansätze. Die<br />
vollständige Mächtigkeit von AOP wird<br />
nur in wenigen Projekten realisiert. Bei DI<br />
ist die Situation besser, aber sicher gibt es<br />
auch dort Optimierungspotenzial. Haupt -<br />
problem ist, dass die Nutzungsmöglich -<br />
keiten von DI und AOP vielen Entwicklern<br />
nicht vollständig bekannt sind. Diese<br />
Werkzeuge sind recht mächtig, sodass sich<br />
eine intensive Auseinandersetzung auf<br />
jeden Fall lohnt. Schade ist, dass die<br />
Entwickler neuer Technologien nicht<br />
immer auf den Erfahrungen mit dem<br />
Einsatz der vorhandenen Frameworks aufbauen.<br />
■<br />
[Gam94] E. Gamma, R. Helm, R.E. Johnson, Design Patterns. Elements of Reusable Object-<br />
Oriented Software, Addison-Wesley 1994<br />
[JBo-a] JBoss, Arquillian, siehe: http://www.jboss.org/arquillian<br />
[JBo-b] JBoss, AOP, siehe: http://www.jboss.org/jbossaop<br />
[Ode08] Martin Odersky, Lex Spoon, Bill V.: Programming in Scala, artima Press, 2008<br />
[Osd] Osdir.com, Liftweb, siehe: http://osdir.com/ml/liftweb/2011-07/msg00048.html<br />
[Pic] PicoContainer, siehe: http://picocontainer.org/<br />
26 27
ausblick auf die<br />
die autorin<br />
mehr zum thema:<br />
www.stickyminds.com<br />
SECHS VERHALTENSWEISEN …<br />
… DIE MITARBEITER EINES<br />
AGILEN TEAMS BESITZEN SOLLTEN<br />
Wenn man mit der Bildung eines agilen Teams beauftragt wird, sollte man zunächst überlegen,<br />
was ein agiles Team von einem nicht-agilen unterscheidet. In diesem Artikel stelle ich sechs<br />
Verhaltensweisen vor, die Bewerber für ein erfolgreiches agiles Team besitzen sollten.<br />
Johanna Rothman<br />
(E-Mail: jr@jrothman.com)<br />
hilft Firmen dabei, das Management ihrer<br />
Produktentwicklung zu verbessern. Sie ist Autorin<br />
zahlreicher Bücher und gilt als zentrale Figur der<br />
agilen Bewegung.<br />
Unterscheiden sich Mitglieder agiler Teams<br />
von Personen in anderen Teams? Ja und<br />
nein. Ja, weil einige der Verhaltensweisen,<br />
die wir bei agilen Teams beobachten,<br />
betonter sind als die Verhaltensweisen in<br />
nicht-agilen Teams. Und nein, weil wir über<br />
Menschen reden.<br />
Erfolgreiche Mitglieder agiler Teams zeigen<br />
bestimmte Verhaltensweisen häufiger<br />
als Teammitglieder von nicht-agilen<br />
Projekten, weil Agilität diese Verhaltens -<br />
weisen voraussetzt, um ein erfolgreiches<br />
Team und Produkt zu erhalten. Wenn Sie<br />
damit beauftragt werden, ein agiles Team<br />
zu bilden, nach welchen Eigenschaften sollten<br />
Sie dann suchen? Im Folgenden<br />
beschreibe ich sechs wesentliche Verhal -<br />
tens weisen, über die Personen in erfolgreichen<br />
agilen Teams verfügen sollten. Ich<br />
habe außerdem einige Interview-Fragen<br />
eingefügt, mit denen Sie herausfinden können,<br />
ob ein Bewerber für ein agiles Team<br />
die notwendigen Voraussetzungen erfüllt.<br />
1. Menschen,<br />
die zusammenarbeiten<br />
Menschen, die zusammenarbeiten können,<br />
also mit Schulterschluss kollaborieren, sind<br />
viel nützlicher als solche, die allein arbeiten<br />
müssen. Aber was bedeutet es, richtig<br />
zusammenzuarbeiten?<br />
Das erste, was man bei agilen Teams beobachten<br />
kann, ist die Tatsache, dass die<br />
Mitarbeiter gemeinsam an Features arbeiten.<br />
In nicht-agilen Teams ist es üblich, dass die<br />
Mitglieder Features oder Vorausset zungen<br />
übernehmen und allein daran arbeiten – in<br />
einem gut funktionierenden agilen Team hingegen<br />
nicht. Hier arbeiten mehrere<br />
Entwickler und ein bis zwei Tester zusammen<br />
und stellen sicher, dass sie als Team eine<br />
„Geschichte” vollständig abschließen. Man<br />
kann beobachten, dass mehrere Tester<br />
zusammenarbeiten, um Tests zu entwickeln,<br />
oder (einer meiner Favoriten) Entwickler und<br />
Tester arbeiten gemeinsam an der<br />
Entwicklung des Testautomatisierungs-<br />
Frameworks für das Projekt.<br />
Das gesamte Team arbeitet zusammen,<br />
um Features zu definieren, mit deren<br />
Entwicklung zu beginnen und diese zu<br />
beenden. Erfolgreiche agile Teams vermeiden<br />
das Problem, viele Features zu beginnen,<br />
sie aber am Ende des Entwick lungs -<br />
schritts nicht zu beenden, denn sie wirken<br />
zusammen und schließen die Features ab.<br />
Eine Frage, die man einem Bewerber stellen<br />
kann, ist in diesem Zusammenhang:<br />
„Denken sie an ein zurück liegendes<br />
Projekt. Geben Sie mir ein Beispiel für eine<br />
Zeit, wo sie mit anderen zusammen arbeiten<br />
mussten, um sicherzustellen, etwas<br />
beenden zu können. Was passierte?”<br />
2. Menschen, die um Hilfe bitten<br />
Vielen Menschen fällt es nicht leicht, andere<br />
um Hilfe zu bitten. In vielen<br />
Unternehmen ist es nicht einmal erlaubt,<br />
um Hilfe zu bitten. Aber Personen, die um<br />
Hilfe bitten können, sind genau die, die wir<br />
in einem agilen Team haben möchten.<br />
Warum ist es so wichtig, um Hilfe bitten<br />
zu können? Wir wissen alle etwas über das<br />
Projekt, aber niemand von uns weiß alles,<br />
was wir wissen müssen. Also müssen wir in<br />
der Lage sein, um Hilfe zu bitten, und wir<br />
müssen dies aus einer Position der Stärke<br />
heraus tun, nicht der Schwäche. In einem<br />
agilen Team ist es kein Problem, um Hilfe<br />
zu bitten. Bei der Agilität wollen wir keine<br />
Verzögerung dadurch erleiden, dass eine<br />
Person fest steckt, bevor sie um Hilfe bittet.<br />
Es ist wichtiger, dass das Team alle verein-<br />
barten Features rechtzeitig ausliefert, als<br />
dass einer als Held dasteht.<br />
In diesem Zusammenhang können Sie<br />
einem Bewerber zu seiner Fähigkeit, um<br />
Hilfe zu bitten, die folgende Frage stellen:<br />
„Denken Sie an Ihr letztes Projekt. Erzählen<br />
Sie von einer Situation, in der Sie etwas nicht<br />
verstanden haben. Was haben Sie getan?”<br />
3. Menschen, die kleine<br />
Schritte gehen und Feedback<br />
bekommen wollen<br />
Agilität besteht hauptsächlich aus Feedback.<br />
Wir benutzen Entwicklungs schritte, um<br />
etwas zu tun und Feedback zu bekommen.<br />
Wir entwickeln schrittweise, sodass unsere<br />
Kunden die Gelegenheit haben, ihr Feedback<br />
zu unserer derzeitigen Arbeit abzugeben.<br />
Eine Verhaltensweise, nach der man bei<br />
einem Bewerber suchen möchte, ist die<br />
Fähigkeit, kleine Schritte zu gehen und<br />
Feedback zu erhalten – egal welche Arbeit<br />
sie oder er ausgeführt hat. Menschen (egal<br />
ob es sich um Entwickler, Tester, Autoren<br />
oder andere handelt), die ein Feature<br />
augenscheinlich perfekt beenden müssen,<br />
bevor jemand anders es sieht, sind für ein<br />
agiles Team nicht geeignet.<br />
Fragen, die Sie hierzu stellen können,<br />
sind: „Erzählen Sie mir, wie sie arbeiten<br />
wollen. Denken Sie an das letzte Feature,<br />
an dem Sie gearbeitet haben. Haben Sie<br />
versucht, das Ganze zu vervollständigen,<br />
bevor Sie um Feedback gesucht haben?”<br />
Warten Sie auf die Antwort. Dann fragen<br />
Sie: „Warum?” Vielleicht sagt der<br />
Bewerber, er habe einmal versucht, Feed -<br />
back zu erhalten. Oder er sagt, von ihm sei<br />
erwartet worden, alles perfekt zu vervollständigen.<br />
Nun können sie fragen: „Wenn<br />
Sie außerhalb der Arbeit an ihrem Projekt<br />
arbeiten, wie gehen Sie da vor?”<br />
1/2012
ausblick auf die<br />
4. Menschen, die bereit sind,<br />
etwas „gut genug für den<br />
Moment” zu machen<br />
Menschen, die in der Lage sind, kleine<br />
Schritte zu gehen und Feedback zu<br />
bekommen, sind wahrscheinlich ebenso in<br />
der Lage, etwas „gut genug für den<br />
Moment” zu machen. Eines der Probleme<br />
bei der Agilität ist, dass wir nicht genügend<br />
Zeit haben, alles auf einmal perfekt zu<br />
machen. Deshalb benutzen wir Zeitfenster.<br />
Wir tun, was gerade benötigt wird, und<br />
entscheiden auf Grundlage des Feedbacks,<br />
ob oder wann wir darauf wieder zurück -<br />
kommen.<br />
Die Fähigkeit, etwas gerade gut genug zu<br />
machen und darauf zurückzukommen, wenn<br />
es mehr Nutzen für das Geschäft bringt, ist<br />
kein übliches Verhalten. Man kann das bei<br />
Testern sehen, die das absolut beste<br />
Testsystem am Beginn eines Projekts haben<br />
wollen. Man kann es auch bei Architekten<br />
sehen, die die Architektur zu Beginn des<br />
Projekts vollständig definieren wollen.<br />
Eines der Probleme der Agilität besteht<br />
darin, dass wir zu Beginn eines Projekts<br />
nicht sagen können, was perfekt ist.<br />
Manchmal können wir es nicht einmal in<br />
der Mitte sagen. Also müssen wir es gut<br />
genug für den Moment machen und später<br />
darauf zurückkommen, wenn wir mehr<br />
Nutzen daraus ziehen können, wenn wir<br />
uns darauf konzentrieren.<br />
Um sagen zu können, ob ein Bewerber<br />
diese Fähigkeit besitzt, etwas gut genug für<br />
den Moment zu machen und den perfekten<br />
Abschluss auf später verschieben kann, fragen<br />
Sie: „Erzählen Sie mir vom letzten Mal,<br />
als Sie zu Beginn eines Projekts überhaupt<br />
nichts wussten? Was haben Sie getan?”<br />
5. Anpassungsfähige<br />
Menschen<br />
In agilen Projekten sind, wie in allen Arten<br />
von Projekten, die Bedingungen nicht<br />
immer perfekt. Beispielsweise kann es vorkommen,<br />
dass wir keinen Teamraum<br />
haben, dass es keine Kriterien für die<br />
Auswahl von Features gibt oder dass wir<br />
vielleicht nicht einmal in der Lage sind,<br />
Hindernisse zu beseitigen. Und trotzdem<br />
müssen wir die Arbeit fertig bekommen<br />
Wir suchen nicht nach Heiligen. Wir<br />
suchen nach Menschen, die sich an die<br />
herrschenden Bedingungen anpassen können.<br />
Wir wollen, dass die Mitarbeiter ihre<br />
Arbeit tun, auch wenn die Bedingungen<br />
unzureichend sind.<br />
Aufgrund der Antwort, die Sie auf die<br />
folgende Frage erhalten, werden Sie wissen,<br />
ob Sie einen anpassungsfähigen Menschen<br />
Warum es so wichtig ist, die richtigen Leute einzustellen<br />
Interview mit Johanna Rothman.<br />
■■? Sie haben ein bekanntes Buch über pragmatisches<br />
Projektmanagement ge schrie ben und Sie favorisieren agile<br />
Systeme. Was halten Sie vom klassischen PMI und seinem<br />
Wert für den Software-Entwicklungsprozess?<br />
■■! Das ursprüngliche PMBOK beinhaltete keine Vorgabe für<br />
den Projektmanager bezüglich des zu verwendenden Lebens -<br />
zyklus. Ich mochte das. Auch wenn ich vor Kurzem das<br />
PMBOK falsch interpretiert haben sollte, macht es für den<br />
Projekt manager immer noch keine strenge Vorgabe, welcher<br />
Lebenszyklus zu verwenden ist. Auf der anderen Seite ist das<br />
PMBOK sehr wasserfallartig ausgelegt, sodass man leicht im<br />
klassischen Lebenszyklus-Denken verhaftet bleibt. Das<br />
PMBOK leitet die Projektmanager nicht einmal an, über den<br />
für sie geeigneten Lebenszyklus nachzudenken – und das ist<br />
eine Schande. Die Wahl des Lebenszyklus, der auf die Risiken<br />
deines Projekts und deines Teams am besten passt, ist die<br />
schnellste und billigste Art, wie ein Projekt manager von Beginn<br />
an die Projektrisiken managen kann. Also, warum nicht?<br />
■■? In Ihrem OOP-Tutorial „Influence and Authority: Using<br />
Your Personal Power to Get Things Done” legen Sie den<br />
Schwer punkt auf die Menschen, nicht auf irgendeine<br />
Managementdisziplin. Ist der Mensch der eigentliche kritische<br />
Erfolgsfaktor in der Softwareentwicklung?<br />
■■! Software ist eine menschenintensive Disziplin. Das ist der<br />
Grund, warum es so wichtig ist, die richtigen Leute einzustellen<br />
(das ist der Inhalt meines Vortrags) und zu wissen, wie<br />
man mit Hilfe dieser Menschen seine Arbeit erledigt bekommt<br />
(Inhalt meines Tutorials). Das gilt für Projektmanager,<br />
Softwareentwickler, Tester, Produktmana ger, Marketingleute<br />
und alle anderen gleichermaßen.<br />
■■? Vor Kurzem waren Sie auf der AYE-Konferenz. Was war<br />
Ihr Eindruck?<br />
■■! Ich hat eine großartige Zeit – ich denke, alle Teilnehmer<br />
hatten das. Bis jetzt haben wir von mehr als einem Dutzend<br />
Leute Feedback bekommen. Wir haben Vorschläge für die<br />
Zukunft bekommen, was immer gut ist. Aber die meisten<br />
Kommentare waren in der Art wie: „Was für eine wundervolle<br />
Umgebung, um zu lernen, und was für eine großartige<br />
Gruppe von Teilnehmern!”<br />
■■? Worauf freuen Sie sich am meisten auf der kommenden<br />
OOP?<br />
■■! Ich liebe es, neue Menschen zu treffen. Deshalb ist das ein<br />
Punkt, auf den ich mich auf jeden Fall freue. Ich vermute, dass<br />
es kulturelle Unterschiede zwischen dem gibt, was ich normalerweise<br />
in US-Firmen sehe, und deutschen Firmen. Diesem<br />
Unter schied möchte ich in meinem Tutorial auf den Grund<br />
gehen. Wenn du solche kulturellen Probleme nicht beachtest,<br />
kannst du sie auch nicht wirksam beeinflussen.<br />
28 29
ausblick auf die oop 2012<br />
vor sich haben: „Erzählen Sie mir von einer<br />
Situation, in der Sie nicht die Bedingungen<br />
vorgefunden haben, die Sie sich für Ihr Pro -<br />
jekt gewünscht haben. Was haben Sie<br />
getan?”<br />
6. Menschen, die bereit sind,<br />
außerhalb ihres Erfahrungsbereichs<br />
zu arbeiten<br />
Ein Zeichen für Anpassungsfähigkeit ist die<br />
Bereitschaft eines Menschen, auch außerhalb<br />
seines Erfahrungsbereichs zu arbeiten.<br />
Ich schlage nicht vor, dass jemand etwas<br />
tun soll, von dem er keine Ahnung hat –<br />
z. B. sollte sich ein Entwickler nicht in einen<br />
Vermarkter verwandeln (es sei denn, er<br />
möchte es). Ich schlage aber vor, dass<br />
jemand, der sich sehr gut mit Datenbanken<br />
auskennt, auch versuchen sollte, sich ein<br />
bisschen mit der GUI zu befassen. Wenn<br />
jemand mit der Middleware vertraut ist,<br />
würde er vielleicht auch gerne auf Be -<br />
triebssystem-Ebene oder auf dem oberen<br />
Level einer Anwendung arbeiten. Wenn<br />
jemand die ganze Test-Karriere lang eine<br />
For schungstesterin war, möchte sie vielleicht<br />
ein wenig Skripting versuchen. Wenn<br />
sie ein „Automatisierungs-Würstchen” ist<br />
(also die arme Person, die immer wieder die<br />
gleichen Tests durchführen muss), ist es<br />
vielleicht an der Zeit, es mit ein wenig For -<br />
schungstests zu versuchen.<br />
Wir sehen diese Bereitschaft zur Arbeit<br />
außerhalb des eigenen Erfahrungsbereichs<br />
in agilen Teams, wenn Menschen zusam -<br />
menarbeiten und sich um ein Feature drän-<br />
Johanna Rothman<br />
Increase Your Capacity and<br />
Finish More Projects<br />
O'Reilly 2009<br />
250 Seiten (auf englisch)<br />
32,00 €<br />
ISBN 978-1-934356-29-6<br />
geln. Menschen sind bereit, außerhalb ihres<br />
Erfahrungsbereichs zu arbeiten, aber nicht<br />
zu weit davon entfernt. Um etwas über diese<br />
Fähigkeit zu erfahren, fragen Sie:<br />
„Erzählen Sie mir von einer Situation, in<br />
der Sie eine Arbeit übernommen haben, um<br />
dem Team zu helfen. Wie war das?”<br />
Ein Bewerber kann unter Umständen diese<br />
Frage nicht beantworten. Sie können<br />
dann einen Kontext vorgeben, wie z. B. den<br />
Folgenden: „Wir arbeiten an Dingen, mit<br />
denen wir vielleicht nicht vertraut sind, um<br />
ein Feature für eine Iteration fertigzustellen.<br />
Waren Sie jemals in dieser Situation?”<br />
Wenn der Bewerber nicht ja sagt, müssen<br />
Sie die Frage anders stellen. Zum Beispiel<br />
hatte ich mit folgender Frage Erfolg:<br />
„Erzählen Sie mir von einer Situation, in<br />
der Sie etwas taten, was Ihrer Meinung<br />
nach nicht zu Ihrer Jobbeschreibung<br />
gehört. Was haben Sie getan?”<br />
Zusammenfassung<br />
Dies sind wahrscheinlich nicht die einzigen<br />
Verhaltensweisen, die man für ein agiles<br />
Team benötigt. Führen Sie auf jeden Fall<br />
eine Jobanalyse durch, um zu sehen, wie<br />
sich Ihr agiles Team von anderen unterscheidet.<br />
Dann werden Sie die Art von<br />
Bewerbern erkennen, die zu berücksichtigen<br />
sind.<br />
Aus dem Englischen von Elke Niedermair.<br />
1/2012
ausblick auf die<br />
der autor<br />
mehr zum thema:<br />
www.sigs-datacom.de/OOP2012/konferenz<br />
FLOW IN LEAN, FLOW IM TEAM:<br />
WAS LEAN MIT DEM PERSÖN-<br />
LICHEN ERLEBEN ZU TUN HAT<br />
Flow herrscht in der Arbeit, wenn Bedarf und Lieferfähigkeit gegeneinander ausbalanciert sind,<br />
z. B. durch den Einsatz von Lean-Verfahren in der Produktentwicklung. Flow gibt es auch in der<br />
Psyche, wenn vom Einzelnen soviel gefordert wird, wie er auch leisten kann. Im Flow-Zustand<br />
entstehen die besten Ergebnisse, die Arbeit ist angenehm, man vergisst die Zeit. Dass man für<br />
Flow im Sinne von „Lean Product Development” dasselbe Wort verwendet wie in der Psycholo -<br />
gie, ist nach meiner Ansicht kein Zufall. In diesem Artikel geht es darum, die Beziehung zwischen<br />
Flow in Lean und Flow in der Psyche herzustellen und zu erforschen.<br />
Matthias Bohlen<br />
(E-Mail: mbohlen@mbohlen.de)<br />
ist unabhängiger Coach für effektive Produkt -<br />
entwicklung. Teams und Manager arbeiten mit seiner<br />
Hilfe bewusster, flüssiger und effektiver. Er ist<br />
Mitglied des OBJEKTspektrum-Redaktionsteams.<br />
Der Begriff Flow wurde von dem ungarischen<br />
Psychologen Mihaly Csikszent -<br />
mihalyi für einen bestimmten Zustand der<br />
menschlichen Psyche verwendet (vgl.<br />
[Csi08]). Er meint damit die optimale<br />
Erfahrung der Wirklichkeit – ein Zustand,<br />
der sich unter bestimmten Bedingungen<br />
einstellt. Der Mensch im Flow-Zustand ist<br />
in seiner ganzen Person gefordert. Seine<br />
Aufmerksamkeit und die Aktivität, die er<br />
gerade ausführt (z. B. entwickeln oder entwerfen),<br />
sind eins miteinander. Das geht<br />
nur mit klaren Zielen und einem zeitnahen<br />
Feedback. Dadurch wird es ihm ermöglicht,<br />
sich ganz auf das zu konzentrieren,<br />
was er gerade tut. Er hat das Gefühl, das,<br />
womit er sich beschäftigt, unter Kontrolle<br />
zu haben. Schließlich wird die Aktivität zu<br />
ihrem eigenen Ziel – Flow wird zur autotelischen<br />
Erfahrung.<br />
Produktentwicklung ist eine Tätigkeit,<br />
die kreatives Problemlösen erfordert. Sie ist<br />
nicht mit der Fertigung zu vergleichen, bei<br />
der das gewünschte Endergebnis im<br />
Vorhinein feststeht. Deshalb kann der Weg<br />
zu diesem Ergebnis auch nicht im Voraus<br />
beschrieben, sondern muss im Gegenteil<br />
erst gefunden werden, während man ihn<br />
geht. Dennoch hat Produktentwicklung ein<br />
klares Ziel, nämlich das Finden dieser<br />
guten und allseits akzeptierten Lösung: das<br />
funktionierende Produkt.<br />
Produktentwicklung fordert uns dazu<br />
heraus, unsere gesamten Fähigkeiten einzusetzen.<br />
Die einzelnen Aktivitäten führen zu<br />
Zwischenzielen hin, z. B. eine Funktion, die<br />
endlich so arbeitet, wie sie soll, eine Farbe,<br />
die endlich so aussieht, wie sie soll, oder<br />
eine Produktgestaltung, die den Benutzer<br />
begeistert. Gleichzeitig gelten Regeln für<br />
jede einzelne Aktivität, die man nicht ohne<br />
die richtigen Fähigkeiten einhalten kann.<br />
Das Produkt wird sich „weigern”, das zu<br />
tun, was gefordert ist, wenn man nicht alle<br />
Fähigkeiten einsetzt, um es dazu zu bringen.<br />
Flow in der Psyche<br />
Wenn eine Person alle ihre Fähigkeiten einsetzen<br />
kann oder muss, um in der<br />
Produktentwicklung zu einem Ziel zu<br />
gelangen, dann wird sie durch die Aktivität<br />
völlig aufgesogen. Als Architekt, Ent -<br />
wickler, Designer oder Tester achtet man<br />
nicht mehr auf sich selbst, auf den Stuhl,<br />
auf dem man sitzt, auf die Computermaus,<br />
die man in der Hand hält, auf die Umge -<br />
bungs geräusche und alles andere. Wichtig<br />
ist nur noch die Arbeit an dem aktuellen<br />
Teil des Produkts, den man in Händen hält<br />
oder auf dem Bildschirm vor sich sieht.<br />
Es ergibt sich insgesamt eine Erfahrung,<br />
die sonst von Tänzern, Musikern, Berg -<br />
steigern, Schach- oder Go-Spielern, Mara -<br />
thonläufern oder Börsenhändlern beschrie-<br />
ben wird: Das ist Flow in der Psyche. Die<br />
Aktivität wird so spontan, fast automatisch<br />
ausgeführt, dass Person und Tat nicht mehr<br />
getrennt, sondern eins miteinander sind.<br />
Csikszentmihalyi 1 ), emeritierter Profes -<br />
sor für Psychologie an der Universität von<br />
Chicago, bezeichnet Flow auch als „die<br />
optimale Erfahrung der Wirklichkeit”. Auf<br />
Deutsch würde man sagen „Schaffens- oder<br />
Tätigkeitsrausch”. Der deutsche Pädagoge<br />
Kurt Hahn bezeichnete diesen Zustand als<br />
„schöpferische Leidenschaft”. Maria Mon -<br />
tes sori, italienische Ärztin und Reform -<br />
päda gogin, beschrieb etwas ähnliches, das<br />
sie „Polarisation der Aufmerksamkeit”<br />
nannte.<br />
Als Softwareentwickler sind wir vielleicht<br />
geneigt, eine andere Definition zu<br />
Rate zu ziehen. Sie stammt aus dem<br />
1<br />
) Er soll angeblich selbst gesagt haben, dass man seinen<br />
Namen ausspricht wie „chicks sent me high”.<br />
www.pixelio.de – Heike<br />
30 31
ausblick auf die oop 2012<br />
Wörterbuch für Hacker von Eric S. Ray -<br />
mond. Er nennt den Zustand, der hier<br />
gemeint ist, hack mode und beschreibt ihn<br />
als „einen Zen-artigen Zustand mit totalem<br />
Fokus auf das [zu lösende] Problem, der<br />
erreicht werden kann, indem man hackt”.<br />
Für einen außenstehenden Beobachter, der<br />
diesen Zustand nicht kennt, kann das sehr<br />
seltsam aussehen. Wenn beispielsweise<br />
jemand an Ihrer Tür erscheint, und Sie sich<br />
gerade im hack mode befinden, so ist es<br />
nach der Hacker-Etikette völlig okay, wenn<br />
Sie Ihre Hand hochhalten und den Blick<br />
nicht vom Bildschirm nehmen, um einer<br />
Unterbrechung des hack mode vorzubeugen.<br />
Dann können Sie unter Umständen<br />
noch lange lesen, tippen, mit der Maus<br />
klicken, bis Sie Ihre Hand senken. Der<br />
Mensch an der Tür kann sich aussuchen,<br />
ob er so lange warten oder inzwischen<br />
wortlos gehen will. Das Verständnis dahinter<br />
ist, dass Sie im hack mode eine Menge<br />
an zerbrechlichem Zustand halten – wie bei<br />
einem zustandsbehafteten Server, der seinen<br />
Kontext nicht wechseln möchte, bis er<br />
den Zustand gesichert und einen guten<br />
Punkt zum Pausieren gefunden hat.<br />
Csikszentmihalyi erforschte, wie der<br />
Flow-Zustand bei verschiedenen Menschen<br />
aussieht (vgl. [Csi08]). Er führte Befragun -<br />
gen in unterschiedlichen sozialen Gruppen<br />
und in unterschiedlichen Berufen durch. Zu<br />
seinem Erstaunen fand er heraus, dass<br />
Menschen über dieselben acht Grundeigen -<br />
schaften berichteten – unabhängig von<br />
ihrer Kultur, dem Stand der Moderni -<br />
sierung, der sozialen Klasse sowie Alter<br />
und Geschlecht:<br />
■ G1: Das Erlebnis entsteht, wenn wir<br />
mit Aufgaben konfrontiert sind, die wir<br />
auch vollenden können.<br />
■ G2: Wir müssen uns auf das, was wir<br />
tun, konzentrieren können.<br />
■ G3: Die Aufgabe hat klare Ziele.<br />
■ G4: Die Aufgabe bringt uns sofortiges<br />
Feedback.<br />
■ G5:Man agiert in tiefem und gleichzeitig<br />
anstrengungslosem Beteiligtsein, das<br />
die Sorgen und Frustrationen des All -<br />
tags aus dem Bewusstsein verdrängt.<br />
■ G6: Das Erleben erlaubt es den Men -<br />
schen, ein Gefühl von Kontrolle über<br />
ihr Tun zu haben.<br />
■ G7: Interesse am eigenen Selbst (und<br />
zugehörige Bedenken) verschwinden,<br />
doch nach Ende der Flow-Erfahrung<br />
bildet sich das Selbstgefühl paradoxerweise<br />
stärker heraus als je zuvor.<br />
■ G8: Das Zeitgefühl verändert sich:<br />
von Matthias Bohlen<br />
gibt<br />
es auch<br />
bei<br />
Flow in der Produktentwicklung<br />
Produktentwicklung planen,<br />
durchführen und genießen!<br />
28.<br />
– 29.<br />
Feb.<br />
2012, Köln<br />
1.590,-<br />
€ zzgl. MwSt.<br />
Kontakt:<br />
<strong>SIGS</strong> <strong>DATACOM</strong> ACOM GmbH<br />
Anja Keß,<br />
Tel. +49 (0)2241/2341-20141-201<br />
Email:<br />
anja.kesssigs-datacom.de<br />
www.sigs-datacom.de<br />
de<br />
Stunden vergehen in Minuten und<br />
Minuten können sich ausdehnen wie<br />
Stunden.<br />
G1 bis G4 sind Bedingungen, die gelten<br />
müssen, damit Flow entstehen kann. G5 bis<br />
G8 sind Beobachtungen, die man regelmäßig<br />
machen kann, wenn Flow entsteht.<br />
Lean Software Development<br />
Mary und Tom Poppendieck haben Er -<br />
kennt nisse aus dem Lean Manufacturing in<br />
die Softwareentwicklung übertragen und<br />
den Begriff Lean Software Development<br />
geprägt (vgl. [Pop03]). In der Gedanken -<br />
welt von Lean liegt der Fokus auf dem<br />
Wert, der für den Kunden erzeugt wird. Ein<br />
grundlegendes Lean-Prinzip lautet: „Füge<br />
nichts außer Wert hinzu”, auch bekannt als<br />
„Eliminiere Verschwendung”. Verschwen -<br />
dung erkennen wir in der Softwareent -<br />
wicklung hinter verschiedenen Masken: zu<br />
viele Features, die keiner benutzt, zu viele<br />
im voraus erhobene Anforderungen, die<br />
Suche nach Personen, die einem Entwickler<br />
eine fehlende Information geben können,<br />
Übergaben von einem Spezialisten zum<br />
anderen und vieles mehr.<br />
Lean hat es sich deshalb auf die Fahne<br />
geschrieben, immer auf die Menschen zu<br />
achten, die den Wert produzieren. Wert,<br />
das ist das lauffähige System und angemessene<br />
Dokumentation, um das System warten<br />
und betreiben zu können. Den<br />
Menschen, die diesen Wert schaffen, gibt<br />
man Ressourcen, Informationen, die Ho -<br />
heit über ihren eigenen Prozess, Entschei -<br />
dungsgewalt, so weit es sie betrifft, und<br />
Energie, so viel sie brauchen. Man stellt<br />
Teams zusammen, die ihren eigenen<br />
Prozess leben und die in sich geschlossene<br />
Probleme lösen – und nicht solche, die<br />
jemand anders für sie in Einzelaufgaben<br />
aufgeteilt hat. Nicht stumpfes Coding ist<br />
Trumpf, sondern intelligentes Engineering.<br />
Flow in Lean<br />
In Lean gibt es eine Grundidee, die man dort<br />
ebenfalls Flow nennt. Wenn man als Ziel<br />
hat, nichts anderes zu tun, außer Wert hinzuzufügen,<br />
sollte man versuchen, diesen<br />
Wert in einem Fluss zu erschaffen, der so<br />
schnell fließt, wie es geht. Es beginnt mit den<br />
Produktideen, die reichlich entstehen und<br />
gar nicht so schnell abgearbeitet werden<br />
können. Hier ist der Ansatz, die Ideen nur<br />
grob zu beschreiben, um nicht zu viel<br />
Zwischenergebnisse auf Halde zu legen. Die<br />
Ideen, die tatsächlich in die Ent wicklung<br />
gehen, untersucht man „just in time”, möglichst<br />
spät und trotzdem rechtzeitig.<br />
Aus den Ideen werden Anforderungen an<br />
das zukünftige System, beispielsweise in<br />
Form von Benutzergeschichten und<br />
Qualitätseigenschaften. Auch von diesen<br />
Anforderungen spezifiziert man nur so viele,<br />
wie sofort in die Software- und System -<br />
architektur einfließen können – wiederum<br />
keine Produktion auf Halde, sondern ein<br />
gleichmäßiger Fluss in die nächsten<br />
Prozessschritte. Und es geht so weiter: Nur<br />
so viel Architektur entwerfen wie nötig,<br />
nur so viel Code schreiben, wie man auch<br />
testen kann, nur so viel testen, wie man in<br />
Betrieb nehmen kann (und natürlich nur<br />
soviel in Betrieb nehmen, wie der Kunde<br />
bezahlen kann).<br />
Flow in Lean bedeutet: Die Arbeit muss<br />
fließen. Flow bedeutet nicht, dass die<br />
Arbeiter ausgelastet sein müssen. Überhaupt<br />
verlagert sich der Blick des<br />
Managements: Er richtet sich auf die einzelnen<br />
Arbeitspakete, nicht mehr so sehr<br />
auf die Personen, die die Arbeit tun, nicht<br />
mehr auf das Geld, das die Personen<br />
kosten, und nicht mehr auf deren Aus -<br />
lastung. Wäre die Produktentwicklung eine<br />
Autobahn, würde man es so zusammenfassen:<br />
Es kommt darauf an, eine möglichst<br />
gleichmäßig hohe Zahl von Autos pro<br />
Stunde durchzubringen, und nicht darauf,<br />
die Autobahn mit Autos zuzupflastern.<br />
Flow in Lean ist kostengünstig<br />
Warum sollte das Management sich für<br />
Flow interessieren? Weil Flow die Pro -<br />
duktentwicklung sowohl kostengünstig als<br />
auch angenehm gestaltet. Wenn Sie in der<br />
Produktentwicklung ohne Flow arbeiten,<br />
1/2012
ausblick auf die<br />
Wie Flow in Lean entsteht<br />
Flow entsteht dann, wenn Nachfrage und<br />
Durchsatz gegeneinander ausbalanciert sind.<br />
Nachfrage ist das, was vom Kunden gefordert<br />
wird. Durchsatz ist das, was die Teams<br />
an Ergebnissen pro Zeiteinheit erzeugen<br />
können. Gibt man den Teams das Recht,<br />
sich Nachfrage auf den Schreibtisch zu ziesind<br />
Ihre Mitarbeiter traditionell hoch ausgelastet.<br />
Die To-Do-Listen, die Backlogs<br />
und Taskboards, die Projektpläne – was<br />
immer auch zur Planung und Verfolgung<br />
benutzt wird – es ist voll von noch nicht<br />
getaner Arbeit. Das kollektive Gedächtnis<br />
der Teams ist mit der Zukunft beschäftigt,<br />
nicht mit der Gegenwart. Überall bilden<br />
sich Warteschlangen, Termine können nicht<br />
gehalten werden und man fragt sich:<br />
Warum geht es bei uns nicht vorwärts?<br />
Lange Warteschlangen mit gestapelter<br />
Arbeit kosten viel Geld. Ein Feature, das in<br />
das lauffähige System eingebaut werden<br />
soll, kann erst Geld einbringen, wenn der<br />
erste Kunde dafür bezahlt. Je später man<br />
mit einem Feature (oder Feature-Paket) auf<br />
den Markt kommt, desto eher kann die<br />
Konkurrenz den Markt besetzen. Die Zeit,<br />
die die Entwickler für ein Feature benötigen,<br />
hängt nicht nur davon ab, wie lange<br />
sie dafür arbeiten, sondern ebenso stark<br />
davon, wie viele Features sie noch gleichzeitig<br />
entwickeln: je mehr davon gleichzeitig,<br />
desto länger dauert jedes einzelne<br />
Feature. Führt man Flow ein, wird diese<br />
Menge klein, die Warteschlangen verkürzen<br />
sich und man investiert die Arbeitszeit<br />
nur dort, wo es sich lohnt.<br />
Die Kosten für die Zeit, die die Arbeit in<br />
Warteschlangen verbringt, sind kaufmännisch<br />
wie Abschreibungskosten auf Inventar<br />
zu behandeln, über die in der Software -<br />
entwicklung selten nachgedacht wird.<br />
Hier ein Beispiel aus [Boh10]: Man<br />
schreibt ein Anforderungsdokument und<br />
investiert dafür 60.000 Euro. Dann ist das<br />
Dokument ein Inventar im Wert von<br />
60.000 Euro. Das Wissen über die Inhalte<br />
und Zusammenhänge des Dokuments<br />
beginnt zu verfallen, weil Projektbeteiligte<br />
Menschen sind, die im Laufe der Zeit<br />
Dinge vergessen. Es dauert etwa drei<br />
Monate, bis keiner mehr weiß, was mit<br />
dem Dokument gemeint war. Danach hat<br />
das Dokument also einen Wert von 0 Euro.<br />
Wir kommen bei einem Wertverlust von<br />
60.000 Euro in drei Monaten auf eine<br />
Abschreibung von 20.000 Euro pro<br />
Monat. Demnach trägt dieses Dokument<br />
ab Fertigstellung mit knapp 1.000 Euro pro<br />
Arbeitstag zu den operativen Ausgaben des<br />
Projekts bei. Es wäre also gut, wenn die<br />
Teams das Dokument vor Ablauf des<br />
Mindesthaltbarkeitsdatums in lauffähigen<br />
Code verwandelten.<br />
Die Lean-Alternative dazu sieht so aus:<br />
Man investiert in die Anforderungen erst<br />
einmal nur 10.000 Euro. Danach entstehen<br />
Kosten von 10.000 Euro für Code und<br />
20.000 Euro für Tests. Schließlich bringt<br />
man das Ganze für 20.000 Euro in<br />
Produktion. Die Kunden zahlen für die<br />
neuen Features 75.000 Euro Lizenz -<br />
gebühren. Damit ergibt sich folgender<br />
Return on Investment: (Einnahmen-Ausga -<br />
ben)/Anfangsinvestitionen = (75.000-<br />
60.000)/10.000 = 150 %. Anstatt ein<br />
Dokument in einer Warteschlange verderben<br />
zu lassen, führt man es lean schnell und<br />
in kleinen Schritten der Realisierung zu,<br />
ehe man in neues Inventar (z. B. weitere<br />
Anforderungen) investiert.<br />
Das Management müsste an Flow höchst<br />
interessiert sein, weil es Kosten spart und<br />
Wert schnell realisiert.<br />
Flow in der Psyche macht<br />
Arbeit angenehm<br />
In Deutschland fehlen Fachkräfte, heißt es.<br />
Firmen beginnen zu verstehen, dass sie auf<br />
das Umfeld achten müssen, das sie ihren<br />
Mitarbeitern bieten, wenn sie möchten,<br />
dass diese über lange Zeit zufrieden bei<br />
ihnen arbeiten. In einer Firma, in der es beide<br />
Arten von Flow gibt, ist die Situation für<br />
den einzelnen Mitarbeiter optimal. Er ist<br />
genau im richtigen Maße gefordert, mit<br />
interessanten Problemstellungen konfrontiert,<br />
ohne jedoch den Überblick zu verlieren.<br />
Die Teams sind autonom, weil sie<br />
selbst entscheiden können, wie viel Arbeit<br />
sie sich auf die Schreibtische ziehen. Sie<br />
können zu Meistern ihres Fachs werden,<br />
wenn die Firmenkultur von ihnen verlangt,<br />
sich ständig zu verbessern. Und: Wenn die<br />
Führungskräfte ihren Job gut machen,<br />
erkennen die Mitarbeiter, was der Sinn und<br />
Zweck ihrer Arbeit ist, welche Strategie<br />
damit verfolgt wird und wo der Nutzen für<br />
den Kunden liegt. Autonomie und<br />
Meisterschaft, gerichtet auf Sinn und<br />
Zweck – das sind die besten Zutaten für<br />
eine intrinsische, also eine von innen kommende<br />
Motivation der Mitarbeiter.<br />
Wenn solche Bedingungen gegeben sind,<br />
werden gute Leute dazu tendieren, in dieser<br />
Firma zu bleiben. Es wird sich eine Kultur<br />
von vertrauensvoller Zusammenarbeit entwickeln.<br />
Man sagt auch: Es entsteht „soziales<br />
Kapital”.<br />
hen (Pull-Prinzip) und durch Ent wick lung in<br />
Durchsatz zu verwandeln, stellt sich dieses<br />
günstige Gleichgewicht ein. Es wird dann<br />
niemals etwas analysiert, was nicht auch<br />
gleich entwickelt werden kann. Es wird<br />
nichts entwickelt, was nicht getestet werden<br />
kann. Es wird nur so viel getestet, wie auch<br />
in Produktion genommen werden kann.<br />
Jeder Prozessschritt wird nur durchgeführt,<br />
wenn auch ein Abnehmer für das Ergebnis<br />
frei ist. Der letzte solche Abnehmer in der<br />
Kette ist der Kunde.<br />
Um Flow im Sinne von Lean erreichen zu<br />
können, gibt es verschiedene Methoden.<br />
Eine davon ist Kanban, wie es von David<br />
Anderson definiert wurde (vgl. [And10]).<br />
In OBJEKTspektrum wurde schon häufig<br />
über Kanban berichtet (z. B. in Ausgabe<br />
2/2010), sodass es ausreicht, wenn wir hier<br />
noch einmal die fünf Kerneigenschaften<br />
von Kanban in Erinnerung rufen:<br />
■ Visualisieren Sie den Workflow: An der<br />
Wand hängt man eine Tafel auf, die in<br />
Spalten eingeteilt ist (siehe Abbildung 1).<br />
Jede Spalte repräsentiert einen Work -<br />
flow-Zustand. In den Spalten bewegen<br />
sich Klebezettel, auf denen die<br />
Bezeichnung eines Arbeits pakets steht.<br />
So ist jederzeit sichtbar, welches Arbeits -<br />
paket in welchem Zustand ist.<br />
■ Limitieren Sie Work-in-Progress: Pro<br />
Spalte oder Zeile auf der Tafel dürfen<br />
sich nur so viele Arbeitspakete befinden,<br />
wie das Team auch sinnvoll bearbeiten<br />
kann.<br />
■ Messen Sie den Flow und optimieren sie<br />
ihn: Wann immer die Arbeit stockt<br />
(erkennbar an einem Zettel, der sich<br />
nicht bewegt), finden Sie die Ursache<br />
heraus und beseitigen Sie diese.<br />
■ Machen Sie Prozessregeln explizit:<br />
Werden Sie sich klar, warum Sie so<br />
arbeiten, wie Sie arbeiten.<br />
■ Verwenden Sie Modelle, um Verbes -<br />
serungs möglichkeiten zu erkennen: Bei -<br />
spiele hierfür sind systemisches Denken<br />
(vgl. [Sen10]), Theory of Constraints<br />
(vgl. [Gol90]) oder Demings Ideen (vgl.<br />
[Dem00]).<br />
Flow im Sinne von Lean können Sie also<br />
mit Hilfe von Kanban entstehen lassen.<br />
Kommen wir jetzt zu Flow in der Psyche.<br />
Wie Flow in der<br />
Organisation entsteht<br />
Flow in der Organisation zu erzeugen, ist<br />
Aufgabe des Managements. Manager müs-<br />
32 33
ausblick auf die oop 2012<br />
Mission, Zweck und Ziele<br />
Für die Mitarbeiter ist es schwer, sich auf<br />
die Ziele der Firma zu konzentrieren, wenn<br />
sie diese Ziele nicht verstehen oder sie missverstehen.<br />
Für alle – angefangen beim<br />
CEO, über das mittlere Management, bis<br />
hin zu den Teammitgliedern – sollte klar<br />
sein:<br />
■ Warum tun wir diesen Job?<br />
■ Warum führen wir diesen Feldzug?<br />
■ Was ist der Zweck dieses Unterneh -<br />
mens?<br />
■ Was ist mein spezieller Beitrag zu diesem<br />
Zweck?<br />
Abb. 1: Von Flow in Lean zu Flow in der Psyche.<br />
sen sich in erster Linie darauf konzentrieren,<br />
eine Organisation zu bauen. Diese<br />
Organisation kann dann Produkte bauen,<br />
die den Markt überraschen und weiteres<br />
Wachstum der Organisation ermöglichen.<br />
Die beste Strategie dafür ist es, Bedin -<br />
gungen zu schaffen und eine Atmosphäre<br />
herzustellen, in der Flow in den Menschen<br />
entstehen kann. Realistisch betrachtet hat<br />
ein Mensch – in dem Fall der Manager –<br />
keinen direkten Einfluss darauf, ob ein<br />
anderer Mensch (z. B. ein Teammitglied) in<br />
den Flow kommt. Er kann jedoch die<br />
Umgebung so gestalten, dass die Wahr -<br />
schein lichkeit dafür hoch wird.<br />
Es fängt mit einem Ort und einer Zeit an.<br />
Der Ort, an dem die Menschen arbeiten,<br />
sollte angenehm und besonders gestaltet<br />
sein. Saubere Räume, genügend Licht und<br />
Luft, Sichtbarkeit der Teams untereinander,<br />
Plätze zur Kommunikation (z. B. Espresso -<br />
maschine), und Plätze zum Halten des<br />
gemeinsamen Gedächtnisses (z. B. Kanban-<br />
Tafeln) sind Grundbedingungen. Darüber<br />
hinaus können ein Betriebskindergarten,<br />
eine schöne Kantine oder Räume zum<br />
Tischfußball-Spielen förderlich sein.<br />
Natürlich kann man Software auch in<br />
einer Geek-Wohngemeinschaft oder einer<br />
Garage entwickeln (nicht selten haben erfolgreiche<br />
Firmen so angefangen). Doch die<br />
Erfahrung zeigt, dass Entwickler in solchen<br />
Umgebungen nur vorübergehend wie eine<br />
Larve überwintern. Für gewisse Zeit wird<br />
Hacken wichtiger als Essen, Geschirr abwaschen<br />
oder Freunde treffen. Flow wird im<br />
Hack Mode erlebt. Dieser Zustand dauert<br />
jedoch nicht ewig – Entwickler schlüpfen aus<br />
der Hacker-Larve und wollen Profis werden,<br />
der eine früher, der andere später.<br />
Csikszentmihalyi hat in [Csi04] beschrieben,<br />
welche Bedingungen nach diesem<br />
Zeitpunkt geeignet sind, um den persönlichen<br />
Flow in der Organisation zu ermöglichen<br />
und zu fördern (siehe auch Abbil -<br />
dung 2):<br />
■<br />
■<br />
■<br />
Klare Ziele: Jeder Mitarbeiter sollte<br />
wissen, was die Mission der Organi -<br />
sation und der Zweck des Produkts ist,<br />
das entwickelt wird.<br />
Gutes, zeitnahes Feedback: Mitar bei ter<br />
sollten jederzeit erkennen können, ob<br />
sie auf dem richtigen Weg sind.<br />
Inkrementelle Herausforderungen: Das<br />
steigert die Fähigkeiten der Mitarbeiter<br />
und vermeidet Langeweile.<br />
In manchen Organisationen kommt es vor,<br />
dass sich noch nicht einmal der CEO oder<br />
Vorstandsmitglieder die Mühe gemacht<br />
haben, den Zweck der Firma näher zu definieren.<br />
In diesem Fall liegt es in der<br />
Verantwortung der darunter liegenden<br />
Führungsebene, das auf den Tisch zu bringen<br />
und mit den Vorgesetzten zu klären.<br />
Geschäftsgrundlage und Kernwerte der<br />
Firma müssen im Verhalten der Führung<br />
sichtbar werden. Führen bedeutet, die<br />
Aufmerksamkeit auf die Ziele zu lenken,<br />
die zu verfolgen sind. Daher müssen<br />
Führungskräfte stark in der Kommunika -<br />
tion sein, die zur Lenkung der Aufmerk -<br />
samkeit dient.<br />
In anderen Organisationen sind der<br />
Zweck und die Mission bei der mittleren<br />
Führungsebene unklar, aber diese Men -<br />
schen trauen sich nicht nachzufragen, um<br />
nicht als uninformiert dazustehen. Es gibt<br />
mehrere Wege, wie man seinem Team oder<br />
seiner Abteilung die Ziele klarmachen<br />
kann. Dazu gehört intensives Nachdenken,<br />
bei dem man allein ist, und intensive<br />
Gespräche mit Kollegen, Vorgesetzten und<br />
Untergebenen zur Ideenfindung und als<br />
Realitätscheck.<br />
Schließlich kann es sein, dass die Mission<br />
den Untergebenen nicht klar ist. Das<br />
kommt am häufigsten vor, ist jedoch nicht<br />
unbedingt den Mitarbeitern geschuldet,<br />
sondern kann mehrere Ursachen haben.<br />
Meist liegt es daran, dass Führungskräfte<br />
glauben, die Mitarbeiter verstehen eine<br />
Situation dann, wenn die Führungskraft sie<br />
verstanden hat. Das ist jedoch nicht der<br />
Fall. Als Führungskraft müssen Sie durch<br />
häufige Gespräche sicherstellen, dass alle<br />
dasselbe Bild sehen. Schließlich kommen<br />
ständig neue Mitarbeiter hinzu und die<br />
Grundbedingungen des Geschäfts ändern<br />
sich ständig.<br />
1/2012
ausblick auf die<br />
Zeitnahes Feedback<br />
Es reicht nicht aus, wenn ein Mitarbeiter<br />
genau weiß, was zu tun ist. Er muss bei<br />
jedem Schritt, den er geht, auch wissen, ob<br />
er mit diesem dem Ziel näher kommt oder<br />
ob er sich davon entfernt. Darüber informiert<br />
er sich am besten durch Feedback,<br />
das aus drei wichtigen Quellen stammt:<br />
■<br />
■<br />
■<br />
Feedback von anderen Menschen.<br />
Feedback aus der Arbeit selbst.<br />
Feedback aus eigenen persönlichen<br />
Standards.<br />
Manager haben das Gefühl, dass Kom -<br />
muni kation zu ihren wichtigsten Aufgaben<br />
gehört und dass es davon in ihrer Orga -<br />
nisation immer noch zu wenig gibt. Das<br />
stimmt in vielen Fällen: Feedback von<br />
anderen Menschen zu bekommen, ist<br />
immer noch selten. Es ist wichtig, mit den<br />
eigenen Leuten in wirklichen Kontakt zu<br />
kommen, ihnen zuzuhören und Gelegen -<br />
heiten zu guter Arbeit für sie zu schaffen.<br />
Alle zu kennen, mit ihnen zu sprechen, sie<br />
um Rat zu fragen und ihnen zu berichten,<br />
was daraus geworden ist, sind gute<br />
Möglichkeiten, um ein Umfeld für Feed -<br />
back zu schaffen. Feedback gibt den<br />
Teammitgliedern die Möglichkeit, ihre<br />
Arbeit mit Freude zu machen und im Laufe<br />
des Prozesses zu wachsen. Auch das erfordert<br />
natürlich, dass der Manager sich einen<br />
Teil seiner psychischen Energie (auch<br />
Aufmerksamkeit genannt) für diesen<br />
Prozess reserviert.<br />
Dem Kunden oder den Benutzern die<br />
Zwischenergebnisse der Softwareentwick -<br />
lung zu zeigen, ist auch eine Form, um<br />
Feedback von anderen Menschen einzuholen.<br />
Dabei ist es wichtig, mit den<br />
Stakeholdern ein gemeinsames Gedächtnis<br />
aufzubauen: „Vor zwei Wochen hatten wir<br />
versprochen, Feature X einzubauen. Sie<br />
hatten es sich so und so gewünscht – heute<br />
können Sie es anschauen und uns sagen, ob<br />
wir es richtig implementiert haben.”<br />
Feedback kann auch aus dem Arbeits -<br />
prozess selbst kommen. Gerade die<br />
Softwareentwicklung hat eingebaute<br />
Indika toren dafür, ob man sich in die richtige<br />
Richtung bewegt oder nicht. Man kann<br />
die Anzahl der Features messen, die man<br />
ausliefert, die Anzahl der Fehler, die man<br />
dabei macht, die Zykluszeit, die man vom<br />
Beginn bis zum Ende einer Entwicklung<br />
braucht, die Länge von Warteschlangen vor<br />
einem Workflow-Schritt und vieles mehr.<br />
Quantitatives Management hat Teams<br />
geholfen, sich das Feedback zu holen, das<br />
Abb. 2: Wie entsteht Flow in der Organisation?<br />
sie brauchen, um sich selbst zu organisieren.<br />
Die eben genannten Metriken verändern<br />
im Alltag dadurch ihren Charakter:<br />
Sie werden nicht mehr als Kontrolle von<br />
oben erlebt, sondern als Mechanismus der<br />
Selbstbeobachtung und Verbesserung.<br />
Schließlich gibt es noch das Feedback, das<br />
von innen aus der eigenen Person und ihren<br />
Standards kommt. Ein guter Entwickler hat<br />
intuitiv ein Gefühl dafür, wie guter Code<br />
aussieht. Die Technik des Refaktorisierens<br />
ba siert auf „Code-Gerüchen”, die nichts<br />
anderes sind als persönliche Standards, die<br />
man aus Erfahrung gewonnen hat: „Diese<br />
Stelle im Code sieht aber kompliziert aus –<br />
muss diese Klasse das wirklich alles können<br />
oder sollten wir sie besser aufspalten?” oder<br />
„Die se Stelle im Code hat noch nie richtig<br />
funktioniert, komm lass uns sie endlich einmal<br />
aufräumen, so kann das einfach nicht<br />
bleiben!”, sind Feedback-Aussagen, die von<br />
innen kommen.<br />
Solche Überzeugungen gründen sich auf<br />
Erfahrung, werden aber manchmal so sehr<br />
zur zweiten Natur, dass sie wie ein intuitives,<br />
selbstverständliches Urteil daherkommen.<br />
Für Führungskräfte, wie Architekten<br />
zum Beispiel, ist es schwierig, in den<br />
Kollegen einen Sinn für so etwas zu wecken,<br />
denn meist können sie selbst nicht erklären,<br />
wie sie zu dieser Ansicht gekommen sind.<br />
Das Beste ist, Sie machen sich zunächst Ihre<br />
eigenen Standards explizit klar und nutzen<br />
anschließend jede Gelegenheit, um sie im<br />
Job anzuwenden und darüber zu sprechen.<br />
So können auch andere die Standards<br />
erkennen und daraus lernen.<br />
Inkrementelle<br />
Herausforderungen<br />
Lean strebt einen gleichmäßigen Arbeits -<br />
fluss an. Jedes Arbeitspaket braucht seine<br />
Zeit, um einmal durch den Workflow zu<br />
gehen. Der Workflow ist teamspezifisch,<br />
typische Stationen können z. B. so heißen:<br />
Backlog, ausgewählt, Verstehen, Umsetzen,<br />
Bereitstellen, Akzeptanz testen, Fertig. Den<br />
Durchlauf eines Arbeitspakets durch diesen<br />
Workflow nennt man einen Zyklus. Die<br />
Zeit, die dafür benötigt wird, nennt man<br />
die Zykluszeit (Cycle Time). In Lean versuchen<br />
Teams, diese Zykluszeit kontinuierlich<br />
zu reduzieren, um den Anteil an<br />
Verschwendung, der darin steckt, zu verringern<br />
und den Anteil des geschaffenen<br />
Wertes zu maximieren.<br />
Die zweite Verbesserung gilt dem Service,<br />
der für den Kunden geboten wird. Zum<br />
Beispiel misst das Team die Zykluszeiten<br />
für typische Arbeitspakete und versucht,<br />
daraus eine Gesetzmäßigkeit zu erkennen.<br />
Diese kann das Team dem Kunden dann als<br />
Service-Vereinbarung anbieten: „Wenn du<br />
Kunde uns ein Arbeitspaket der und der<br />
Größe und Art gibst, liefern wir dir die<br />
34 35
ausblick auf die oop 2012<br />
■ Das Pull-Prinzip in Lean erlaubt es den<br />
Mitarbeitern, sich nur so viel Arbeit zu<br />
ziehen, wie sie gleichzeitig erledigen<br />
(G2) und auch vollenden können (G1).<br />
■ Der Fokus auf den Wert, der für den Kun -<br />
den erzeugt wird, liefert die klaren Ziele<br />
(G3) und ermöglicht Konzen tration (G2).<br />
Tabelle 1: Einfluss der vier Lean-Praktiken auf den Flow in der Psyche.<br />
Lösung in typischerweise 40 Tagen, inklusive<br />
Deployment und aller Tests.” Das<br />
Team misst dann, in wie viel Prozent der<br />
Fälle es diese Vereinbarung einhalten konnte,<br />
und versucht, diesen Prozentsatz ständig<br />
zu verbessern.<br />
Entwickler, Software- oder Systemarchi -<br />
tek ten und Oberflächen-Designer – sie alle<br />
versuchen, ihre Fähigkeiten immer weiter<br />
zu perfektionieren. Meisterschaft ist ein<br />
wesentlicher Treiber von Flow. Damit stellt<br />
sich das Team selbst eine inkrementelle<br />
Herausforderung im Sinne des Flow-<br />
Begriffs von Csikszentmihalyi. Flow in<br />
Lean und Flow in der Psyche wachsen<br />
zusammen – das eine führt zum jeweils<br />
anderen (siehe Abbildung 1).<br />
Gegenwart oder Zukunft<br />
Flow zeigt sich auch bei der Planung und<br />
Fortschrittsverfolgung. Der Kunde fragt das<br />
Team möglicherweise: „Wann werdet ihr<br />
mit dem fertig sein, was ich fordere?”. In<br />
traditionellen Projektmanagement-Verfah -<br />
ren (und in manchen agilen Verfah ren ebenso)<br />
versucht das Team, eine Schätzung nach<br />
bestem Wissen und Gewis sen abzugeben<br />
und zum Endtermin, der aus dieser Schät -<br />
zung resultiert, fertig zu sein. Unterwegs<br />
vergleicht es die Abweichungen von<br />
Schätzung und Realität. Die Menschen<br />
befinden sich mit ihren Gedanken dabei fast<br />
immer in der Vergangenheit („Was haben<br />
wir neulich versprochen?”) oder in der<br />
Zukunft („Oh, der vorausgesagte Termin<br />
naht!”). Das Gefühl für die vergehende Zeit<br />
tritt stark in den Vordergrund, und es entsteht<br />
eine Kultur des Schätzens und<br />
Verschätzens, des Verhandelns und Nach -<br />
verhandelns. Diese Kultur steht im direkten<br />
Widerspruch zu Flow, ja sie verhindert Flow<br />
in der Psyche fast sofort. Je wichtiger die<br />
vergehende Zeit wird, desto weniger wichtig<br />
wird die Software, die man schreibt.<br />
In Lean versucht man, mit seinen<br />
Gedanken in der Gegenwart zu sein. Das<br />
Team hört auf, zu schätzen und das zu<br />
betrachten, was in der Zukunft liegt. Es<br />
beginnt, das zu messen, was gerade im<br />
Moment stattfindet und ist deshalb mit den<br />
Gedanken in der Gegenwart. Das Gefühl<br />
für die vergehende Zeit tritt in den<br />
Hintergrund, so kann Flow in der Psyche<br />
entstehen. Der Kunde bekommt dieselbe<br />
Auskunft, die er in den traditionellen<br />
Verfahren auch bekam, nur basiert diese in<br />
einem Fall auf Schätzen, im Lean-Fall auf<br />
Messen und Extrapolieren. „Lieber Kunde,<br />
du forderst zehn kleine und acht große<br />
Arbeitspakete. Die Messungen für kleine<br />
Pakete haben eine durchschnittliche<br />
Zyklus zeit von 5 Tagen ergeben, die für<br />
große Pakete eine von 15 Tagen. Wir bearbeiten<br />
immer 3 Pakete gleichzeitig, also<br />
werden wir deinen Stapel voraussichtlich in<br />
(10*5+8*15)/3=57 Tagen fertig haben.”<br />
Flow in Lean fördert Flow<br />
in der Psyche<br />
In diesem Beitrag habe ich gezeigt, dass es<br />
zwei Arten von Flow gibt: Flow in Lean<br />
und Flow in der Psyche. Ich behaupte nun:<br />
Flow in Lean ist geeignet, bei der Arbeit<br />
Flow in der Psyche hervorzurufen, weil<br />
Lean Eigen schaften hat, die die am Anfang<br />
des Artikels genannten Bedingungen G1 bis<br />
G4 erfüllen, unter denen Flow in der<br />
Psyche entstehen kann (siehe Tabelle 1):<br />
Visualisieren und Messen liefern das sofortige<br />
Feedback (G4).<br />
Das Pull-Prinzip fördert außerdem das<br />
Gefühl, dass man Kontrolle über die eigene<br />
Arbeit hat (G6). Wenn die Firmenkultur<br />
(wie in Lean üblich) auf Stockungen im<br />
Fluss und nicht so sehr auf den Schuldigen<br />
achtet, kann das bei den Mitarbeitern dazu<br />
führen, weniger besorgt um die eigene<br />
Zulänglichkeit zu sein – paradoxerweise<br />
steigt diese gerade mit den Fähigkeiten, die<br />
man im Flow erwirbt, an (G7). Die besondere<br />
Art von Messen und Planen in Lean<br />
bringt die Gedanken in die Gegenwart, die<br />
man sonst an die Zukunft verschwendet.<br />
Das reduziert die mentale Anstrengung und<br />
verändert das Zeitgefühl (G5, G8).<br />
Als Manager einer Produktentwicklungs -<br />
orga nisation sind Sie also im Vorteil, wenn<br />
Sie Flow explizit fördern. Sie reduzieren<br />
Kosten (durch Flow in Lean) und erzeugen<br />
ein Klima, in dem Mitarbeiter gern arbeiten<br />
(durch Flow in der Psyche) – ein Weg zur<br />
nachhaltigen Stärkung Ihrer Firma. ■<br />
Literatur<br />
[And10] D.J. Anderson, Kanban, Blue Hole<br />
Press 2010<br />
[Boh10] M. Bohlen, Softwareprojekte quantitativ<br />
managen: Ein Weg zum performanten<br />
Team, in: OBJEKTspektrum 4/2010<br />
[Csi04] M. Csikszentmihalyi, Good business:<br />
leadership, flow, and the making of meaning<br />
(Reprint), Penguin Books 2004<br />
[Csi08] M. Csikszentmihalyi, Flow : The<br />
Psychology of Optimal Experience, Harper<br />
Collins 2008<br />
[Dem00] W.E. Deming, Out of the crisis, MIT<br />
Press 2000<br />
[Gol90] E.M. Goldratt, What is this thing called<br />
theory of constraints and how should it be<br />
implemented?, North River Press 1990<br />
[Pop03] M. Poppendieck, T. Poppendieck,<br />
Lean software development: an agile toolkit,<br />
Addison-Wesley Professional 2003<br />
[Sen10] P.M. Senge, The Fifth Discipline: The<br />
Art and Practice of the Learning Organization,<br />
Random House 2010<br />
1/2012
ausblick auf die<br />
„ICH HABE TEAMS<br />
BUCHSTÄBLICH VERRÜCKT WERDEN SEHEN”<br />
Interview mit Matthias Bohlen<br />
■■? Matthias, du bist verantwortlich für<br />
den diesjährigen OOP-Track „People &<br />
Soft Skills”. Ich habe dich als<br />
Softwarearchitekten kennen gelernt. Bist<br />
du der Technologie untreu geworden, da<br />
du dich nun den „weichen” Themen widmest?<br />
■■! (Lacht) Untreu auf keinen Fall, doch<br />
ich habe gesehen, wie viel technisches<br />
Know-how, wie viel Gehirnschmalz und<br />
Motivation wirklich guter Software -<br />
architekten im Dickicht der Unternehmens -<br />
organisation verschwinden kann. Architek -<br />
ten sind notorisch überlastete Menschen,<br />
laufen von Meeting zu Meeting und sind<br />
mit der Architekturdokumentation doch<br />
ständig im Hintertreffen. Später habe ich<br />
gesehen, dass dieses Phänomen nicht nur<br />
bei Architekten auftritt, sondern bei allen,<br />
die in der Softwareentwicklung tätig sind.<br />
Das möchte ich ändern. Ich habe mich deshalb<br />
verstärkt damit beschäftigt, wie<br />
Menschen arbeiten, wie sie ihre Zusam -<br />
men arbeit organisieren und was sich dabei<br />
im Hirn und Gemüt der Leute abspielt.<br />
■■? Glaubst du, dass in der Beherrschung<br />
der weichen Themen ein größerer Hebel<br />
für den Erfolg bei der Softwareentwicklung<br />
liegt als in den technischen Themen, wie<br />
Architektur oder Datenbank-Design?<br />
■■! Das kommt auf die Situation an, in der<br />
die Leute stecken. Ein typisches Beispiel:<br />
Ein Team entwickelt ein Produkt, das<br />
bereits bei einigen Kunden im Einsatz ist.<br />
Von diesen Kunden kommen Bugs und<br />
Change-Requests, die von den Consultants<br />
aufgenommen und ins Team getragen werden.<br />
Gleichzeitig arbeitet der Vertrieb an<br />
neuen Interessenten und versucht, sie zu<br />
Kunden für dasselbe Produkt zu machen,<br />
indem er die Bedürfnisse der Interessenten<br />
in Features des Produkts verwandelt.<br />
Schließlich gibt es noch den Unternehmens -<br />
gründer, der eine strategische Vorstellung<br />
davon hat, wohin er mit dem Produkt kommen<br />
will. Er stellt also auch Anforderungen<br />
für neue Features.<br />
Was macht jetzt das Team, das dieses<br />
Produkt entwickelt? Folgt es dem Chef,<br />
dem Vertrieb oder den Consultants? Und<br />
zu wie viel Prozent folgt es wem? Ich habe<br />
Teams buchstäblich verrückt werden sehen<br />
(und war auch selbst schon Mitglied solcher<br />
Teams, allerdings nicht als der Coach,<br />
der ich jetzt bin). Im Alltag hat man gerade<br />
ein neues Feature angefangen, da kommt<br />
plötzlich ein dringender Bug dazwischen,<br />
also Griffel fallen lassen und erst den Bug<br />
beseitigen, dann am Feature weitermachen<br />
und nach drei Monaten fragt der Chef,<br />
warum seine Strategie noch keinen Deut<br />
weitergekommen ist.<br />
Ich hatte einfach das Gefühl: Da kann ich<br />
als Architekt, Entwickler, QA-Mensch oder<br />
Betreiber technisch noch so gut sein, ich<br />
werde in solch einer Organisation für den<br />
Kunden keinen Blumentopf gewinnen können.<br />
Seit 2001 hatte ich mich mit agilen<br />
Methoden wie XP und Scrum beschäftigt,<br />
in 2009 hörte ich von Kanban, und da hat<br />
es „klick” gemacht. Endlich ein Ansatz -<br />
punkt, um zu verstehen, wie Menschen ti -<br />
cken und wie man die Arbeit so gestalten<br />
kann, dass sie dem auch wirklich entspricht.<br />
Lean und Kanban brachten in meinem<br />
Kopf die Ideen zusammen, die ich vorher<br />
schon gesammelt hatte: systemisches<br />
Denken, komplexe adaptive Systeme und<br />
Kognitionswissenschaft.<br />
■■? In deinem Artikel „Flow in Lean, Flow<br />
im Team” ziehst du den Vergleich zwischen<br />
dem Fluss in der Arbeit und dem Fluss in<br />
der Seele. Was sind deine persönlichen<br />
Erfahrungen damit?<br />
■■! Ich hatte einen serverbasierten Kalen -<br />
der, in dem ich meine Termine verwaltete.<br />
Leute schickten mir Anfragen, die ich<br />
annahm oder ablehnte. Vor Jahren hatte<br />
ich als Architekt die Angewohnheit, die<br />
Termine dicht zu legen, also von 09:00 bis<br />
10:00, dann von 10:15 bis 11:15, dann von<br />
13:00 bis 15:00, dann von 15:15 bis …<br />
usw. Du weißt, was ich meine. Ich merkte<br />
bald, dass das nicht funktioniert. Ich konnte<br />
zwar an Meetings teilnehmen, aber ich<br />
konnte die Themen nicht mehr sauber vorund<br />
nachbereiten. Fast keines der Themen<br />
kam richtig zu einem Abschluss – ich wuss -<br />
te jedoch nicht, woran das liegt. Also ließ<br />
ich mir größere Abstände zwischen den<br />
Meetings, doch auch das funktionierte<br />
nicht wirklich gut.<br />
„Es ist wie auf einer Autobahn,<br />
die du nach Autos pro Quadratmeter<br />
(Kapazität) belegst, anstatt nach<br />
Autos pro Stunde (Flow)”.<br />
Hinter dem Ganzen steckte ein Denkfehler.<br />
Ich hatte das falsche mentale Modell.<br />
Wissensarbeit ist ein Flow-Problem, kein<br />
Kapazitätsproblem. Ich hatte mit meinem<br />
Kalender versucht, die Nachfrage gegen<br />
meine Zeitkapazität auszubalancieren. Das<br />
taugte nichts, weil jede nachgefragte<br />
Tätigkeit in sich Variabilität enthält, die<br />
sich bei Ketten voneinander abhängiger<br />
Tätigkeiten so aufaddiert, dass die verplante<br />
Kapazität plötzlich durch andere Dinge<br />
belegt wird. Es ist wie auf einer Autobahn,<br />
die du nach Autos pro Quadratmeter<br />
(Kapazität) belegst anstatt nach Autos pro<br />
Stunde (Flow). Also habe ich umgestellt. Es<br />
geht mir heute nicht mehr darum, die<br />
Stunden möglichst effizient zu belegen,<br />
sondern möglichst ein bis zwei Themen pro<br />
Woche wirklich durchzubringen. Ich lehne<br />
heute ein Meeting nicht mehr ab, wenn die<br />
Stunden belegt sind, sondern wenn in meinem<br />
Kopf noch ein bis zwei weitere<br />
Themen sind, die erst weiterfließen wollen,<br />
bevor der Kopf ein neues angehen kann.<br />
Kommt ein Meeting zum selben Thema,<br />
nehme ich es trotzdem an. Und siehe da:<br />
Ich habe mehr Freude an der Arbeit, bin<br />
mit den Gedanken mehr in der Gegenwart,<br />
habe das Gefühl, endlich mal etwas fertig<br />
zu kriegen und dadurch Wert für meine<br />
Kunden und für mich zu schaffen.<br />
■■? Damit hast du dann ja deine persönlichen<br />
Zielkoordinaten für die Arbeit der<br />
nächsten Zeit. Schauen wir uns aber einmal<br />
in der IT-Welt um uns herum um: Was sind<br />
36 37
ausblick auf die oop 2012<br />
deiner Meinung nach die einflussreichsten<br />
IT-Trends der nächsten Jahre?<br />
■■! Wechseln wir also mal in den Glas -<br />
kugelmodus (lacht). Das Denken in Flow<br />
und in Systemen wird der Trend werden.<br />
Ideen bewegen sich in einem System wie<br />
Agenten, die miteinander und mit dem<br />
System interagieren und das System<br />
dadurch verändern. Das Ganze gehorcht<br />
Regeln, die neu entstehen, sich bewähren<br />
und wieder sterben. Das Business läuft heute<br />
schon so – nichts ist mehr fest, alles fließt<br />
und verändert sich. Jetzt müssen wir in der<br />
IT noch hinterher, dasselbe Verständnis<br />
aufbauen und uns geeignet verhalten. Hier<br />
ein paar Beispiele: Die Lean-Startup-Szene<br />
macht uns das gerade explizit vor – von<br />
denen können wir viel lernen. DevOps wird<br />
auch so ein Trend werden, denn es macht<br />
uns aktionsfähig. Im Verhältnis von<br />
Kunden zu Entwicklungsorganisationen<br />
wird sich einiges verschieben: Man wird<br />
von großen „One-Shot”-Projekten zu längerfristiger,<br />
vertrauensvoller Zusammen -<br />
arbeit kommen und den Blick mehr und<br />
mehr von den Kosten auf den Wert lenken<br />
können. One-Shots werden weiter scheitern.<br />
Es wird jedoch bestimmt noch 20<br />
Jahre dauern, bis endlich auch der öffentliche<br />
Sektor mit One-Shots aufhört, die er<br />
per europaweiter Ausschreibung an den<br />
billigsten Anbieter vergibt. Das wird so lange<br />
dauern, weil der Gesetzgeber erst mitmachen<br />
muss.<br />
■■? Auf was freust du dich am meisten,<br />
wenn du auf das Programm der OOP<br />
schaust?<br />
■■! Auf den Austausch der kreativen Leute<br />
untereinander. Wir haben in diesem Jahr<br />
Sprecher aus so vielen verschiedenen<br />
Richtungen dabei, die etwas komplett<br />
Neues schaffen können, indem sie sich<br />
zusammentun. In London z. B. bringt man<br />
Softwareleute, Künstler, Juristen und<br />
Wirtschaftswissenschaftler in einem neuen<br />
Studiengang zusammen, in dem Kreativität<br />
explizit gefördert wird. Neil Maiden ist<br />
Professor dort und kommt als Sprecher auf<br />
die OOP. Seine Kollegin Bianca Hollis und<br />
er werden uns davon berichten, wie man<br />
Kreativtechniken in agilen Projekten nutzen<br />
kann, um Anforderungen besser zu<br />
beschreiben. Johanna Rothman, Diana<br />
Larsen und alle, die ich gar nicht so schnell<br />
aufzählen kann, bringen Wissen darüber<br />
mit, wie man kreative Menschen erkennt<br />
und einstellt, mit ihnen innovative und<br />
komplexe Vorhaben startet, darin die<br />
Konflikte löst, in den Flow kommt, durch<br />
Selbstorganisation eine Verantwortungs -<br />
kultur aufbaut und seinen Einfluss ausübt,<br />
um mit diesen Menschen Dinge erledigt zu<br />
bekommen. Ich hoffe, dass die Teilnehmer<br />
und Sprecher auch die Open-Arena rege<br />
nutzen werden. Dort kann man eigene<br />
Themen angehen, die heute noch nicht im<br />
Konferenzprogramm stehen. Ich bin<br />
gespannt, wie das klappt, und freue mich<br />
darauf.<br />
■<br />
1/2012
ausblick auf die<br />
interview mit ...<br />
WAS UNS ZU ERFOLGREICHEN<br />
PROJEKTEN FÜHRT …<br />
… UND MANCHMAL<br />
AUCH DAVON ABHÄLT<br />
… Diana Larsen,<br />
die als Partner und Senior Consultant der Firma<br />
Future Works Consulting an der Schaffung von<br />
Arbeitsplätzen beteiligt ist, wo Teams in Ruhe hochproduktive<br />
Softwarelösungen entwickeln können.<br />
Unter anderem coacht sie Teamleiter in Change-<br />
Mangement-Prozessen.<br />
■■? In Ihrem OOP-Tutorial sprechen Sie<br />
über Verhaltensweisen, die drei Hinder -<br />
nisse für ein effektives Management eines<br />
Agilen Unternehmens verursachen: 1) ma -<br />
gi sches Denken, 2) die Illusion von Kon -<br />
trolle, 3) die Phantasie von individueller<br />
Schuld. Welches sind Ihre persönlich wichtigsten<br />
Erfahrungen damit?<br />
■■! Alle drei üben starke Kräfte aus, die die<br />
Organisationen davon abhalten, die<br />
Ergebnisse zu erreichen, die sie eigentlich<br />
wollen, obwohl das konventionelle Denken<br />
uns (Managern und dem Rest von uns) suggeriert,<br />
dass sie der Pfad zum Erfolg sind.<br />
Das übergreifende und sie zusammenfassende<br />
Prinzip fokussiert auf die verschiedenen<br />
Teile (ein Termin, ein Mitarbeiter, ein<br />
Plan), anstatt die Aufmerksamkeit auf das<br />
ganze System (ein Team, eine Abteilung, ein<br />
„Es ist eigentlich paradox, dass<br />
wir erst dadurch mehr Kontrolle<br />
über komplexe Ergebnisse<br />
bekommen, dass wir auf die Kontrolle<br />
über die Teile verzichten.”<br />
Unternehmen) oder das große Ganze<br />
(Industrie, Markt, Wirtschaft) zu richten.<br />
Wenn meine Kunden beginnen, systemisch<br />
zu denken, eröffnen sie neue Möglichkeiten<br />
für sich selbst und kommen den Er -<br />
gebnissen näher, die sie wirklich wollen. Es<br />
ist eigentlich paradox, dass wir erst<br />
dadurch mehr Kontrolle über komplexe<br />
Ergebnisse bekommen, dass wir auf die<br />
Kontrolle über die Teile verzichten.<br />
■■? Sie sind Software-Engineering-Bera -<br />
terin. Was ist für Sie der wesentliche Unter -<br />
schied zwischen der Arbeit mit Entwicklern<br />
und der mit Managern?<br />
■■! Der Unterschied liegt in der Pers -<br />
pektive. Jede Gruppe hat unterschiedliche<br />
Informationen und ein unterschiedliches<br />
Gefühl für den Kontext, der uns zu Kom -<br />
munikationsproblemen und Missver -<br />
ständnis sen von Handlungen, aber auch zu<br />
unverständlichen Verhaltensweisen und<br />
Entscheidungen führt. Ich habe viel Spaß<br />
daran, jedem mehr Klarheit über die Sicht<br />
des anderen zu verschaffen, ihn verstehen<br />
zu lassen, welchen Wert das schafft, und<br />
ihn lernen zu lassen, um seine<br />
Wahrnehmungslücken zu schließen. In der<br />
Softwareentwicklung ist die „universelle<br />
Sprache”, über die Eric Evans in seinem<br />
Domain Driven Design schreibt, ein Schritt<br />
in die richtige Richtung.<br />
■■? In Ihrem neuen Buch „Liftoff: Laun -<br />
ching Agile Teams and Projects” betonen<br />
Sie auch die Bedeutung von Zielbildung für<br />
den Projekterfolg. Ist das nicht der wich -<br />
tigs te kritische Erfolgsfaktor in der Soft -<br />
wareentwicklung?<br />
„Wenn die Menschen verstehen, zu welchem<br />
Gesamtergebnis ihre Arbeit beitragen<br />
soll, blüht ihre Performance auf.”<br />
■■! In unserem Buch diskutieren wir viele<br />
Aspekte, wie man mit seinem Projekt gut<br />
aus den Startlöchern kommt, und eben<br />
auch den vielleicht wirkungsvollsten<br />
Aspekt in unserem Agile-Chartering-Mo -<br />
dell: das Element Zielbildung. Daniel Pink<br />
beschreibt in seinem Buch „Drive” die<br />
Motivationskraft von Selbstbestimmung,<br />
Macht und Ziel. Wenn die Leute verstehen,<br />
zu welchem Gesamtergebnis ihre Arbeit<br />
beitragen soll und wie diese Arbeit andere<br />
positiv beeinflussen kann, blüht ihre<br />
Performance auf – mit durch Studien belegten<br />
Steigerungen, bis hin zur Verdoppelung<br />
gegenüber vorher.<br />
Ich habe immer wieder gemerkt, dass die<br />
frühzeitige Definition des Ziels – bereits zu<br />
Beginn des Projekts – und insbesondere die<br />
Möglichkeit für Teammitglieder, dieses Ziel<br />
mit dem Produktmanager zu diskutieren, es<br />
gründlich zu verstehen und nach Mög -<br />
lichkeit zu beeinflussen, wesentlich zur<br />
Motivation des Teams beiträgt und die mit<br />
neuen Projekten verbundene Lernkurve<br />
beschleunigt. Ein definiertes Ziel hilft, das<br />
Bewusstsein für die Erwartungen, das<br />
Potenzial und die Intention des Projekts<br />
schon zu Beginn zu fassen. Deshalb haben<br />
wir (neben Alignment und Kontext)<br />
Zielbildung als eines der der drei Elemente<br />
des Agile Chartering aufgenommen. Wenn<br />
wir bei der Arbeit ein Bewusstsein für die<br />
Zielbildung haben, vertieft sich unser<br />
Commitment, unser Antrieb wächst und<br />
die Performance steigt.<br />
■■? Mit dieser Einschätzung stehen Sie<br />
aber nicht allein da, oder?<br />
■■! Stimmt. Jeffrey Katzenbach und<br />
Douglas Smith nennen in „Wisdom of<br />
Teams” die gemeinsame Zielbildung als<br />
wichtigste Charakteristik von effektiven<br />
Teams. Diesen Standpunkt unterstützen<br />
38 39
ausblick auf die oop 2012<br />
auch Geoffrey Bellman und Kathleen Ryan<br />
in ihrem Modell von den Bedürfnissen<br />
außerordentlicher Teams: „Die gemeinsame<br />
Zielbildung ist der Grund, warum wir<br />
zusammen kommen […], wo gebündelte<br />
Energie und Fähigkeit eine gemeinsame<br />
Basis dafür sind, etwas zu erreichen, das<br />
von einzelnen Individuen nicht erreichbar<br />
wäre”.<br />
Zielbildung verleiht auch die notwendige<br />
Kraft im Angesicht von widrigen oder sich<br />
ändernden Bedingungen. John Baldoni<br />
schreibt in einem CNN-Artikel: „Gerade in<br />
schwierigen Zeiten ist die Zielbildung<br />
besonders notwendig. Und auch der<br />
Präsident der University of Central Okla -<br />
homa sagte in einem Interview: „Wenn die<br />
Menschen die Zielbildung nicht fühlen und<br />
wissen, dass sie Dinge zu dieser Zielbildung<br />
beitragen und damit die Sache voranbringen,<br />
können schlechte Nachrichten sie<br />
wirklich runterziehen.” Folglich verlangsamen<br />
schlechte Nachrichten – egal welcher<br />
Art – die Produktivität, während das<br />
Verständnis der Zielbildung das Team<br />
gewissermaßen dagegen immunisiert.<br />
■■? Was genau verstehen Sie denn unter<br />
Zielbildung?<br />
■■! In unserem Modell beinhaltet die<br />
Zielbildung drei Komponenten: die<br />
Produktvision, die Projektziele und Ziel-<br />
Tests. Die Produktvision beschreibt in groben<br />
Zügen den angestrebten Geschäftsund<br />
Kundennutzen, Unterscheidungsmerk -<br />
male und Features, die die Idee und den<br />
Sinn des Produkts widerspiegeln. Die<br />
Projektziele beschreiben den eindeutigen<br />
Beitrag dieses Projekts und dieses Teams<br />
auf dem Weg zur Realisierung der<br />
Produktvision. Zur Produktvision tragen<br />
mehrere Projekte und Teams bei und jedes<br />
braucht das Verständnis für seinen Platz.<br />
Die Abnahmekriterien ermöglichen es uns,<br />
das erfolgreiche Projektergebnis zu erkennen.<br />
Zusammen mit ihnen hält man wenige<br />
kritische qualitative und quantitative<br />
„Definitions of Done” in seinem Projekt<br />
fest. Sie verändern sich aber im Laufe eines<br />
Projekts durchaus auch einmal, wenn das<br />
Team besser versteht, was wirklich<br />
gewünscht wird und erreichbar ist.<br />
Ich treffe immer wieder auf hoch talentierte<br />
Teams – egal ob agil oder nicht –, die<br />
daran scheitern, die richtigen Ergebnisse zu<br />
produzieren, weil ihre Produktmanager<br />
oder Product Owner nicht in de Lage sind,<br />
„Ich bin immer wieder auf hoch<br />
talentierte Teams getroffen,<br />
die daran scheitern, die richtigen<br />
Ergebnisse zu produzieren, weil ihre<br />
Produktmanager nicht in der Lage<br />
sind, eine klare Produktvision und ein<br />
klares Projektziel zu vermitteln.”<br />
eine klare Produktvision und ein klares<br />
Projektziel zu vermitteln. Indem wir uns die<br />
Zeit nehmen, die Vision zu formulieren,<br />
schaffen wir bessere Standards zur<br />
Priorisierung der Bewertung der Backlog-<br />
Einträge.<br />
■■? Diana, auch auf der OOP halten Sie<br />
einen Vortrag darüber, wie man Teams und<br />
Projekt zum Erfolg führt. Glauben Sie, dass<br />
die Menschen der kritische Faktor für den<br />
Projekterfolg sind? Und wie groß ist der<br />
Einfluss von Prozessen und Werkzeugen?<br />
■■! Das sind jetzt zwei Fragen! Natürlich<br />
sind die Menschen der kritische Erfolgs -<br />
faktor und natürlich machen gute Men -<br />
schen in einem schlecht geführten System<br />
schlechte Arbeit oder verbrennen. Schlecht<br />
oder falsch vorbereitete Menschen können<br />
in einem an Ergebnissen orientierten<br />
System die Produktivitätsstandards nicht<br />
erreichen. Es ist ein komplexer Tanz von<br />
dem Ganzen (dem organisatorischen<br />
System) und seinen Teilen (den betroffenen<br />
Menschen). Im Übrigen sind Manager ja<br />
auch Menschen, also beeinflusst auch ihr<br />
Verhalten das Gesamtergebnis. Definierte<br />
Prozesse und Werkzeuge können die Arbeit<br />
unterstützen und auf den Weg bringen. Es<br />
lohnt sich, das Arbeitssystem als Ganzes<br />
und die angestrebten Ergebnisse sorgfältig<br />
zu überdenken und die Menschen mit ihrer<br />
Arbeit einzubeziehen, wenn man über<br />
Prozesse und Werkzeuge nachdenkt. Also:<br />
Es sind die Individuen und die Inter -<br />
aktionen durch Prozesse und Werkzeuge.<br />
■■? Worauf freuen Sie sich am meisten auf<br />
der kommenden OOP?<br />
■■! Ich freue mich auf das, was in den<br />
Open-Area-Sessions entstehen wird, wenn<br />
neue Kollegen und alte Bekannte sich treffen<br />
und gegenseitig Ideen austauschen –<br />
sowohl über meine Session als auch über<br />
mein oben genanntes Buch, das ich gemeinsam<br />
mit Ainsley Nies geschrieben habe,<br />
und natürlich auf die neuen Erkenntnisse<br />
und Arbeiten der anderen. Ich liebe es, agile<br />
Praxiserfahrungen zu hören, sowohl die<br />
guten als auch die schlechten, denn jede<br />
gute Sache braucht eine gute Krise. ■<br />
1/2012
uchbesprechung für sie gelesen von ...<br />
mehr zum thema:<br />
http://www.theleanstartup.com<br />
THE LEAN STARTUP<br />
Die Zielgruppe des Buchs „The Lean Startup” von Eric Ries ergibt sich aus dessen Definition<br />
des Begriffs „Startup”: Ein Startup ist eine Unternehmung, die mit dem Ziel gegründet wurde,<br />
in einem hoch dynamischen und dadurch unsicheren Marktumfeld innovative Produkte und<br />
Dienstleistungen zum Erfolg zu bringen. Dieses Buch richtet sich also nicht nur an kleine<br />
Garagenfirmen, sondern genauso an die Produktentwicklungsbereiche großer Konzerne.<br />
... Dr. Yves Stalgies,<br />
(E-Mail: stalgies@etracker.com),<br />
PMP, Direktor IT bei der etracker GmbH in Hamburg.<br />
Mit der The Lean Startup-Methode, die<br />
Eric Ries in seinem Buch vorstellt, möchte<br />
er die Erfolgsrate dieser Unternehmungen<br />
deutlich steigern.<br />
Der Schlüssel ist die Erkenntnis, dass<br />
auch ein Startup systematisch gemanagt<br />
werden kann (und muss) und daher Entre -<br />
preneurship nicht Heldentum ist, sondern<br />
eine Management-Disziplin und dass der<br />
Entrepreneur derjenige ist, der dafür sorgt,<br />
dass die richtige Balance zwischen „just do<br />
it” und monatelanger Business-Planung<br />
gefunden wird. Auch wenn Innovationen<br />
schwer vorhersagbar sind, können sie<br />
gemanagt werden. Das Motto ist: „Work<br />
smarter, not harder”. Eric Ries beschreibt<br />
in seinem englischsprachigen Buch auf 336<br />
Seiten, wie das geht.<br />
Das Buch gliedert sich in drei Teile:<br />
■ Vision: Im ersten Teil werden die Be -<br />
griffe „Startup” und „Entrepreneur”<br />
definiert. Außerdem werden die<br />
Kernelemente der Methode, die Pro -<br />
zess kette „Build-Measure-Learn” und<br />
„Validated Learning” eingeführt.<br />
■ Steer: Basierend auf der grundlegenden<br />
Methodik werden in diesem Kapitel<br />
Werkzeuge vorgestellt, mit denen<br />
sichergestellt werden kann, dass die<br />
Unternehmung die richtige Richtung<br />
einschlägt. Dazu werden die Konzepte<br />
des „Minimal Viable Products” und<br />
das „Innovation Accounting” erläutert.<br />
■ Accelerate: Wenn die richtige Richtung<br />
eingeschlagen ist, geht es darum, die<br />
Geschwindigkeit zu erhöhen. In diesem<br />
Kapitel wird beschrieben, an welchen<br />
Stellschrauben gedreht werden kann.<br />
Teil 1: Die Vision<br />
Der Entrepreneur ist verantwortlich für die<br />
Vision der Unternehmung und leitet daraus<br />
eine Strategie ab, aus der sich wiederum die<br />
Produktdefinition ergibt. Er hat die Auf -<br />
gabe, die Unternehmung durch Chaos und<br />
Unsicherheit zu lenken, indem er zum richtigen<br />
Zeitpunkt Entscheidungen trifft, die<br />
messbar und nachvollziehbar sind. Diese<br />
Eric Ries<br />
The Lean<br />
Startup:<br />
How Today's<br />
Entrepreneurs<br />
Use Continuous<br />
Innovation to<br />
Create Radically<br />
Successful Businesses<br />
ACrown Business, September 2011<br />
336 Seiten (auf englisch)<br />
18,80 € (Kindle 13,32 €)<br />
ISBN-13: 978-0307887894<br />
Entscheidungen sind im Modell des Autors<br />
entweder Pivots, d. h. radikale und mutige<br />
Änderungen in der Strategie (während die<br />
Vision beibehalten wird), oder aber die<br />
Erkenntnis, die aktuelle Richtung beizubehalten<br />
und nur am Produkt zu tunen<br />
(Preserve).<br />
Die Entscheidung wird am Ende der<br />
Feedback-Schleife Build-Measure-Learn<br />
getroffen (ein Durchlauf durch die BML-<br />
Schleife wird im Folgenden auch als<br />
Experiment bezeichnet). Der Lernerfolg<br />
muss sich dabei in Metriken widerspiegeln,<br />
die demonstrieren, dass das Team wertvolle<br />
Erkenntnisse über die aktuelle Lage des<br />
Startups und dessen Fortschritt herausgefunden<br />
hat. Ries nennt das „Validated<br />
Learning” – für ihn handelt es sich dabei<br />
um das wichtigste Fortschritt-Messgerät<br />
des Startups. Analog zum Lean-<br />
Management geht es auch beim Lean-<br />
Startup-Modell um die Vermeidung von<br />
Verschwendung: Es geht darum, dass alles,<br />
was zu keinem nachvollziehbaren<br />
Lerneffekt führt, Ver schwendung ist.<br />
Um einen Lerneffekt erreichen zu können,<br />
muss ein Build – das Minimal Viable<br />
Product (MVP) – erstellt und potenziellen<br />
Kunden zur Verfügung gestellt werden.<br />
Gemeint ist dasjenige Produkt, mit dem in<br />
minimaler Zeit die komplette BML-Schleife<br />
durchlaufen werden kann und das minimale<br />
Zeit zur Herstellung gekostet hat – jedes<br />
Feature zu viel ist Verschwendung. Es muss<br />
dabei für den Kunden natürlich einen<br />
Mehrwert schaffen.<br />
Teil 2: Der Weg<br />
Der zweite Teil beschäftigt sich mit der<br />
Frage, wie die Unternehmung in die richtige<br />
Richtung gesteuert werden kann. Die<br />
Vision und damit auch die Strategie werden<br />
auf Grundlage einiger weniger Grund -<br />
voraussetzungen abgeleitet. Die Grund -<br />
voraussetzungen werden in Hypo thesen<br />
zerlegt, um sie dann in der Build-Measure-<br />
Learn-Schleife mit Hilfe eines MVPs zu<br />
testen.<br />
Von der Vision bis zur Auslieferung an<br />
den Kunden sind viele Abteilungen oder<br />
Teams eines Unterneh mens beteiligt. Eine<br />
Optimierung lokal in einer Abteilung führt<br />
in der Regel nicht dazu, dass die Schleife<br />
insgesamt schneller durchlaufen werden<br />
kann. Es ist daher essentiell, das System als<br />
Ganzes zu be trachten. Ries schlägt die<br />
Verwendung eines Kanban-Systems vor. In<br />
dem System wird eine beschränkte Menge<br />
von gleichzeitigen Experimenten durchgeführt,<br />
diese dann aber konsequent vom<br />
Anfang bis zum Ende, bis der Lerneffekt<br />
sichergestellt ist. Auf diese Weise werden<br />
der Fortschritt und der Erfolg an den<br />
Lernprozess gehängt und nicht an das<br />
Erstellen von Features.<br />
Bevor das MVP gebaut wird, muss festgelegt<br />
werden, wie eine mögliche Metrik<br />
zum validierten Lernen aussehen soll,<br />
damit diese im Rahmen des Innovations-<br />
Controllings kontinuierlich gemessen werden<br />
kann. Ziel dieses Controllings ist es,<br />
Transparenz im Unternehmen zu schaffen<br />
und dem Entrepreneur eine Ent schei -<br />
dungsgrundlage für eine grundlegende<br />
Richtungsänderung (Pivot) bzw. für das<br />
Beibehalten der eingeschlagenen Richtung<br />
zu geben.<br />
Bei der Erstellung der Metriken muss<br />
darauf geachtet werden, keine kosmetischen<br />
Zahlen (Vanity Metrics) zu verfolgen,<br />
40 41
uchbesprechung<br />
Experimente initialisiert werden. Die<br />
Plattform muss dafür sorgen, dass die<br />
Gesamtun terneh mung geschützt bleibt,<br />
auch wenn ein MVP ausgespielt wird, das<br />
qualitativ nicht der Firmenkultur entspricht.<br />
Zudem muss sie sicherstellen, dass<br />
Ergebnisse und Inno vationen offen (im<br />
Unternehmen) kommuniziert werden und<br />
nicht der Eindruck entsteht, dass niemand<br />
wissen darf, was dort passiert. Eris Ries<br />
listet im Detail auf, wie eine solche<br />
„Innovation Sandbox” aussehen könnte.<br />
Abb. 1: Build-Measure-Learn-Continuous-Innovation (Abdruck mit freundlicher<br />
Genehmigung von Dan Martell).<br />
sondern Metriken, die vollständig verstanden,<br />
für jeden einsehbar und möglichst einfach<br />
verständlich sowie nachprüfbar und<br />
nachvollziehbar sind. Die Ergebnisse des<br />
Innovations-Controllings werden schließlich<br />
für den Abschluss der BML-Schleife<br />
verwendet. Zu diesem Zweck werden<br />
regelmäßig Pivot-or-Preserve-Meetings<br />
abge halten, in denen anhand der aktuellen<br />
Metriken die entsprechende Entscheidung<br />
getroffen wird.<br />
Teil 3: Das Tempo<br />
Sobald das Startup in die richtige Richtung<br />
läuft, geht es darum, die Geschwindigkeit<br />
kontinuierlich zu erhöhen. Die Beschleu -<br />
nigung wird durch vier Elemente erreicht:<br />
■ Geringe Paketgrößen: Die BML-<br />
Feedback-Schleife wird umso schneller<br />
durchlaufen, je kleiner das Experiment<br />
ist. Aus der Kanban-Methode ist zudem<br />
bekannt, dass Tasks eine Prozesskette<br />
schneller durchlaufen, wenn der<br />
Prozess nicht nach dem Push- sondern<br />
nach dem Pull-Prinzip funktioniert.<br />
Beim Lean-Startup-Modell steht am<br />
Anfang die aus der Strategie abgeleitete<br />
Hypothese, die es zu überprüfen gilt.<br />
Dazu wird zunächst festgelegt, was<br />
beim Experiment gelernt werden soll<br />
(Learn), wie der Lernerfolg gemessen<br />
wird (Measure) und welches MVP aus<br />
diesem Zweck gebaut werden muss<br />
(Build).<br />
■ Identifikation und Tuning des Wachs -<br />
tums motors: Damit der Entrepreneur<br />
durch seine Entscheidungen Wachstum<br />
herbeiführen kann, müssen die Wachs -<br />
tumsmotoren identifiziert werden. Ries<br />
führt beispielhaft einige Wachstums -<br />
motoren auf und erläutert, aus welchen<br />
Quellen diese gespeist werden. Um die<br />
Komplexität gering zu halten, ist es<br />
günstig, sich auf einen Motor zu konzentrieren<br />
und die Priorisierungen auf<br />
das Tuning dieses Motors abzustimmen.<br />
■ Aufbau einer adaptiven Organisation:<br />
Die größte Herausforderung stellt die<br />
Notwendigkeit dar, das Lean-Startup-<br />
Modell abteilungsübergreifend zu<br />
implementieren. Dies erfordert ein<br />
generelles Umdenken aller Beteiligten,<br />
weshalb Ries in diesem Zusammen -<br />
hang entsprechende Trainings pro -<br />
gramme empfiehlt.<br />
■ Bereitstellung einer Innovationsum -<br />
gebung für das Team: Ein Team benötigt<br />
drei Dinge, um Innovationen vorantreiben<br />
zu können: Beschränkte, aber<br />
gesicherte Ressourcen (ein Überfluss an<br />
Mitteln ist ebenso wenig hilfreich, wie<br />
ein Mangel). Die Unabhängigkeit,<br />
Entscheidungen treffen zu können und<br />
das Business voranzutreiben (wenn<br />
ständig Approvals der Geschäfts -<br />
führung eingeholt werden müssen, wird<br />
Kreativität erstickt). Ein persönliches<br />
Interesse am Ergebnis (die beteiligten<br />
Personen müssen sichtbar mit dem<br />
Erfolg der Unternehmung verbunden<br />
sein).<br />
Ist dieser Rahmen aufgespannt, kann eine<br />
Plattform („Sandbox”) für die innovativen<br />
Epilog<br />
Der Autor fasst im vorletzten Kapitel zu -<br />
sammen, worum es ihm neben der<br />
Steigerung der Erfolgsrate innovativer<br />
Produktentwicklung in seinem Lean-<br />
Startup-Movement geht: um die Vermei -<br />
dung von Zeitverschwendung. „Es gibt<br />
nichts nutzloseres, als mit großartiger<br />
Effizienz Dinge zu tun, die überhaupt nicht<br />
getan werden brauchen”, zitiert er Peter<br />
Drucker. Lokale Effizienzsteigerung ist<br />
nahezu sinnlos, wenn nicht das Gesamt -<br />
system optimiert wird. Ein Produkt zu bauen,<br />
ohne sich vorher zu überlegen, wie man<br />
den Erfolg messen will bzw. was man daraus<br />
lernen möchte, ist Zeitver schwen dung.<br />
Fazit<br />
Der Aufbau des Buchs erschließt sich dem<br />
Leser erst auf den zweiten Blick. Durch die<br />
Zahl an kurzweiligen Fallstudien (beispielsweise<br />
Groupon und Dropbox) geht auf der<br />
einen Seite häufiger der rote Faden verloren.<br />
Auf der anderen Seite führt das dazu,<br />
dass immer wieder Bezug genommen werden<br />
muss auf Methoden und Artefakte, die<br />
erst im Laufe des Buchs im Detail erläutert<br />
werden. Hier wäre eventuell eine Trennung<br />
zwischen Methodik und Fallstudien gut<br />
gewesen.<br />
Die Stärken der Lean-Startup-Methode<br />
liegen darin, bekannte und bewährte<br />
Verfahren (Lean Thinking, Systemtheorie,<br />
minimale Produktinkremente usw.) so zu<br />
bündeln, dass sich ein Framework zur<br />
systematischen und kontinuierlichen Inno -<br />
vationsentwicklung ergibt. Das hilft auf der<br />
einen Seite den kreativsten Innovatoren<br />
dabei, ein nachhaltiges Business aufzubauen,<br />
und gibt auf der anderen Seite den<br />
Konzernabteilungen die Hoffnung, dass<br />
auch dort wieder Entrepreneur-Wind<br />
wehen kann. Vorausgesetzt man begibt sich<br />
auf den Weg, eine adaptive Organisation zu<br />
entwickeln, in der gemeinsam abteilungsübergreifend<br />
innovative Experimente<br />
gestartet werden.<br />
■<br />
1/2012
fachartikel<br />
mehr zum thema:<br />
www.oasis-open.org<br />
die autoren<br />
LIVING SOA:<br />
EVOLUTION DES BETRIEBS VON<br />
SOA-BASIERTEN LÖSUNGEN<br />
Als vor einigen Jahren die Evolution hin zu serviceorientierten Architekturen (SOAs) begann,<br />
war eines der wesentlichen Argumente die höhere Flexibilität von Lösungen auf dieser Basis. In<br />
diesem Artikel wird aufgezeigt, welche Auswirkungen die versprochene Flexibilität von SOA auf<br />
den IT-Betrieb hat und ob die Flexibilität tatsächlich ausgenutzt werden kann. Werden Services<br />
mit gleicher Leistung, aber z. B. auf der Basis unterschiedlicher Technologien ausgetauscht,<br />
kann dies auch den Wechsel der Werkzeuge erfordern, was einen erhöhten Aufwand beim<br />
Betrieb von SOA-basierten Lösungen zur Folge hat. In dem Artikel wird gezeigt, welchen neuen<br />
Anforderungen Betriebswerkzeuge und Services gerecht werden müssen<br />
Dr. Veit Köppen<br />
(E-Mail: veit.koeppen@ovgu.de)<br />
ist geschäftsführender Leiter des Center for Digital<br />
Engineering an der Otto-von-Guericke-Universität<br />
Magdeburg und Assistent im Institut für<br />
Technische und Betriebliche Informationssysteme.<br />
SOA und Flexibilität<br />
Mit der Umsetzung des Konzepts service -<br />
orientierter Architekturen (SOA) ergeben<br />
sich für den Betrieb derartiger IT-Lösungen<br />
neue Herausforderungen. Während Client/<br />
Server-basierte IT-Lösungen in ihrem technischen<br />
Aufbau und ihrer Implementierung<br />
eher stabil und systemorientiert sind, erfordert<br />
die Serviceorientierung neue Werk -<br />
zeuge und Ansätze für den Betrieb der IT-<br />
Lösungen. Anders als beim Übergang von<br />
monolithischen Systemen zu Client/Server-<br />
Architekturen ist die Entwicklung zu SOA<br />
evolutionär. Die Entscheidung, ob eine vorliegende<br />
Architektur bereits den SOA-<br />
Prinzipien genügt, ist daher nicht immer<br />
eindeutig. Gleichzeitig entwickelt sich auch<br />
die Definition von SOA weiter. Während<br />
man anfangs die Definition von SOA eher<br />
mittels der zugehörigen technischen Be -<br />
stand teile herausstellte, werden inzwischen<br />
dafür die Eigenschaften der Architektur<br />
herangezogen.<br />
Unter einer SOA versteht man eine<br />
Systemarchitektur, die vielfältige, verschiedene<br />
und eventuell inkompatible Metho -<br />
den oder Applikationen als wiederverwendbare<br />
und offen zugreifbare Dienste<br />
(Services) repräsentiert und dadurch eine<br />
plattform- und sprachunabhängige Nut -<br />
zung und Wiederverwertung ermöglicht.<br />
Die Organization for the Advancement of<br />
Structured Information Standards (OASIS)<br />
definiert den Begriff Services als einen<br />
Mechanismus, der den Zugang zu einer<br />
oder mehreren Leistungen ermöglicht,<br />
wobei der Anschluss der Services durch<br />
vorbestimmte Schnittstellen unterstützt<br />
und konsistent mit den Bedingungen und<br />
Methoden gemäß der Spezifikation in der<br />
Service-Beschreibung ausgeführt wird (vgl.<br />
[Oas06]). Die folgenden vier Bestandteile<br />
sind für SOA charakteristisch:<br />
■ das Applikations-Frontend<br />
■ die Services<br />
■ das Service-Repository<br />
■ der Service-Bus<br />
Ein Service besteht aus einem Auftrag, einem<br />
oder mehreren Interfaces und der<br />
Implementierung. Das Service-Repository<br />
umfasst alle Informationen, die benötigt werden,<br />
um Services entsprechend den geänderten<br />
Anforderungen auszuwählen oder durch<br />
gleichwertige Services auszutauschen. Der<br />
Service-Bus dient dem Datenaustausch zwischen<br />
Services. Gegen über dem direkten<br />
Datenaustausch zwischen Services hat der<br />
Service-Bus den Vorteil, dass er heterogene<br />
Technologien in Schnittstellen und Kom -<br />
munikation integrieren kann. Daten können<br />
servicespezifisch und zentralisiert im Service-<br />
Bus aufbereitet und verteilt werden. Dadurch<br />
reduziert sich eine Mehrfachbear beitung<br />
gleicher Daten.<br />
Nicht zuletzt dient das einheitliche<br />
Appli kations-Frontend als Benutzerzugang<br />
zu der SOA-Lösung. Komplexität und<br />
Technik der Realisierung bleiben dem<br />
Benutzer verborgen. Auf technische oder<br />
inhaltliche Erfordernisse kann durch den<br />
Austausch von Services reagiert werden,<br />
ohne dass diese Änderungen für den<br />
Benutzer in der Oberfläche oder Hand -<br />
habung sichtbar werden.<br />
Ein Service kann aus einer Aktivität<br />
bestehen oder sich aus mehreren<br />
Aktivitäten zusammensetzen. Ausschlagge -<br />
bendes Kriterium ist letztlich die Definition<br />
von Services, die sich insbesondere auf die<br />
Austauschbarkeit und Wiederverwend -<br />
barkeit der Dienste bezieht. Der Umfang<br />
eines Services wird als Granularität<br />
bezeichnet (vgl. [Mel08]). Es gibt keine<br />
zwingende Granularität von Services, aus<br />
denen ein Prozess zusammengesetzt wird.<br />
Liane Will<br />
(E-Mail: liane.will@sap.com)<br />
ist Chief Service Architect im Support der SAP AG.<br />
Zu ihren Schwerpunkten gehört die Optimierung<br />
von Systembetrieb und Applikationslebenszyklus.<br />
Als Promotionsstudentin befasst sie sich mit neuen<br />
Herausforderungen im IT-Betrieb und deren<br />
Bewältigung beim Einsatz von SOA.<br />
Der Umfang eines Service wird beim<br />
Entwurf der SOA-basierten Lösung festgelegt.<br />
Werden Services zu fein granular<br />
gewählt, erhält man eine hohe Anzahl von<br />
Services, was die Verwaltung und Übersicht<br />
erschwert. Wird ein Service dagegen zu<br />
umfassend gefasst, erschwert dies die<br />
Austauschbarkeit. Die Granularität ist so<br />
zu wählen, dass der fachliche Zusam men -<br />
hang zu den Teilaktivitäten eines Ge -<br />
schäfts prozesses erkennbar ist.<br />
Um Services austauschen zu können,<br />
müssen zusätzliche Informationen verfügbar<br />
sein. Im Laufe der Entwicklung hat sich<br />
bereits gezeigt, dass Services auch nichtfunktionalen<br />
Anforderungen gerecht werden<br />
müssen, um insbesondere Service-Bus<br />
und -Repository entsprechend zu bedienen.<br />
Bisher unzureichend untersucht ist, welche<br />
Anforderungen sich für den laufenden<br />
Betrieb an SOA ergeben, wenn die viel<br />
beschriebene Flexibilität SOA-basierter<br />
Lösungen wirklich in Anspruch genommen<br />
wird. Durch die Möglichkeit, Services und<br />
die Zusammensetzung eines Prozesses aus<br />
Services zu verändern, ohne die Benutzer<br />
mit diesen Änderungen zu konfrontieren,<br />
kann die Flexibilität der Lösung maßgeblich<br />
erhöht werden. Für den Begriff<br />
42 43
fachartikel<br />
„Flexibilität” gibt es jedoch keine einheitliche<br />
Definition. J.S. Evans hat die verschiedenen<br />
Begriffe und Verwendungen in Bezug<br />
auf Flexibilität in der Literatur zusammengetragen,<br />
normiert und als Matrix zusam -<br />
mengestellt (vgl. [Eva91]). Er unterscheidet<br />
drei Kriterien der Flexibilität:<br />
Unternehmensschicht<br />
Benutzer<br />
RFID Mobile Geräte Webbrowser<br />
Rendering<br />
Office<br />
Werkzeuge<br />
■ Yielding to pressure – als Fähigkeit, auf<br />
externen Druck zu reagieren und sich<br />
anzupassen.<br />
■ Capacity for new situation – als die<br />
Menge von möglichen Anpassungen<br />
auf bevorstehende sich ändernde Be -<br />
dingungen und Wünsche.<br />
■ Suspectibility – als Schwierigkeitsgrad,<br />
Modifikationen durchzuführen.<br />
In diesen Kriterien zeigen SOA-basierte<br />
Lösungen ihre Stärken. Die Flexibilität<br />
SOA-basierter Lösungen beruht auf ihrem<br />
Potenzial, Services während der Laufzeit<br />
auszutauschen oder anzupassen, um auf veränderte<br />
Anforderungen aus der Umwelt zu<br />
reagieren. Darauf richten Software hersteller<br />
ihre Produkte aus. Vorteile ergeben sich insbesondere<br />
für die Nutzer einer SOA durch<br />
die schnellere Anpassungs fähigkeit auf<br />
Veränderungen und die Wiederver wend -<br />
barkeit von Services (vgl. [Sof10]). Tat -<br />
sächlich wird dieses Potenzial von den<br />
Betreibern und Anwendern von SOA nur<br />
verhalten genutzt. Es gilt das alte Prinzip:<br />
„Never touch a running system”. Im Folgen -<br />
den zeigen wir, welche Anfor derungen sich<br />
für den Betrieb ergeben, wenn die Flexi -<br />
bilität durch den Austausch von Services<br />
wirklich ausgeschöpft werden soll.<br />
Systembetrieb versus<br />
Lösungsbetrieb<br />
Wenn man einen Service in einer komplexen<br />
SOA-basierten Lösung ändern oder ersetzen<br />
will, müssen bestimmte Vorausset zungen<br />
erfüllt sein. Zwei Services können nur dann<br />
gegeneinander ausgetauscht werden – ohne<br />
einen bestehenden Geschäfts prozess zu stören<br />
–, wenn sie hinsichtlich der<br />
Geschäftslogik, der Funktionalität, des<br />
Datenein- und -ausgangs sowie der Inter -<br />
faces identisch sind. Ähnlich verhält es sich,<br />
wenn ein bereits genutzter und innerhalb<br />
eines Geschäftsprozesses integrierter Service<br />
geändert werden soll. Der Prozess ablauf<br />
muss erhalten werden. Um den Ablauf zu<br />
gewährleisten, können Änderungen nur im<br />
Rahmen gleicher Eingangs daten und eines<br />
gleichen Ausgangs datenformats erfolgen.<br />
Andernfalls würde dies auch Änderungen an<br />
Prozessschicht<br />
Zwischenschicht- Unterstützende Services wie Technologie Gateways, Adapter<br />
Basisschicht- Grundlagen der SOA Business Logik und Datenmanagement<br />
Abb. 1: Aufbau einer SOA-basierten Lösung am Beispiel eines<br />
Kundenauftragsprozesses.<br />
Vorgänger- und Nachfolge-Services erfordern,<br />
was den Aufwand erhöht.<br />
Die Geschäftsprozesslogik muss in jedem<br />
Fall gewahrt bleiben bzw. darf nur im<br />
Rahmen der Vorgaben verändert werden.<br />
Ein Service kann aber auch innerhalb weiterer,<br />
anderer Geschäftsprozesse genutzt<br />
werden. Hier spielt die bereits erwähnte<br />
Granularität eines Service eine Rolle. Ist ein<br />
Service zu komplex bzw. leistet er extrem<br />
unterschiedliche Aktivitäten, wird man<br />
kaum einen Service mit vergleichbaren<br />
Leistungsparametern finden. Somit ist der<br />
Service faktisch nicht austauschbar. Genau<br />
diese Situation findet sich heute häufig in<br />
der Praxis. Es stellt sich die Frage, inwieweit<br />
Softwarehersteller überhaupt interessiert<br />
sind, ihre Services austauschbar zu<br />
halten. Dadurch werden jedoch Rahmen -<br />
bedingungen geschaffen, die die Flexibilität<br />
von SOA-basierten Lösungen ungerechtfertigt<br />
einschränken. Ebenso darf es, z. B. für<br />
die verwendete Technologie eines Service,<br />
keine Beschränkungen geben, d. h. ein<br />
Service in einer SOA-basierten Lösung<br />
kann durch einen anderen Service mit<br />
anderer Technologie ausgetauscht werden.<br />
Administrative Aufgaben sind bei heutigen<br />
Lösungen herstellerspezifisch geprägt. Die<br />
aktuell beim Betrieb verwendeten Werk -<br />
zeuge sind zudem noch häufig den<br />
Client/Server-basierten Lösungen verhaftet.<br />
Das heißt, der Betrieb basiert auf:<br />
■ Kunden- bzw. Outsource-Verantwor -<br />
tung für den Betrieb<br />
Service<br />
Repository<br />
Metadaten zu<br />
Services<br />
Service Bus<br />
Interface<br />
Management<br />
zwischen<br />
heterogenen<br />
Services<br />
■ system- und technologiespezifischen<br />
administrativen Werkzeugen,<br />
■ system- und technologiespezifischen<br />
Aktionen und Qualitätskennzahlen,<br />
■ system- und technologiespezifischem<br />
Wis sen und Erfahrungen, um erstes<br />
und zweites einzusetzen und erfüllen zu<br />
können.<br />
Mit dem Übergang zu SOA muss sich der<br />
systemorientierte Ansatz hin zu einem<br />
lösungsorientierten Ansatz verschieben.<br />
Unterschiede zwischen Client/Server- und<br />
SOA-basiertem Betrieb<br />
Jeder Service innerhalb der SOA muss die<br />
Anforderungen von Service-Repository und<br />
Service-Bus bedienen. Ein wesentlicher<br />
Vorteil für die Endbenutzer solcher SOAbasierten<br />
Lösungen ist die Entkopplung<br />
von technischer Implementierung und<br />
Geschäftsfunktionalität. Es besteht keine<br />
Notwendigkeit für den Benutzer, die eingesetzten<br />
technischen Komponenten oder die<br />
Hardware zu kennen. Das kann aus<br />
Betriebssicht ein Nachteil sein. Wenn der<br />
Endbenutzer eine Störung seines Geschäfts -<br />
prozesses feststellt, ist er nicht in der Lage,<br />
technische Informationen zur Unterstüt -<br />
zung der Ursachenanalyse zu geben.<br />
Abbildung 1 zeigt am Beispiel eines<br />
Kundenauftragsprozesses in ARIS-No -<br />
tation den Aufbau einer SOA-Lösung. Der<br />
Benutzer berichtet über einen Ausfall des<br />
Prozesses oder über Probleme beim Anle -<br />
gen der Verkaufsorder. In Client/Server-<br />
1/2012
fachartikel<br />
basierten Lösungen wird mit einer<br />
Systemanalyse begonnen, um die verursachende<br />
technische Komponente zu ermitteln.<br />
Das ist praktikabel, weil die Anzahl<br />
der technischen Komponenten in Client/-<br />
Server-Architekturen eher niedrig ist. In<br />
vielen Fällen benennt der Benutzer bereits<br />
das technisch fehlerhaft arbeitende System.<br />
SOA-basierte Lösungen unterscheiden sich<br />
von dieser Vorgehensweise maßgeblich.<br />
Dem Benutzer sind der technische Aufbau<br />
und insbesondere technische Komponenten<br />
und Systeme verborgen. Er kann die verursachende<br />
Komponente nicht benennen.<br />
Versucht man, die aus Client/Serverbasierten<br />
Lösungen bekannten systemorientierten<br />
Methoden zu übertragen, geht<br />
der lösungsorientierte Ansatz von SOA verloren.<br />
Würde man dies dennoch versuchen,<br />
müsste in einem ersten Schritt analysiert<br />
werden, welche technische Komponente<br />
die Störung verursacht, bevor überhaupt<br />
mit der Analyse der Störungsursache be -<br />
gonnen werden kann. Das führt in der<br />
Praxis dazu, dass nach dem Ausschluss -<br />
verfahren gearbeitet wird. Es werden die<br />
Experten der jeweiligen technischen<br />
Komponenten herangezogen und jeder<br />
analysiert seine technische Komponente,<br />
um eine Störung auszuschließen. Je mehr<br />
Technologien in der SOA-basierten Lösung<br />
eingesetzt werden, desto höher ist die<br />
Anzahl der benötigten Experten und der<br />
Aufwand steigt. Zudem werden häufige<br />
Wechsel der Bearbeiter eine Störung wahrnehmen,<br />
da das Ausschlussverfahren häufig<br />
nicht zweifelsfrei funktioniert. Die<br />
Störung wird langsam „eingekreist”.<br />
Um das zu vermeiden, muss die systemorientierte<br />
Analyse durch einen lösungsund<br />
serviceorientierten Ansatz mit entsprechenden<br />
Werkzeugen zur Analyse abgelöst<br />
werden. In unserem Beispiel muss die<br />
Bearbeitung des Kundenauftrags als<br />
Prozess in seiner Gesamtheit erfasst und<br />
analysiert sein. Davon ausgehend muss in<br />
einem ersten Schritt der für die Störung verantwortliche<br />
Service innerhalb des Pro -<br />
zesses ermittelt werden. Nicht das System<br />
oder die technische Komponente ist die zu<br />
analysierende Einheit, sondern der Service.<br />
Dafür werden neue Werkzeuge benötigt.<br />
Wenn SOA-basierte Lösungen analog zu<br />
Client/Server-basierten Lösungen betrieben<br />
werden, hat das weitreichende Folgen:<br />
■ Verlust der Vorteile von SOA.<br />
■ Steigende Betriebskosten mit der An zahl<br />
integrierter Services und Tech nologien.<br />
■ Gefährdung allgemeiner Qualitäts -<br />
Systemadministration in Client/-<br />
Server-basierten Lösungen<br />
Technologie- und systemorientierte Werkzeuge.<br />
Systemorientierte Aktionen, Einheiten und Begriffe.<br />
Einsatz der Werkzeuge und Durchführung<br />
der Aktivitäten erfordern systemund<br />
technologiespezifisches Know-how .<br />
kriterien, wie Stabilität, Verfügbarkeit<br />
und Performance.<br />
Tabelle 1 stellt den Client/Server-basierten<br />
und den SOA-basiertem Ansatz aus Be -<br />
triebssicht einander gegenüber.<br />
Anforderungen des IT Service-<br />
Managements<br />
Welche Anforderungen und Prozesse für den<br />
IT-Service und -Support bestehen und wie sie<br />
geeignet, aber herstellerunabhängig zu implementieren<br />
sind, beschreibt die IT<br />
Infrastructure Library (ITIL) (vgl. [Off07]).<br />
ITIL formuliert Good Practices bei der<br />
Etablierung und Durchführung von IT-<br />
Service-Prozessen. Es ist darauf zu achten,<br />
dass ein Service im ITIL-Sinne als Dienst -<br />
leistung zu verstehen ist und nicht gleichzusetzen<br />
ist mit Services als Teil der SOA. ITIL<br />
definiert eine Dienstleistung als einen Service,<br />
durch den ein Kunde einen Wert erlangt, in<br />
dem ihm Ergebnisse bereitgestellt werden,<br />
die der Kunde erreichen will, ohne selbst<br />
Eigentümer der spezifischen Kosten und<br />
Risiken der Erbringung zu sein. Das an dieser<br />
Stelle im Mittelpunkt stehende tägliche<br />
Betriebsgeschäft wird in ITIL in der Phase<br />
„Operation” allgemein beschrieben. Zum<br />
Lebenszyklus gehört auch das permanente<br />
Streben nach Optimierung, sodass sich an die<br />
Phase „Operation” die Phase „Continual<br />
Service Improvement” anschließt, die zum<br />
erneuten Beginn des Lebenszyklus führen<br />
kann. Die im letzten Abschnitt beschriebene<br />
Situation einer Störung und deren<br />
Ursachenanalyse wären dem „Incident and<br />
Problem Management” zuzurechnen.<br />
Change-Management<br />
Anhand des Prozesses Change-Manage -<br />
ment aus der Transitionsphase zeigen wir,<br />
wie sich die Anforderungen an diesen<br />
Lösungsadministration in SOA-basierten<br />
Lösungen<br />
Vereinheitlichte zentrale Werkzeuge<br />
mit Fokus auf der Lösung.<br />
Service- und lösungsorientierte Aktivitäten,<br />
Einheiten und Begriffe.<br />
Vereinheitlichung der lösungs- und serviceorientierten<br />
Administration gestattet den Betrieb ohne<br />
tiefgreifende Kenntnis von Service-Technologie<br />
und -Spezifika.<br />
Tabelle 1: Gegenüberstellung der Anforderungen in Client/Server- und SOA-basierten<br />
Lösungen.<br />
Prozess beim Betrieb von SOA-basierten<br />
Lösungen ändern. Aus Sicht von ITIL<br />
bezieht sich ein Change auf jegliche Art von<br />
Änderungen an der Dienstleistung eines<br />
Providers, was auch Änderungen an Pro -<br />
grammen, technischen Komponenten oder<br />
auch Systemkonfigurationen beinhaltet.<br />
Abbildung 2 zeigt den Change-Manage -<br />
ment-Process, wie er für eine Standard -<br />
änderung von ITIL vorgeschlagen wird.<br />
Die Qualität des Change-Management-<br />
Process ist von wesentlicher Bedeutung für<br />
die kontinuierliche Evolution einer Lösung.<br />
Die in ITIL beschriebenen Good Practices<br />
für diesen Prozess können auf SOA-basierte<br />
Lösungen übertragen werden. Der Prozess an<br />
sich bleibt erhalten – inklusive seiner<br />
Qualitätskriterien. Die eigentliche Heraus -<br />
forderung entsteht bei der technischen<br />
Umsetzung einer Änderung, da diese selbst<br />
aus mehreren Änderungen bestehen kann,<br />
die mehrere, abhängige Services gleichzeitig<br />
betreffen. Damit sind eine Synchronisation<br />
der einzelnen Änderungen und eine serviceübergreifende<br />
Protokol lierung erforderlich.<br />
Es ergeben sich drei wesentliche neue<br />
Anforderungen im SOA-Umfeld:<br />
■<br />
■<br />
■<br />
Zentrale Kontrolle und Auswertung des<br />
Change-Management-Process (lösungs-<br />
orientierte Protokollierung).<br />
Lösungsorientiertes Deployment von<br />
Changes (Synchronisation von Changes<br />
über Services hinweg).<br />
Deployment von Changes, unabhängig<br />
von der eigentlichen Technologie eines<br />
Service.<br />
Bisher ist es noch immer üblich, dass technische<br />
Systeme und Services mit einem eigenen<br />
und häufig herstellerspezifischen De -<br />
ployment-Werkzeug einhergehen. Dadurch<br />
ist es kaum möglich, komplexe Changes zu<br />
realisieren, die die Synchronisation der dar-<br />
44 45
fachartikel<br />
Request for<br />
Change<br />
Dokumentation<br />
&Review<br />
Auswirkungen&<br />
Risiken bewerten<br />
Priorisieren<br />
Planung der<br />
Durchführung<br />
Genehmigung<br />
Implementierung<br />
überwachen<br />
Review&<br />
Abschluss<br />
in enthaltenden Changes an mehr als einem<br />
Service verschiedener Hersteller erfordern.<br />
Tatsächlich ist ein einheitliches Interface<br />
erforderlich, das alle Services einer SOA<br />
entsprechend unterstützt. Nur so kann mit<br />
Hilfe eines zentralen Werkzeugs, einem<br />
Cockpit, der Change-Management-Process<br />
lösungsorientiert gesteuert und realisiert<br />
werden. Wird ein Service ausgetauscht,<br />
muss die Unterstützung dieses Cockpits<br />
gewährleistet sein, um den Change-<br />
Management-Process nicht zu stören.<br />
Analyse der aktuellen Situation<br />
In der Praxis wurde der Bedarf neuer Werk -<br />
zeuge zum Teil erkannt. Einige Hersteller<br />
von Softwarebausteinen haben für SOAbasierte<br />
Lösungen eigene Konzepte entwi -<br />
ckelt, wie zum Beispiel „HP OpenView”<br />
oder „HP Quality Center”, „IBM Tivoli”<br />
oder „SAP Solution Manager 7.x”. Allen<br />
gemeinsam ist der Ansatz, verschiedene<br />
technische Komponenten oder Services zentral<br />
zu überwachen und zu administrieren.<br />
Allerdings wird dazu jeweils ein spezielles<br />
Interface entwickelt, um neue Services auf<br />
Basis neuer Technologien zu integrieren.<br />
Somit kann eine andere Technologie nur<br />
eingebunden werden, wenn zuvor ein<br />
Interface entwickelt wurde.<br />
Jedes Werkzeug hat seine Stärken, insbesondere<br />
beim Management der herstellereigenen<br />
Produkte. Bisher wird jedoch ein<br />
eher reaktiver Ansatz verfolgt. Erst wenn<br />
eine Komponente oder ein Service eingesetzt<br />
wird oder eine hinreichend große<br />
Arbeitsaufträge<br />
Arbeitsaufträge<br />
Change Schedule<br />
Abb. 2: Good Practices für den Standard-Change-Management-Process in ITIL.<br />
Verbreitung zu erwarten ist, werden<br />
Schnittstellen für die Überwachungs- und<br />
Administrationswerkzeuge entwickelt, um<br />
die komponenten- oder servicespezifischen<br />
Techniken, Protokolle, Kennzahlen und<br />
deren Messwerte in das Werkzeug einzubinden.<br />
Dabei bleibt es den technischen<br />
Komponenten selbst überlassen, was sie<br />
bereitstellen. Welche der bereitgestellten<br />
Methoden dann vom Administrations -<br />
werkzeug übernommen werden, ist eine<br />
weitere freie Entscheidung des Herstellers.<br />
Die Interpretation von Messwerten oder<br />
Protokollen und mögliche Reaktionen darauf<br />
erfordern jeweils Spezialkenntnisse des<br />
Administrators. Dadurch ist es unmöglich,<br />
eine SOA-basierte Lösung in ihrer Ge -<br />
samtheit zu analysieren und zu betreiben.<br />
Stattdessen wird dem Betreiber eine werkzeug-<br />
bzw. technologieorientierte Arbeits -<br />
weise aufgezwungen. Um jedoch von der<br />
Flexibilität von SOA profitieren zu können,<br />
muss der Betrieb weitestgehend unbeeinflusst<br />
von der verwendeten Technologie<br />
einzelner Services bleiben. Dies ist nur<br />
durch ein zentrales Betriebscockpit auf<br />
Basis einheitlicher Methoden, Messwerte,<br />
Aktionen usw. möglich. Für einige der<br />
Anforderungen kann man allgemeine<br />
Adapter entwickeln, die jeder Service<br />
bedienen kann. Andere Anforderungen<br />
werden nur erfüllt, wenn eine Art Standard<br />
für nicht-funktionale Eigenschaf ten entwickelt<br />
wird, die jeder Service erfüllen<br />
muss. Abbildung 3 skizziert die Inte gration<br />
eines Services aus unserem Kun den -<br />
auftragsprozess, inklusive seiner Erwei -<br />
terung um nicht-funktionale Eige nschaften<br />
zur Unterstützung des zentralen Betriebs -<br />
cockpits.<br />
Bereits in die Service-Entwicklung muss<br />
ein solches Regelwerk einbezogen werden.<br />
Ziel muss es sein, eine Beschreibung eines<br />
zentralen Administrationswerkzeugs auf<br />
Basis der Standardisierung der nicht-funktionalen<br />
Eigenschaften von Services zu liefern.<br />
Zusammenfassung und<br />
Ausblick<br />
Der allgemeine Ansatz und die Qualitäts -<br />
kriterien im IT-Betrieb bleiben beim Übergang<br />
zu SOA-Lösungen identisch, jedoch<br />
muss die Umsetzung lösungs- und service -<br />
orientiert, statt system- und technologieorientiert<br />
erfolgen. Für jede Lösung können<br />
Qualitätskriterien unabhängig von ihrer<br />
Architektur definiert werden. ITIL liefert<br />
wiederverwendbare, allgemein gültige Be -<br />
schreibungen der Prozesse in der Gover -<br />
nance. ITIL kann somit auch weiterhin als<br />
Stan dardwerk dienen. Die Realisierung dieser<br />
Good Practices für SOA-basierte<br />
Lösungen und deren gewünschter Flexi -<br />
bilität erfordern jedoch eine Umstellung<br />
und Ent wicklung von lösungs- und serviceorientierten<br />
Werkzeugen zum Betrieb.<br />
Die lose Koppelung von Services innerhalb<br />
von SOA ist ein wesentlicher Unter -<br />
Standardisierte<br />
Bereitstellung von<br />
Informationen und<br />
Aktionen für den<br />
Betrieb<br />
Zentrales Betriebscockpit<br />
Abb. 3: Schematische Darstellung der Integration von Services mit dem zentralen<br />
Betriebscockpit.<br />
1/2012
fachartikel<br />
schied zum fixierten Aufbau von<br />
Client/Server-basierten Lösungen. Um das<br />
Potenzial der Flexibilität von SOA wirklich<br />
nutzen zu können, wird innerhalb von SOA<br />
ein weiterer Baustein – das zentrale<br />
Betriebs cockpit – benötigt. Dies erfordert<br />
auf Seite der Services eine Standardisierung<br />
von nicht-funktionalen Eigenschaften, die<br />
jeder Service aufweisen muss, um in eine<br />
SOA integriert zu werden. Diese<br />
Vereinheitlichung und Normalisierung ist<br />
erforderlich, um das erforderliche servicespezifische<br />
Wissen zu reduzieren.<br />
In diesem Artikel haben wir neue An -<br />
forderungen und Probleme angedeutet, um<br />
zu zeigen, dass neue Methoden erforderlich<br />
sind, um den Betrieb SOA-basierter<br />
Lösungen zu gewährleisten. Eine einfache<br />
Weiterentwicklung Client/Server-basierter<br />
Techniken ist nicht ausreichend. ■<br />
Literatur & Links<br />
[Eva91] J.S. Evans, Strategic Flexibility for<br />
high technology manoeuvres, in: Journal of<br />
Management Studies 1991<br />
[Mel08] I. Melzer, S. Eberhard, Service-orientierte<br />
Architekturen mit Web Services. Kon -<br />
zepte – Standards – Praxis, Spektrum Aka de -<br />
mischer Verlag 2008<br />
[Oas06] OASIS, Reference Model for Service<br />
Oriented Architecture, 2006, siehe:<br />
http://docs.oasis-open.org/soa-rm/v1.0/<br />
[Off07] Office of Governance Commerce,<br />
Information Technology Infrastructure Library<br />
Version 3 Core, Liwi Verlag 2007<br />
[Sof10] Software AG, What is the Business<br />
Value of SOA? Show It with KPIs, 2010, siehe:<br />
http://www.softwareag.com/de/images/SAG_SOA-<br />
KPI_WP_Oct10-web_tcm17-56981.pdf<br />
46 47
fachartikel<br />
mehr zum thema:<br />
http://www.hessen-it.de/mm/Hessen-IT_NEWS_0310.pdf<br />
der autor<br />
GEH MIR AUS DEM WEG!<br />
WAS MODELLIERUNGS-<br />
WERKZEUGE VON WHITE-<br />
BOARDS LERNEN KÖNNEN<br />
Viele grafische Editoren unterbrechen den Benutzer bei seiner Arbeit. Insbesondere UML-<br />
Modellierungswerkzeuge stören den Arbeitsfluss des Entwicklers mit Pop-Ups und der<br />
Notwendigkeit, in Werkzeugleisten herumzusuchen. Gleichwohl werden Softwarearchitekten<br />
nicht in Mausmetern bezahlt. Um die Bedienbarkeit von grafischen Benutzungsoberflächen zu<br />
verbessern, muss man die Menschen dabei beobachten, wie sie arbeiten. Die daraus resultierenden<br />
Erkenntnisse können den Arbeitsablauf dann aber auch erheblich beschleunigen.<br />
Prof. Albert Zündorf<br />
(E-Mail: zuendorf@cs.uni-kassel.de)<br />
leitet das Fachgebiet Softwaretechnik der<br />
Universität Kassel. Ausgehend vom Forschungs -<br />
projekt Fujaba unternimmt er seit über 15 Jahren<br />
Ausflüge in verschiedenste Bereiche der Software -<br />
technik, immer basierend auf modellgetriebener<br />
Softwareentwicklung.<br />
„Und wer soll das lesen können?”, ist der<br />
häufigste Kommentar, nachdem wir ein<br />
Klassendiagramm am Whiteboard entworfen<br />
haben. Trotzdem ist das Arbeiten am<br />
Whiteboard angenehmer als die Ver wen -<br />
dung eines Modellierungswerkzeugs: Man<br />
hat zwar viel Platz und kann das<br />
Endergebnis fotografieren und an alle verschicken<br />
oder einchecken – aber das macht<br />
die Diagramme nicht unbedingt leserlicher<br />
(siehe Abbildung 1).<br />
Wenn die Diagramme in irgendeiner<br />
Dokumentation verwendet werden sollen,<br />
lassen wir sie von jemandem nachzeichnen,<br />
frei nach dem Motto: „Make it fancy!”<br />
„Wie heißt denn die Kante da?” „Welche<br />
Kardinalität soll die Assoziation da unten<br />
haben?”<br />
Bei einer Whiteboard-Skizze fehlen häufig<br />
auch einige Details. Der Kollege, der das<br />
Ganze „rein zeichnen” oder später umsetzen<br />
soll, muss dann häufig noch einmal<br />
nachfragen, was Zeit kostet, oder er<br />
ergänzt selbstständig, was nicht immer<br />
richtig sein muss. Da wünscht man sich<br />
gelegentlich doch ein Werkzeug, das einen<br />
auf fehlende Details hinweist.<br />
Abb. 1: Klassendiagramm am<br />
Whiteboard.<br />
Abb. 2: PowerPoint-„Klassendiagramm” ohne Kardinalitäten.<br />
Unabhängig davon benötigen manche<br />
Kollegen oder Kolleginnen für dasselbe<br />
Diagramm viel länger als andere. Das kann<br />
natürlich an der jeweiligen Person liegen.<br />
Oder liegt es am verwendeten Werkzeug?<br />
Um diese Frage zu klären, haben wir eine<br />
(leider nicht öffentliche) Untersuchung verschiedener<br />
Modellierungswerkzeuge durchgeführt,<br />
deren Ergebnisse von der Hessen-<br />
IT, der Aktionslinie des Hessischen<br />
Wirt schaftsministeriums für den gesamten<br />
Informations- und Telekommunikations -<br />
markt in Hessen, veröffentlicht wurde (vgl.<br />
[Hes10]). Dabei haben wir sowohl die<br />
jeweils benötigte Zeit, die Anzahl der<br />
Mausklicks und Tastaturanschläge, die<br />
zurück gelegten Mausmeter als auch die<br />
Häufigkeit der Wechsel zwischen Tastatur<br />
und Maus gemessen.<br />
Vielleicht schon einmal einige Beobach -<br />
tungen vorweg: Es gibt Unterschiede zwischen<br />
den Personen, aber diese sind beim<br />
reinen Abzeichnen nicht so dramatisch.<br />
Viel dramatischer ist die Lernkurve: Je häufiger<br />
die Kandidaten ein und dasselbe<br />
Diagramm gezeichnet haben, desto schneller<br />
wurden sie. Irgendwann kannten sie das<br />
Diagramm auswendig und sparten die Zeit,<br />
die Details auf der Vorlage nachzuschauen.<br />
Dieser Effekt war praktisch unabhängig<br />
davon, welches Werkzeug die Kandidaten<br />
in welcher Reihenfolge verwendeten. Bei<br />
der Anzahl der Maus- und Tastaturaktion<br />
war dagegen kaum eine Lernkurve zu<br />
beobachten – diese Zahlen sind eher werkzeugspezifisch.<br />
Allgemeine Zeichenwerkzeuge<br />
„Ich hab das eben mit PowerPoint ge -<br />
macht.” Nicht nur Heimwerker erfinden<br />
neue Anwendungen für ihr Werkzeug.<br />
Auch junge Studenten missbrauchen Tools<br />
– wie „MS PowerPoint” oder „LibreOffice<br />
Draw” – für das Erstellen von Klassen -<br />
52 53
fachartikel<br />
Abb. 3: Dia verdeckt das Diagramm mit Dialogen.<br />
diagrammen (oder sogar Excel). In der Tat<br />
lassen sich Klassen durch einfaches<br />
Gruppieren von drei Kästchen darstellen<br />
und Assoziationen durch Verbindungen<br />
abbilden (siehe Abbildung 2).<br />
Assoziations- und Rollennamen sowie<br />
Kardinalitäten fügen sie als Textfelder ein.<br />
Leider müssen sie sich dann auch selbst um<br />
das Layout und die korrekte Syntax von<br />
Attributen, Methoden und Parametern<br />
kümmern. „Hm, ich glaub 'Magazin' oben<br />
links und 'Autor' unten rechts sieht besser<br />
aus.” – „Wie lange brauchst du denn für<br />
das ganze Layouten?” – „Ist 'erstellt'<br />
eigentlich eine Zu-Eins- oder eine Zu-N-<br />
Assoziation?” Den Studenten in unserem<br />
Beispiel wird langsam deutlich, dass allgemeine<br />
Zeichenwerkzeuge zwar einfach zu<br />
bedienen sind, ihnen aber keine inhaltliche<br />
Arbeit abnehmen können: Die Bedeutung<br />
von Formen, Linien, und Text bleibt den<br />
Programmen wie einem Whiteboard verschlossen.<br />
UML-Zeichenwerkzeuge<br />
„Nimm Dia oder yuml.me, mit denen kann<br />
man Klassendiagramme zeichnen!” Beides<br />
sind völlig unterschiedliche Werkzeuge,<br />
deren Diagramme uns aber regelmäßig wieder<br />
unterkommen. Dia kennt die einzelnen<br />
Artefakte eines Klassen diagramms, aber<br />
zum Bearbeiten der Elemente müssen die<br />
Studenten sich durch Dialoge kämpfen, die<br />
das Klassendiagramm verdecken. Das fühlt<br />
sich ungefähr so an, als müsse man ein<br />
Formular ausfüllen, das das Whiteboard<br />
verdeckt, bloß weil man eine Klasse umbenennen<br />
möchte (siehe Abbildung 3).<br />
Der Web-Dienst yuml.me geht einen völlig<br />
anderen Weg. Klassendiagramme werden<br />
in einer DSL auf einer Web-Seite formuliert<br />
und lassen sich anschließend über<br />
eine URL im PNG-, SVG- oder PDF-<br />
Format abrufen oder direkt in eine Web-<br />
Seite einbinden. Auf das Layout hat man so<br />
gut wie keinen Einfluss, aber die Dia -<br />
gramme sind optisch relativ ansprechend<br />
und ohne das Starten eines Extra-Tools<br />
schnell zu erstellen (siehe Abbildung 4).<br />
Die gemeinsame Schwäche der beiden<br />
Tools wird den Studenten bewusst, wenn<br />
sie anfangen, Klassen umzubenennen.<br />
Dann müssen sie jedes Vorkommen von<br />
Hand ändern. „Bei der Klasse, die du<br />
umbenannt hast, hast du vergessen, die<br />
Verwendungen als Parametertyp auch<br />
umzubenennen!” Punktabzug für Inkonsis -<br />
tenz.<br />
Mit Dialogen zum Modell<br />
„Bei Visio kann mir das nicht passieren:<br />
Das baut ein Modell zum Diagramm auf.”<br />
Das ist ein großer Schritt nach vorne, denn<br />
Visio stellt die Diagrammelemente in einem<br />
Modell-Explorer als Baum dar. Diagramme<br />
sind Sichten, die Teile des Modells visualisieren.<br />
Benennt man Elemente um, werden<br />
alle Vorkommnisse in Diagrammen entsprechend<br />
aktualisiert. Mit Ausnahme des<br />
Klassennamens lassen sie sich allerdings<br />
nur mit Dialogen bearbeiten.<br />
Abb. 4: Von yuml.me generiertes Klassendiagramm.<br />
Bei der Auswahl von Klassen als Typ<br />
müssen sich die Studenten leider mit einer<br />
einfachen Liste zufrieden geben. Je größer<br />
das Modell wird, desto länger dauert das<br />
Heraussuchen. Und wer sich unglücklich<br />
durch die Eigenschaften der Elemente klickt,<br />
hat schnell drei Dialoge gleichzeitig geöffnet<br />
(siehe Abbildung 5). „Ich sehe das<br />
Diagramm vor lauter Dialogen nicht.”<br />
Der Mehrwert von Modellen<br />
„Müsst ihr immer so lange Namen nehmen,<br />
ich tippe mir ja die Finger blutig.” –<br />
„Versuch es doch einmal mit 'Sparx<br />
Systems Enterprise Architect', da kriegt<br />
man mit + Completion.”<br />
Die meisten Softwareentwickler kennen<br />
diese Tastenkombination aus ihrer Ent -<br />
wicklungsumgebung. Bei Enterprise<br />
Architect kann man damit in Dialogen<br />
nach Klassen suchen. Noch gewohnter ist<br />
die Kombination, wenn man eine Methode<br />
oder ein Attribut im Diagramm mit <br />
bearbeitet und den Typ aus einer Liste mit<br />
Vervollständigungen aussuchen kann (siehe<br />
Abbildung 6). Auf diese Art lassen sich<br />
ganze Methodensignaturen überarbeiten.<br />
Studenten, die diese magischen Tasten<br />
kennen, kommen so fast um jeden Dialog<br />
herum. „Wau, das geht ja wie Brezeln ba -<br />
cken.” Unsere kleine Werkzeug-Vergleichs -<br />
studie ergab, dass Completion die Zahl der<br />
benötigten Tastatureingaben dramatisch –<br />
d. h. um bis zu 30 % – verringern kann.<br />
Studenten, die die Tastenkürzel nicht nutzten,<br />
konnten zwar noch von der Ver -<br />
vollständigung profitieren, mussten aber<br />
ähnlich wie bei Visio mit Dialogen arbeiten.<br />
Das Diagramm wieder im<br />
Vordergrund<br />
„Rational hat sämtliche Dialoge wegoptimiert!”<br />
Wer mit den älteren Versionen von<br />
Rational Rose bereits in Kontakt gekommen<br />
ist, wird sich kaum vorstellen können,<br />
dass IBM den jüngeren Produkten einen<br />
komplett überarbeiteten Editor spendiert<br />
hat. Auf Dialoge wird konsequent verzichtet.<br />
1/2012
fachartikel<br />
Abb. 5: Visio legt sogar mehrere Dialoge übereinander.<br />
Klassen, Attribute und Methoden werden<br />
direkt im Diagramm editiert (siehe<br />
Abbildung 7). „Wow, die sind weit gekommen!”<br />
– „Naja, nach der dritten Klasse bin<br />
ich ziemlich genervt. Ich muss jedes Mal<br />
zwei Sekunden warten, wenn ich auf die<br />
Diagrammfläche klicke, um eine neue<br />
Klasse anzulegen.” Wie bereits einleitend<br />
erwähnt, ist die Lernkurve bei den einzelnen<br />
Werkzeugen relativ konstant. Dafür<br />
baut sich eine Erwartungshaltung auf: Mit<br />
der Zeit gewöhnt sich der Benutzer an<br />
Mauswege und Abläufe. Er lernt, wo er<br />
hinklicken muss. Im schlimmsten Fall muss<br />
er dadurch auf das Tool warten, statt<br />
anders herum.<br />
Ein Whiteboard mit Modell<br />
„Mit UML Lab kannst du wirklich wie an<br />
einem Whiteboard arbeiten.” Bei Yatta<br />
Solutions wurde ein Klassendiagramm-<br />
Editor entwickelt, mit dem man seine<br />
Klassen wie auf einem Whiteboard zeichnet<br />
und dabei mit Vervollständigung aus<br />
dem Modell unterstützt wird. Das Anlegen<br />
von Klassen geschieht durch das Aufziehen<br />
eines Rechtecks auf dem Diagramm.<br />
Danach ist die Klasse selektiert und man<br />
kann damit beginnen, Klassenname sowie<br />
Attribut- und Methodensignaturen einzutippen.<br />
Ähnlich wie bei Rational Software<br />
Architect wird eine Vervollständigung<br />
angeboten, die aber zwischen Klassen im<br />
Diagramm und Modell unterscheiden<br />
kann. Verbindungen zwischen den Klassen<br />
werden mit der rechten Maustaste von<br />
Klasse zu Klasse gezogen.<br />
Diagrammelemente können überarbeitet<br />
werden, indem man sie selektiert und einfach<br />
anfängt zu tippen (siehe Abbildung 8).<br />
„Beim Aufziehen von Klassen hat man wieder<br />
das Gefühl, selbst ein Diagramm zu<br />
zeichnen, aber warum muss ich das noch<br />
selbst machen, wenn die Informationen<br />
doch schon im Quellcode vorliegen?”<br />
Agiles Reverse-Engineering<br />
„Hast du einmal versucht, Code wieder<br />
ein zu lesen?” Hier beginnt eine weitere Lei -<br />
densgeschichte unserer Studenten. Sobald<br />
Quellcode vorliegt, will niemand mehr die<br />
Abb. 6: Enterprise Architect blendet passende Modellelemente ein.<br />
54 55
fachartikel<br />
Abb. 7: Rational Software Architect verzichtet vollständig auf<br />
Dialoge.<br />
Abb. 8: Vervollständigung und Arbeiten im Diagramm bei UML<br />
Lab.<br />
Klassendiagramme dafür selbst zeichnen. Alle professionellen<br />
Modellierungswerk zeuge bieten das Einlesen von Quellcode an,<br />
aber von den Ergebnissen sind die Studenten mehr als enttäuscht.<br />
„Warum hat er die Assoziation jetzt nicht erkannt?” – „Warum<br />
hat er die Getter und Setter für den Namen ausgeblendet, aber für<br />
die Adresse nicht?” –„Na toll, die Klasse passt ja nicht mal auf den<br />
Bildschirm!”<br />
Technisch arbeiten die meisten Tools mit einer Heuristik, die versucht,<br />
zusammengehörige Artefakte wieder zusammenzufassen. Bei<br />
Zugriffsmethoden für JavaBean-Properties funktioniert das noch<br />
relativ gut. Heuristiken versagen allerdings bei angepassten<br />
Zugriffsmethoden oder Asso ziationsimplementierungen.<br />
UML Lab beschreitet hier einen interessanten neuen Ansatz, bei<br />
dem Imple mentierungsdetails über ein template-basiertes Reverse-<br />
Engineering vor dem Modell verborgen werden. Je mehr<br />
Implementierungsdetails man in Templates beschreibt, desto übersichtlicher<br />
werden die Klassendiagramme. „Ich hab ein eigenes<br />
Template für unseren PropertyChange-Mechanismus geschrieben.<br />
Jetzt zeigt er das als Stereotyp für das Attribut an, anstatt Getter<br />
und Setter im Diagramm zu zeigen. Die sind ja ohnehin überall<br />
gleich implementiert.”<br />
Kontextbezogene Diagramme<br />
„Mich interessiert so einiges nicht, was ich im Klassendiagramm<br />
sehe. Kann man nicht nur die Elemente anzeigen, an denen man<br />
gearbeitet hat, wie bei Mylyn?” Wer schon einmal die Übersicht<br />
über den eigenen Quellcode verloren hat, sollte sich mit den<br />
Produkten von Tasktop beschäftigen. Mittlerweile gehört Mylyn<br />
zum Bestandteil der Eclipse-IDE und auch eine Visual-Studio-<br />
Integration ist verfügbar. Mylyn lernt, welche Methoden in einem<br />
bestimmten Kontext, z. B. bei der Arbeit an einem Ticket, aus<br />
einem Bug-Tracker verwendet wurden. Alle anderen Elemente werden<br />
ausgeblendet: Im Project Explorer verschwinden nicht berührte<br />
Klassen und Packages, nicht relevante Break-Points werden ausgeblendet<br />
und lediglich der relevante Kontext bleibt übrig.<br />
Yatta Solutions hat dieses Konzept in UML Lab auch auf<br />
Klassendiagramme übertragen. Mit der Mylyn-Integration wird es<br />
möglich, sich ein Klassendiagramm anzeigen zu lassen, in dem nur<br />
die für einen Task relevanten Klassen, Attribute und Methoden<br />
sichtbar sind, ohne dass man selbst zeichnen muss. Die Übersichtlichkeit<br />
von Klassendiagrammen wird so auch in agilen Projekten<br />
auf Knopfdruck nutzbar.<br />
Verteiltes Arbeiten<br />
„Super, wir haben jetzt das grobe Modell zusammen. Am besten<br />
macht jeder von euch die Feinmodellierung für sich und wir treffen<br />
uns morgen wieder, um das zusammenzuführen.” Eigentlich ist das<br />
eine Horrorvorstellung für jeden, der schon eimal versucht hat,<br />
Modellinformationen zu mischen. Woran liegt das?<br />
Wenn mehrere Leute an dem gleichen Modell arbeiten wollen,<br />
gibt es im Wesentlichen zwei Möglichkeiten: Entwe der hat man ein<br />
mehrbenutzer-fähiges Tool, wie zum Beispiel TeamViewer oder<br />
Google Docs, oder ein altes CASE-Tool, das die Modelle in einer<br />
zentralen Datenbank editiert. Das heißt: Eigentlich arbeiten alle<br />
auf dem gleichen Modell, nur mit vielen Mäusen und Tastaturen –<br />
oder jeder hat seine eigene Modellkopie. Jeweils eigene Kopien der<br />
Modelle zu haben, entkoppelt die einzelnen Modellierer. Jeder<br />
kann seine Änderungen in Ruhe ausprobieren, ohne von den Änderungen<br />
der anderen gestört zu werden. Aber wenn jeder seine eigene<br />
Modellkopie hat, muss man die verschiedenen Änderungen<br />
nachher wieder in eine gemeinsame Version zusammenführen. Bei<br />
Quelltext macht man das mit Versions verwaltungssystemen wie<br />
Subversion oder Git, wo das auch prima klappt. Bei Modelldateien<br />
klappt das normalerweise gar nicht. Nach dem Merge sind die<br />
Modelldateien nicht mehr ladbar und man muss mühsam in den<br />
XML-Formaten herumbasteln, damit man überhaupt weiter arbeiten<br />
kann. Abhilfe schaffen hier nur meist sehr teure<br />
Modellierungswerkzeuge, die die Modelle selbst versionieren können.<br />
Oder man nimmt einen universitären Prototyp wie Fujaba<br />
oder SiDiff.<br />
Neuerdings gibt es hier eine dritte Alternative durch Werkzeuge<br />
mit guter Round-Trip-Engineering-Funktionalität. Jeder generiert<br />
aus seiner Modellkopie einfach Quelltext, der dann versioniert und<br />
gemerged wird. Nach dem Merge lädt man den Quelltext wieder<br />
ins Model lierungswerkzeug – voila. Merge-Konflikte muss man<br />
zwar auf der Quelltext-Ebene behandeln, aber das ist allemal besser<br />
als in den XML-Modell-Dateien. Insgesamt funktioniert das bei<br />
unseren Studenten mit UML Lab schon ganz gut. Man verliert<br />
1/2012
fachartikel<br />
Whiteboard<br />
PowerPoint/<br />
Libre Draw<br />
Dia<br />
yuml.me<br />
Visio<br />
Enterprise<br />
Architect<br />
Software<br />
Architect<br />
UML Lab<br />
und Yatta Solutions haben für die<br />
Werkzeuge „Papyrus” respektive „UML<br />
Lab” bereits Prototypen für einen grafischen<br />
Merge gezeigt, mit denen sie dieses<br />
Problem angehen wollen.<br />
Grafischer Editor ● ● ● ○ ● ● ● ●<br />
Layout anpassbar ● ● ● ○ ● ● ● ●<br />
Autolayout ○ ○ ○ ● ● ● ● ●<br />
Modell ○ ○ ○ ○ ● ● ● ●<br />
Views ○ ○ ○ ○ ● ● ● ●<br />
Layers/Filter ○ ○ ○ ○ ● ● ● ○<br />
Auto-Completion ○ ○ ○ ○ ○ ● ● ●<br />
Dialogfrei ○ ● ○ ● ○ ○ ● ●<br />
Wartezeitfrei ○ ● ● ○ ● ● ○ ●<br />
Gestenerkennung ○ ○ ○ ○ ○ ○ ○ ●<br />
Anpassbare Codegenerierung ○ ○ ○ ○ ○ ● ○ ●<br />
Templates zum<br />
Reverse-Engineering ○ ○ ○ ○ ○ ○ ○ ●<br />
Round-Trip-Engineering ○ ○ ○ ○ ○ ○ ○ ●<br />
Kontextbasierte Diagramme<br />
(Mylyn Integration) ○ ○ ○ ○ ○ ○ ○ ●<br />
Alle 14 UML-Diagrammarten ● ○ ○ ○ ● ● ● ○<br />
Gemeinsames Modellieren ● ○ ○ ○ ○ ○ ○ ●<br />
Verteiltes Arbeiten ○ ○ ○ ○ ○ ○ ○ ●<br />
Geeignet für<br />
[Hes10] Hessisches Ministerium für<br />
Wirtschaft, Verkehr und Landesentwicklung,<br />
Hessen-IT News, 2010, siehe: http://www.hessen-it.de/mm/Hessen-IT_NEWS_0310.pdf<br />
Teambesprechung<br />
Präsentationen<br />
–<br />
Darstellung von Reverse<br />
Engineering Webseiten<br />
Vermischen von<br />
Diagrammarten<br />
Design<br />
Design<br />
Round Trip,<br />
Agiles Arbeiten<br />
Fazit<br />
Einfache Modellierungswerkzeuge wie Dia<br />
oder Visio stehen dem Entwickler häufig im<br />
Weg, da sie Teile des Diagramms unter<br />
Dialogen begraben. Die professionellen<br />
Werkzeuge von Sparx Systems und IBM<br />
haben dieses Stadium größtenteils hinter<br />
sich gelassen. Sie bieten die Möglichkeit, im<br />
Diagramm zu arbeiten, und beschleunigen<br />
die Arbeit, indem sie eine Vervoll ständi -<br />
gung basierend auf dem Modell anbieten.<br />
UML Lab ging aufgrund der neuen<br />
Eingabemöglichkeiten im Klassendia -<br />
gramm-Editor bereits in unserer Studie als<br />
Sieger hervor. Die damals erreichten 16 %<br />
Zeitersparnis kann es mit template-basiertem<br />
Reverse-Engineering und kontextbasierten<br />
Klassendiagrammen noch weiter<br />
steigern. Die in diesem Artikel angesprochenen<br />
Werkzeuge, Bewertungskriterien<br />
und Einsatzzwecke fasst Tabelle 1 zusammen.<br />
Viel wichtiger ist jedoch, dass Model -<br />
lierungswerkzeuge nicht mehr nur Pro -<br />
bleme am Anfang des Entwicklungs -<br />
prozesses lösen. Sie dringen in die<br />
Implementierungsphase vor, werden selbst<br />
flexibler und helfen so, auch bei agilem<br />
Vorgehen den Überblick über große<br />
Software zu behalten.<br />
Der Trend geht endlich in die richtige<br />
Richtung. Es wird Zeit, dass Software -<br />
entwickler sich nicht mehr mit umständlichen<br />
Werkzeugen selbst quälen. Auf<br />
meinem Tablet kann ich jetzt Klassen -<br />
diagramme entwerfen, als wäre es ein intelligentes<br />
Blatt Papier. Fehlt nur noch ein sechs<br />
Quadratmeter großer Touchscreen. ■<br />
Tabelle 1: Werkzeuge, Bewertungskriterien und Einsatzzwecke.<br />
Link<br />
zwar manchmal etwas Layout, aber die<br />
logischen Dinge kriegt man ganz gut<br />
zusammen.<br />
Neben dem Merge möchte man manchmal<br />
auch die Änderungen, also das Diff auf<br />
Modellebene, angezeigt bekommen. OBEO<br />
56 57
fachartikel<br />
der autor<br />
MIGRATIONSMANAGEMENT:<br />
FALLSTUDIE ZUR MIGRATION<br />
EINER INDUSTRIELLEN<br />
RICH-CLIENT-ANWENDUNG<br />
Die IT-Welt ist in einem ständigen Wandel begriffen. Softwaresysteme, die heute konstruiert<br />
werden, sind sehr wahrscheinlich schon bald Altsysteme und müssen migriert werden. Das<br />
bestätigt auch ein aktuelles Migrationsprojekt aus der Pharmaindustrie, dessen technologischer<br />
Stand eher als „State of the art” bezeichnet werden kann. Am Beispiel dieses Projekts<br />
geht der Artikel den Fragen nach, warum und wie migriert wurde. Konkret handelt es sich um<br />
eine Rich-Client-Anwendung, die auf die OSGi-Plattform Eclipse migriert wurde, um modular zu<br />
sein, was nicht zuletzt mit dem Ziel der Auslagerung einer Modulentwicklung nach China<br />
zusammenhängt.<br />
Eldar Sultanow<br />
(E-Mail: sultanow@xqs-service.com)<br />
ist CIO der XQS-Service GmbH, die zur in Hof ansässigen<br />
Firmengruppe Max Service International AG<br />
gehört. Er ist verantwortlich für internationale<br />
Projekte mit Schwerpunkt auf JEE-Architekturen,<br />
Web-Technologien und RFID-Anwendungen.<br />
Bei dem in diesem Artikel beschriebenen<br />
Beispiel handelt es sich um ein Pharma -<br />
industrieprojekt, mit dem eine Infrastruk -<br />
tur für die Fälschungs- und Qualitäts -<br />
sicherheit von Arzneimitteln aufgebaut<br />
wurde. Die Pharmaindustrie ist ein spezielles<br />
Umfeld, das sich mit wenigen Beispiel -<br />
ereignissen treffend beschreiben lässt.<br />
Innerhalb von nur zwei Monaten konfiszierte<br />
die EU bei gezielten Zollkontrollen in<br />
allen Mitgliedsländern 34 Millionen ge -<br />
fälschte Tabletten (vgl. [Schl09]). Laut<br />
Weltgesundheitsorganisation (WHO) enthalten<br />
60 % der gefälschten Arzneien keinen<br />
Wirkstoff, 19 % enthalten eine falsche<br />
Wirkstoffmenge und 16 % komplett falsche<br />
Wirkstoffe (vgl. [Schw07]). Hierbei<br />
tauchen 70 % der Arzneimittelfälschungen<br />
in den Entwicklungsländern auf. Das jährliche<br />
Umsatzvolumen mit Arzneimittel -<br />
fälschungen wird auf 100 Milliarden US-<br />
Dollar geschätzt. Im Jahr 2009 wurden<br />
Chargen von HIV-Medikamenten aus deutschen<br />
Apotheken zurückgerufen und im<br />
selben Jahr gab es Chargenrückrufe, die<br />
sich auf (gesundheitsgefährdende) Quali -<br />
täts mängel wie z. B. bakterielle Konta -<br />
minierung beziehen. Letztes Jahr starben<br />
drei Säuglinge an einer verunreinigten<br />
Infusion in der Klinik Mainz. Zu Beginn<br />
dieses Jahres hat die Integrierte Ermitt -<br />
lungseinheit Sachsen (INES) Ermittlungen<br />
wegen banden- oder gewerbsmäßiger<br />
Bestechung von Ärzten durch einen Leip -<br />
ziger Parenteral-Hersteller 1 ) und Apotheker<br />
eingeleitet.<br />
1<br />
) Ein Parenteral-Hersteller ist ein Hersteller von sterilen<br />
Zubereitungen, die zur Injektion, Infusion oder<br />
Implantation bestimmt sind.<br />
Abb. 1: Infrastruktur für Fälschungs- und Qualitätssicherheit in der Pharmaindustrie.<br />
58 59
fachartikel<br />
Abbildung 1 zeigt schematisch die technische<br />
Infrastruktur für Fälschungs- und<br />
Qualitätssicherheit von Arzneimitteln. Sie<br />
liegt dem Track & Trace – von der Medi -<br />
kamentenherstellung bis hin zur -abgabe –<br />
zu Grunde und wird derzeit im onkologischen<br />
Bereich eingesetzt. Hersteller senden<br />
ihre Originalprodukte an das Pharma-<br />
Trust-Center, das diese mit RFID kennzeichnet<br />
und in einer zentralen Datenbank<br />
serialisiert. Die gesicherten Produkte gelangen<br />
weiter in den Großhandel, in<br />
Apotheken und Kliniken. Diese besitzen<br />
jeweils ein oder mehrere Terminals zur<br />
Verifizierung von Arzneimittelpackungen<br />
und zur Überprüfung der Temperaturen.<br />
Lieferungen sind hierzu mit einem RFIDbasierten<br />
Temperatur-Logger ausgestattet.<br />
Die Herkunft und der Distributionsweg<br />
von Arzneien sowie die während Lagerung<br />
und Transport gemessene Temperatur werden<br />
damit nachvollzogen. Das ist wichtig,<br />
weil das Verletzen des vorgeschriebenen<br />
Temperaturintervalls (2–8 °C) kühlpflichtiger<br />
Zytostatika zu Wirksamkeitsverlust<br />
und schließlich zum Behandlungsmisserfolg<br />
von schwer kranken Patienten führt.<br />
Das Softwaresystem<br />
Um sich ein genaueres Bild von der Art und<br />
Größe der migrierten Anwendung machen<br />
zu können, beschreibe ich im Folgenden<br />
das Softwaresystem und charakterisiere seine<br />
wesentlichen Bestandteile anhand von<br />
Codezeilen (LoC).<br />
In Abbildung 2 sind die Systemarchi -<br />
tektur und -komponenten dargestellt. Die<br />
eingesetzte Hardware umfasst RFID-<br />
Lesegeräte. Der Tunnel-Reader ist ein Pulk-<br />
Lesegerät, das mehrere 100 gekennzeichnete<br />
Packungen in einem Schritt binnen<br />
Millisekunden liest. Die Terminals enthalten<br />
Einzel-Lesegeräte für das Steuern und<br />
Auslesen der Temperatur-Logger sowie für<br />
die Erfassung und Verifikation einzelner<br />
Packungen und Infusionsbeutel.<br />
Auf jedem Terminal ist eine Rich-Client-<br />
Anwendung installiert, die über die (in<br />
C/C++ geschriebene) XQS-Edgeware sämtliche<br />
RFID-Lesegeräte ansteuert und über<br />
XML-RPC/SOAP-Services Daten zur Arz -<br />
neimittel-Verifikation aus der zentralen<br />
Pharma-Datenbank abfragt und Tempera -<br />
tur-Messreihen in der Datenbank speichert.<br />
Diese Rich-Client-Anwendung steuert<br />
ebenfalls (über die Edgeware) Pulk-Lese -<br />
geräte an und serialisiert massenweise<br />
Arzneimittelpackungen. Bei dem hier thematisierten<br />
Migrationsprojekt handelt es<br />
Abb. 2: Systemarchitektur und Komponenten der XQS-Infrastruktur (XQS =<br />
Maximale Qualitätssicherheit).<br />
sich genau um diese Rich-Client-Anwen dung. Die Art und Größe der genannten<br />
Komponenten fasse ich hier kurz zusammen:<br />
■ Edgeware (9.476 LoC): Die Edgeware umfasst in der Programmiersprache C/C++ entwickelte<br />
Werkzeuge für Linux, Windows und Windows CE zur Ansteuerung der<br />
RFID-Lesegeräte: Pulk-Lesegeräte (Tunnel-Reader), Ein zel-Lese geräte (Terminals) und<br />
mobile Lesegeräte in Handhelds.<br />
■ Web-Portal (16.726 LoC): Das Portal ist eine Web-Anwendung für den auf OSGi<br />
(Open Services Gateway initiative) basierenden Applikationsserver „Virgo” (vgl.<br />
[Sul10a]). Es umfasst: „Spring Controller”, „Java Server Pages”, „Cascading Style<br />
Sheets”, „Java Scripts” und das „Object Relational Mapping” (ORM), basierend auf<br />
dem JPA-Standard und der Referenzimplementierung „Eclips eLink”.<br />
■ Rich-Client-Anwendung (23.324 LoC, 20.030 LoC nach Migration): Die<br />
Ausgangsversion basiert auf Swing im Frontend und JPA (Java Persistence API) mit<br />
Hibernate im Backend. Das Transaktionsmanagement übernahm „Atomikos”, weil es<br />
in selbstständigen Desktop-Applikationen einsetzbar ist. Die gesamte Anwendung verwendete<br />
das Spring-Framework, das ihren strukturellen Aufbau auf deklarative Weise<br />
beschreibt.<br />
■ Web-Dienste (4.842 LoC): Die Web-Dienste sind ein Sammelsurium unabhängiger<br />
XML-RPC- und SOAP-Ser vices.<br />
Die Rich-Client-Anwendung wird aktuell an 12 Lesestationen eines Pharmagroß handels,<br />
an 8 Lesestationen in Apotheken und auch mittlerweile in der Lebensmittel industrie eingesetzt.<br />
Insbesondere stellt die Temperatur-Sensorik (siehe Abbildung 3) eine interessante<br />
Anwendung für den Lebensmittelgroßhandel dar. Bevor die Temperatur-Logger dem<br />
Arzneimittel-Paket hinzugefügt werden, müssen sie scharf geschaltet werden (links). Nach<br />
ihrer Ankunft in der Klinik oder Apotheke werden die Temperaturen ausgelesen (rechts).<br />
Warum die Software technologie wechseln?<br />
Die eingesetzten Frameworks sind nicht obsolet und gehören eher der neuen Generation<br />
an. Was führte dennoch zu dem Gedanken, einen Technologiewechsel im Rahmen eines<br />
umfangreichen Migrations projekts durchzuführen?<br />
1/2012
Nicht geplante Produktderivate brachten das Spring-Framework<br />
schnell an seine Grenzen und waren sicher der Hauptgrund für die<br />
Migration. Funktionen bei Bedarf zu ergänzen, anzupassen oder zu<br />
entfernen, gestaltet sich ohne den Einsatz eines Plug-In- bzw.<br />
Modul-Systems als schwierig. Eine nicht ohne Weiteres abzubildende<br />
Anforderung bestand beispielsweise darin, neben<br />
Temperatur- auch Schock-Sensoren zu integrieren und eine<br />
Administrator-Version mit erweiterten Funk tionen zu erstellen –<br />
und dies in jeder möglichen Kombination. Das richtige Stich wortet<br />
hierfür lautet „Produktlinien-Architektur” und ein etablierter<br />
Standard ist OSGi, der dazu dient, Software zu modularisieren und<br />
über ihren gesamten Lebenszyklus hinweg zu verwalten (vgl.<br />
[Lie08]). Das der Modularisierung zu Grunde liegende<br />
Komponentenmodell besteht aus so genannten Bundles (auch als<br />
Services bezeichnet), deren Lebenszyklus die Service-Registry verwaltet.<br />
Wie wurde das Plug-In-Problem vorerst mit dem Spring-<br />
Framework gelöst? Für jeden Anwendungsfall wurde je eine entsprechende<br />
Spring-Kontextdatei angelegt. Diese Lösung ist jedoch<br />
ungeschickt, weil im Quellcode manuell geprüft werden muss, ob<br />
optionale Komponenten vorliegen oder nicht, die dann auf proprietäre<br />
Weise eingebunden und in der graphischen Benutzungs -<br />
oberfläche verfügbar gemacht werden.<br />
Begrenzungen des Umfangs und der Performance von Swing<br />
bekräftigten die Entscheidung für eine Migration. Die Swingfachartikel<br />
Abb. 3: Temperatur-Sensorik und Pulk-Lesen mit der ursprünglichen<br />
Anwendung.<br />
Oberfläche ist langsam, nicht son derlich schön und wenig umfangreich.<br />
So ist beispielsweise keine Task-Leiste standardmäßig<br />
enthalten, die zusätzlich aus SwingX, ein offenes Swing-Er -<br />
weiterungs paket, übernommen wurde.<br />
Die externe Entwicklung funktionaler Bausteine lässt sich auf<br />
einfache Weise bewerkstelligen, wenn Schnittstellen für die zu entwickelnde<br />
Anwendung definierbar und öffentlich sind. Der<br />
Projektinhaber gründete ein deutsch-chinesisches Joint-Venture<br />
HEMSN in der chinesischen Hafen stadt Dalian mit zwei Zustän -<br />
dig keiten: Pharma und IT. Einen Großteil der Entwicklung sollen<br />
nun die Entwickler in China übernehmen (siehe Abbildung 4).<br />
Auch hier ist OSGi das Stichwort, unter dem das Konzept für die<br />
Modularisierung und unabhängige Entwicklung funktionaler<br />
Bausteine (Plug-Ins) fällt.<br />
Produktlinien-Architektur<br />
Im zuerst genannten der drei obigen Punkte zum Beweggrund des<br />
Softwaretechnologie wechsels fiel das Stichwort „Produktlinien-<br />
Architektur”. Diese ist das Kernstück einer Produktlinie und legt<br />
fest, wie aus den Produktanforderungen das jeweilige Deri vat bzw.<br />
die jeweiligen Produktlinien-Komponenten erstellt werden können<br />
(vgl. [Zac07]). Jedes Produkt derivat muss dabei ein eigenes<br />
Branding und – wie bereits erwähnt – unterschiedliche bestimmte<br />
Features besitzen können. Die Produktlinien-Architektur ermöglicht<br />
es, diverse Brandings anzulegen und einzelne Features wegzu-<br />
Abb. 4: Outsourcing der Komponentenentwicklung für Pharma<br />
& IT veranlasste die Migration der gesamten RFID-Anwendung<br />
zur Fälschungs- und Qualitätssicherung onkologischer<br />
Medikamente. Mittlerweile wurden vier Aufträge entsprechend<br />
den formulierten Anforderungen abgewickelt.<br />
60 61
fachartikel<br />
konfigurieren. Im Fall von OSGI/Eclipse<br />
sind das so genannte Pro duktkon -<br />
figurationen, die in Form von XML-<br />
Dateien vorliegen und genau spezifizieren,<br />
welche Bundles und branding-spezifischen<br />
Elemente beim Produktexport verwendet<br />
werden sollen. Eclipse 4 re prä sentiert hierbei<br />
als Plattform die Referenzarchitektur<br />
mit dem Ziel, dass alle Mitglieder des<br />
Produktlinien-Teams ein gemeinsames<br />
Verständnis vom Aufbau der Komponenten<br />
und Produkte besitzen. Damit einhergehend<br />
stehen während des Produktions -<br />
prozesses die fachliche Archi tektur und die<br />
Diskussion über fachliche Schnittstellen,<br />
Prozesse und Services im Fokus. Die technische<br />
Architektur muss nach einer gewissen<br />
Zeit so selbstverständlich sein, dass sie<br />
intuitiv verwendet wird und nicht wie in<br />
vielen Entwicklungs vorhaben Gegenstand<br />
der typischen Diskussionen, wie etwa<br />
„Sollen wir nicht doch Hibernate anstelle<br />
von EclipseLink verwenden?”, ist (vgl.<br />
[Zac07]).<br />
Die Produktlinien-Architektur setzt eine<br />
stark ausgeprägte Komponentenorien -<br />
tierung voraus, die voneinander unabhängige,<br />
jedoch kombinierbare Module mit<br />
definierten Schnittstellen erzwingt. In OSGi<br />
werden die Module durch Bundles und<br />
Plug-Ins (z. B. für die Temperatur-Sensorik<br />
oder für das Pulk-Lesen) abgebildet, wobei<br />
die Modulschnittstelle auch klar angibt,<br />
von welchen Bundles und Plug-Ins das<br />
Modul wiederum abhängt.<br />
Die zentrale für die gesamte Produktlinie<br />
gültige Referenzarchitektur stellt für alle<br />
Produkte und Produktderivate die Erfül -<br />
lung sämtlicher nicht-funktionaler Anfor -<br />
derungen (Performance, Verfügbarkeit,<br />
Skalierbarkeit, Robustheit usw.) sicher, da<br />
diese Anforderungen durch die Architektur<br />
selbst abgedeckt werden.<br />
Migration und Outsorcing<br />
Ein entscheidender Vorteil von Modu -<br />
larisierung besteht darin, dass sich Module<br />
unabhängig von Teams entwickeln lassen –<br />
und dies an weltweit entfernten Stand -<br />
orten. Ein Großteil des Kommunikationsund<br />
Koordinierungsbedarfs entfällt durch<br />
die erzwungenen Modulschnittstellen. Das<br />
heißt, eine permanente Rückkopplung zwischen<br />
dem die Module entwickelnden<br />
Team und dem Produktverantwortlichen –<br />
also dem, der die Produkte für die Kunden<br />
zusammenstellt und exportiert – ist nicht<br />
mehr notwendig. Dasselbe gilt für die<br />
Vier elementare Ausgangssituationen liegen dem heutigen Migrationsmanagement zu<br />
Grunde und bilden die Basis des in Abbildung 5 dargestellten Situationsmodells. Der<br />
geschilderte Praxisfall trifft passgenau auf Situation 1 zu: Obwohl die Technologie<br />
aktuell ist, erfüllt sie die neuen Anforderungen nicht mehr. Situation 2 stellt den Idealfall<br />
dar: Die eingesetzte Technologie ist aktuell und deckt alle gegenwärtigen und bestenfalls<br />
auch künftigen Anforderungen ab. Dennoch kann Situation 2 mit der Zeit in Situation<br />
3 oder 4 übergehen. Situation 3, also das zunehmende Übergewicht neuer Anforderun -<br />
gen an eine mittlerweile obsolete Technologie, ist derzeit der am weitesten verbreitete<br />
Fall: Etwa 70 % der unternehmerischen Daten und Geschäftsprozesse werden in<br />
Altsystemen abgewickelt (vgl. [Sul10b]). In Situation 4 erfüllen die Altsysteme nach wie<br />
vor alle Anforderungen und müssen nicht unbedingt migriert werden. Dennoch gibt es<br />
mehr oder weniger rationale Beweggründe, trotzdem zu migrieren: Entweder, um sich<br />
vorsorglich gegen einen am Horizont sichtbaren Ansturm neuer Anforderungen mit etablierten<br />
Technologien zu wappnen oder um einfach nur den aktuellen Trend der<br />
Softwareentwicklung zu erfüllen.<br />
Abb. 5: Vier grundlegende Situationen des Migrationsmanagements.<br />
Anforderungs- versus Trenderfüllung<br />
Das Gesetz von Moore [Moo65] beschreibt den IT-Wandel mit einer Verdopplung der<br />
Prozessor-Leistungsfähigkeit alle 18 Monate. Betriebssysteme müssen im Rhythmus von<br />
36 Monaten für jede zweite Prozessorgeneration erneuert werden. Ihre Veränderung<br />
wirkt sich auf Programmumgebung und Datenbanksysteme aus, die alle fünf Jahre angepasst<br />
bzw. neu entwickelt werden müssen, woraus eine fünfjährige Halbwertzeit für<br />
Anwendungssoftware resultiert (vgl. [Sne10]). Der Preisfall des Datentransports nach<br />
dem Gesetz von Metcalfe (vgl. [Met95]) schafft eine Überkapazität an Kommunikations -<br />
einrichtungen, die IT-Nutzer sinnvoll in Anspruch nehmen sollen und hierzu ihre<br />
Anwendungen neu ausrichten müssen. Aus dem wirtschaftlichen Konkurrenzkampf, der<br />
eine Anpassung an die veränderten Wettbewerbsbedingungen verlangt, resultiert zusätzlicher<br />
Druck aus dem Markt: Unternehmen müssen sich geschäftlich anders aufstellen<br />
und schneller, besser und flexibler auf die globale Nachfrage reagieren (vgl. [Sne10]).<br />
Der Anspruch an die Änderbarkeit und Erweiterbarkeit von Anwendungssoftware<br />
bedarf wiederum neuer Sprachen und Entwicklungsumgebungen.<br />
Zu dem Trend der Leistungssteigerung von Hardware und der sich schneller ändernden<br />
Anforderungen kommt ein personeller Trend hinzu: der Rückgang von Experten, die die<br />
Altsysteme entwickeln und warten. Viele Anwendungssysteme sind für die Anwender<br />
ohne geschäftskritische Relevanz und werden von Nicolas Carr (vgl. [Car03]) lediglich<br />
als „Commodity” bezeichnet. Also spielt weniger die Funktionsweise als vielmehr die<br />
Funktionsfähigkeit eine Rolle. Dennoch müssen auch solche Systeme gepflegt werden,<br />
und irgendwann stirbt das „Pflegepersonal” aus, da junge Entwickler kaum bereit sind,<br />
sich in alte Sprachen und Umgebungen einzuarbeiten (vgl. [Sne10]). IT-Manager sehen<br />
sich immer häufiger dem Problem gegenüber, dass sie kein Personal mehr finden, um das<br />
alte System zu pflegen. Ausgerechnet heute, wo die erste Entwicklergeneration die Bühne<br />
verlässt, ist das Thema Migration aktueller denn je und sämtliche Eigenentwicklungen<br />
der 70er- und 80er-Jahre stehen zur Disposition.<br />
Kasten 1: Migrationsmanagement heute.<br />
1/2012
fachartikel<br />
Rückkopplung zwischen Modul- und<br />
Architekturentwicklern. Erstere befassen<br />
sich mit der Abdeckung funktionaler und<br />
letztere mit der der nicht-funktionalen<br />
Anforderungen. Weil die Referenzarchi -<br />
tektur die Softwareentwicklung hinsichtlich<br />
beider Anforderungen strikt trennt,<br />
kann nun nach der Migration die Ent -<br />
wicklung von Features ohne großen<br />
Aufwand an die Entwickler des chinesischen<br />
Partners übergeben werden. Die<br />
Rückintegration bzw. Einbindung der off -<br />
shore entwickelten Module erfolgt gemäß<br />
OSGi automatisch, da die Modulent -<br />
wickler die von der Referenzarchitektur<br />
vorgegebenen und daher nicht umgehbaren<br />
Schnittstellen verwenden müssen.<br />
Mit der ursprünglichen auf dem Spring-<br />
Framework basierenden Anwendung war<br />
dies nicht möglich. Entwickler hätten<br />
„irgendwelche” Klassen entwickeln, diese<br />
an beliebiger Stelle in den Spring-Kontext<br />
einbinden und dabei auch noch (unbewusst)<br />
Eingriff in die gesamte Anwen -<br />
dungsarchitektur nehmen können. Ein<br />
ordentliches gemeinsames Entwickeln an<br />
dem Projekt wäre ohne größeren Aufwand<br />
nicht möglich: Schulungen, Erläuterungen<br />
der proprietären Architektur, Schnitt -<br />
stellen, Programmier-Richtlinien, zu verwendende<br />
Frameworks/Packages usw.<br />
wären erforderlich gewesen.<br />
All dies wird ja bereits mit OSGi vorgegeben.<br />
Letztendlich werden beim Export<br />
der Produktversionen die Module einfach<br />
eingeklinkt, wobei deren „Innereien” völlig<br />
gekapselt sind. Die Praxis hat dennoch<br />
gezeigt: Auch wenn Module nach dem<br />
Black-Box-Prinzip offshore entwickelt und<br />
mühelos in die neue migrierte Anwendung<br />
eingebunden werden können, lohnt sich ab<br />
und zu ein Blick auf das Modul-Innen -<br />
leben.<br />
barkeit” getrieben, der mit den zwei<br />
Hauptzielen, Produktvarianten zu erstellen<br />
und die Entwicklung nach China auszulagern,<br />
im Zusammenhang steht. Deshalb<br />
war für die Analyse der Migrationsnutzen<br />
unbestritten. Die Anforderung an die<br />
Modularisierbarkeit im Hinblick auf das<br />
Erstellen von Produktvarianten und das<br />
Outsourcing standen deutlich im Vorder -<br />
grund:<br />
■ Konfigurierbarkeit von eigenem<br />
Branding: Jede Produktvariante muss<br />
mit einem eigenen Branding (Begrü-<br />
ßungsbildschirm, Titel, Programm-Icon<br />
usw.) ausstattbar sein, damit ein unabhängiger<br />
Vertrieb durch Dritte erfolgen<br />
kann. Man spricht hierbei von einem so<br />
genannten „Weißprodukt” (White-<br />
Label-Produkt).<br />
■ Kombinierbarkeit von Funktionen zu<br />
Funktionsbündeln: Eine Produkt -<br />
varian te definiert sich über das Kombi -<br />
nieren von Funktionen, die sowohl<br />
Standardfunktionen als auch individuelle<br />
Erweiterungen sein können. Das<br />
Bündeln dieser Funktionen muss in<br />
einem simplen Arbeitsschritt durchführbar<br />
sein.<br />
■ Auslagerbarkeit nach dem Black-Box-<br />
Prinzip: Für das Outsourcing der<br />
Entwicklung von Funktionen bzw. von<br />
Funktionsbündeln darf keine Offen -<br />
legung interner Anwendungsbestand -<br />
teile erforderlich sein. Funktionen müssen<br />
autonom, lose gekoppelt und<br />
mittels Schema gemäß einem Vertrag<br />
definiert sein.<br />
Diese drei Hauptanforderungen liegen der<br />
Wahl einer geeigneten Zielplattform zu<br />
Grunde.<br />
Wahl der Zielplattform<br />
Die Kombinierbarkeit von Funktionen und<br />
die Auslagerbarkeit von deren Entwicklung<br />
nach dem Black-Box-Prinzip führten zu<br />
dem Standard OSGi, der speziell zur<br />
Abdeckung dieser Anforderungen entwi -<br />
ckelt wurde. Die Eclipse Rich Client<br />
Platform (RCP) ist eine Implementierung<br />
der OSGi-Spezi fikation und ermöglicht das<br />
Umsetzen modu larer Applikationen, die<br />
aus Plug-Ins bestehen. Damit sich die Wahl<br />
der OSGi-Technologie oder genauer gesagt<br />
Eclipse RCP endgültig treffen ließ, waren<br />
funktionale sowie strukturelle Anfor -<br />
derungen der zu migrierenden Anwendung<br />
abzugleichen. Hierzu zählten eine Dia -<br />
grammfunktion im Frontend, ein Persis -<br />
tenz-/ORM-Frame work im Backend und<br />
die Anwendbarkeit des vom Spring-Frame -<br />
work bekannten Entwurfsmuster<br />
Dependency Injection (DI). Dieser Ab -<br />
gleich konnte schnell vollzogen werden: In<br />
Eclipse ist das freie Werkzeug Business<br />
Intelligence and Reporting Tools (BIRT)<br />
enthalten, das eine umfassende Diagrammund<br />
Report-Erstel lungsfunktion besitzt.<br />
Eclipse liefert weiterhin EclipseLink für das<br />
objekt-relationale Mapping und folgt in<br />
seiner vierten Version auch dem DI-<br />
Entwurfsmuster mittels An no tationen.<br />
Damit fiel die Wahl der Eclipse-RCP als<br />
Zielplattform leicht und man wendete sich<br />
dem nächsten Schritt zu: dem Schätzen des<br />
Aufwands für den Quellcode-Transfer.<br />
Aufwandsschätzung des Transfers<br />
Die eigentliche Umsetzung besteht in dem<br />
Transfer des gesamten Quellcodes. Der<br />
Aufwand wurde in den Systemschichten<br />
Frontend, Backend und übergreifendes<br />
Basissystem geschätzt (siehe Tabelle 1). Das<br />
Fünf Hauptschritte<br />
der Migration<br />
Die Migration des Projekts erfolgte in fünf<br />
wesentlichen Schritten: Migrationsanfor -<br />
derungs analyse, Wahl der Zielplattform,<br />
Aufwandsschätzung, Quellcode-Transfer<br />
(die eigentliche Umsetzung) in die Ziel -<br />
plattform und abschließende Validierung<br />
der neuen Applikation.<br />
Migrationsanforderungsanalyse<br />
Die Migration des Industrieprojekts wurde<br />
primär von dem Aspekt „Modularisier -<br />
Ausgangstechnologie Zieltechnologie Geschätzter Migrationsaufwand<br />
Frontend Swing, SwingX, SWT, JFace Programmierung 20 MT (Mittel)<br />
JGoodies<br />
der GUI<br />
Event-Verwaltung 5 MT (Niedrig)<br />
Backend JPA, Hibernate JPA, EclipseLink 20 MT (Mittel)<br />
Basissystem Springframework E4/RCP Plug-In-Entwicklung 40 MT (Hoch)<br />
und Integration<br />
Produktkonfiguration 5 MT (Niedrig)<br />
und -export<br />
Tabelle 1: Geschätzter Aufwand der eigentlichen Umsetzung.<br />
62 63
fachartikel<br />
Schätzen erfolgte gemäß der Breitband-<br />
Delphi-Methode, zu der die an der Um -<br />
setzung beteiligten Experten (drei Ent -<br />
wickler und ein Architekt) herangezogen<br />
werden.<br />
Die höher geschätzten Aufwände – 20<br />
und 40 Personentage (PT) – weichen in vertretbarer<br />
Weise von den tatsächlich<br />
erbrachten Aufwänden ab: Die Abwei -<br />
chungen liegen jeweils unter einer Woche<br />
(5 PT). Demzufolge war der Transfer des<br />
Basissystems am aufwändigsten, denn hier<br />
war eine Einarbeitung in die neue Tech -<br />
nologie „E4” und das Durchlaufen der<br />
damit verbundenen Lernkurve erforderlich.<br />
Die mit dem Umsetzen des Frontends und<br />
Backends verbundenen Aufwände waren<br />
geringer. Dazu hat insbesondere die (im<br />
Backend gelagerte) standardisierte JPA-<br />
Schnittstelle beigetragen.<br />
Quellcodetransfer auf die Zielplattform<br />
Der Quellcodetransfer – sprich: die Pro -<br />
grammierung an sich – erfolgte reibungslos<br />
und konnte gemäß der Schichtengliederung<br />
in Tabelle 1 parallel durchgeführt werden.<br />
Das heißt, Frontend, Backend und Basis -<br />
system ließen sich unabhängig voneinander<br />
migrieren. Das gilt insbesondere für die<br />
Anfangsphase, die vorwiegend mit Auf -<br />
wand für die Einarbeitung verbunden ist.<br />
Im Zuge der Umprogrammierung von<br />
Frontend und Backend stellte sich keine<br />
Notwendigkeit einer Abstimmung heraus,<br />
die sich keine Schnittstellen geändert<br />
haben, sondern lediglich die JPA-Imple -<br />
mentierung, die von Hibernate auf<br />
Eclipselink umgestellt wurde. Die kausale<br />
Abhängigkeit der Programmierarbeiten<br />
beschränkt sich auf den Gesamttest, in dessen<br />
Rahmen das Zusammenspiel von<br />
Frontend und Backend auf der neuen<br />
Zielplattform validiert wurde.<br />
Validierung der migrierten Applikation<br />
Die Validierung war Bestandteil der<br />
Umsetzung. Das heißt jeder Entwickler<br />
testete die migrierten Bestandteile gegen die<br />
entsprechenden alten, ursprünglichen<br />
Bestandteile. Das funktioniert auch sehr<br />
gut innerhalb einer Systemschicht. Ins -<br />
besondere existierten bereits unabhängige<br />
Unit-Tests für jede Systemschicht. So konnte<br />
etwa der für die Backend-Migration zu -<br />
ständige Entwickler die vorhandenen Unit-<br />
Tests der Hibernate-Datenzugriffsobjekte<br />
für die neuen mit Eclipselink umgesetzten<br />
Datenzugriffsobjekte wiederverwenden.<br />
Diese Leichtgängigkeit beschränkt sich<br />
jedoch leider auf die Validierung innerhalb<br />
einer Systemschicht. Um das Zusammen -<br />
spiel aller Komponenten und – neben den<br />
Funktionstests – vor allem auch die Benutz -<br />
barkeits- und Robustheitstests der gesamten<br />
neuen Applikation testen zu können,<br />
musste ein fertiges Produkt vorliegen. Das<br />
Logistik-Personal bediente bereits die alte<br />
Anwendung für die Temperaturkontrolle<br />
von kühlpflichtigen Arzneien. Nach interner<br />
Veröffentlichung einer migrierten<br />
Produktversion wurde ein Parallelbetrieb<br />
der alten und neuen (migrierten) Appli -<br />
Abb. 6: Migrierte Anwendung – Starten und Auslesen der Temperatur-Logger sowie Pulk-Lesen von Arzneimittelpackungen.<br />
1/2012
fachartikel<br />
kation in der Logistik eingeführt. Innerhalb der ersten zwei<br />
Wochen wurde ausreichend Feedback gesammelt, das sowohl Bug-<br />
Reports als auch Feature-Wünsche enthielt, die voneinander<br />
getrennt wurden.<br />
Die Benutzbarkeit der migrierten Produkt version wurde als<br />
höher angesehen, was wahrscheinlich auf den typischen (Windows-<br />
)Look zurückzuführen ist. Die graphische Swing-Oberfläche der<br />
alten Anwendung stieß auf weniger Gegenliebe. Gleichermaßen<br />
war die Performance der Benutzungsoberfläche höher, die Anwen -<br />
dung startete in spürbar kürzerer Zeit.<br />
Bedeutend für die Validierung waren außerdem die genannten<br />
Hauptgründe des Migrationsprojekts: die Validierung der<br />
Produktderivat-Erstellung und die Aus lagerbarkeit der<br />
Entwicklung funktionaler Bausteine durch externe Geschäftsein -<br />
heiten. Hierzu wurde für drei in einer Stakeholder-Rolle befindliche<br />
Partner jeweils eine individuelle Produktversion mit unterschiedlichen<br />
Funktionen exportiert. So erhielt ein Endkunde aus dem<br />
Lebensmittellogistik-Bereich eine Version, die über keine<br />
Konfigurationsschnittstellen für Branding oder über weitere<br />
Funktionen verfügte, die etwa für einen Weitervertrieb relevant<br />
sind. Ein Vertriebspartner erhielt dagegen eine solche Version mit<br />
Funktio nen, die den Weitervertrieb abbilden.<br />
Die Auslagerbarkeit ließ sich mit einem Auftrag nach Übersee<br />
prüfen, der die Implementierung eines PDF-Exports der gesamten<br />
Temperaturhistorie einschließlich Diagramm umfasste. Dieser verlief<br />
sehr gut und die erstellten Artefakte ließen sich dank der mit<br />
OSGi definierten Schnitt stellen auf triviale Weise rückintegrieren.<br />
Fazit<br />
Entstanden ist ein lauffähiges Produkt, das mittlerweile produktiv<br />
im Pharma- und Lebensmittelumfeld eingesetzt wird. Abbil dung 6<br />
zeigt das Ergebnis.<br />
Grundsätzlich sind IT-Entscheider nicht davor gefeit, ein System<br />
zu migrieren, auch wenn es neuen Standards entspricht, da<br />
Technologien nicht per se vor notwendigen Änderungen durch<br />
neue Anforderungen schützen. In dem hier beschriebenen Fall wurde<br />
die Applikation auf die OSGi-Technologie – genau genommen<br />
auf die Eclipse-Plattform – migriert, damit sich leicht<br />
Produktderivate erstellen und die Entwicklung von Modulen nach<br />
Übersee auslagern lassen. Dies erfüllt die neue migrierte<br />
Applikation. Im Rückblick lassen sich die mit dem<br />
Migrationsprojekt gesammelten Erfahrungen und Lektionen wie<br />
folgt zusammenfassen:<br />
■<br />
■<br />
■<br />
■<br />
Nicht geplante Anforderungen können die Migration eines<br />
bestehenden Systems erzwingen, obwohl es technologisch auf<br />
dem aktuellen Stand ist.<br />
Die Globalisierung der Softwareent wicklung hat einen entscheidenden<br />
Einfluss auf die Architekturanfor derungen, die<br />
eine Migration bedingen können.<br />
Die Trennung von Architektur schich ten und der Einsatz von<br />
bewährten Schnittstellen (z. B. JPA) reduzieren den Migrations -<br />
aufwand immens.<br />
Die Anfangsphase und die Einarbeitung in die Zieltechnologie<br />
machen einen bedeutenden Anteil des gesamten Mi -<br />
grationsaufwands aus.<br />
Die Rich-Client-Anwendung auf der Basis von Eclipse 4 verfügt<br />
über dieselben Funk tionen wie die ursprüngliche zu migrierende<br />
Anwendung. Abbildung 6 zeigt die neue Anwendung für das<br />
Starten und Auslesen der Temperatur-Logger und das Pulk-Lesen<br />
analog zu Abbildung 3.<br />
Sicherlich stellen Sie sich an dieser Stelle die Frage, inwiefern die<br />
Architektur nun konzeptionell tragfähiger ist oder ob in ein paar<br />
Jahren vielleicht eine Fortsetzung dieses Artikels erscheint, der die<br />
Migration der neuen Anwendung wieder mit denselben Pro blemen<br />
darlegt? Unbestritten ist die Plan barkeit des Einsatzes einer neuen<br />
Techno logie weniger trivial. Die rasante Entwick lung von Plattformen<br />
und Frame works macht es IT-Entscheidern nicht gerade einfach.<br />
Die Kernfrage lautet: Inwieweit ist die Zukunft der gewählten<br />
Zielplattform stabil, inwieweit ist also davon auszugehen, dass die<br />
Zielplattform eher immer populärer und weiterentwickelt bzw. verbessert<br />
wird, als dass sie irgendwann veraltet oder gar ausstirbt?<br />
Häufig hilft es zu prüfen, wer die Zielplattform entwickelt bzw. wie<br />
groß die hinter der Zielplattform-Entwicklung stehende<br />
Community ist, ob die Zielplatt form einen verbreiteten Standard<br />
(wie zum Beispiel OSGi) erfüllt oder proprietär ist, ob es einen entgegen<br />
gerichteten Trend bzw. Ansatz gibt und vielleicht sogar dazu<br />
eine entsprechende alternative Lösung, die bereits Einzug in die<br />
Entwick lergemeinde nimmt.<br />
■<br />
Literatur & Links<br />
[Car03] N.G. Carr, IT Doesn't Matter, Harvard Business Review, Mai 2003<br />
[Kro06] P. Kroha, L. Rosenhainer, Textuelle Anforderungen und Software-Migration, in: U. Kaiser, P. Kroha, A. Winter (Hrsg.), Proc. of 3. Workshop<br />
Reengineering Prozesse (RePro 2006) Software Migration, Mainzer Informatik-Berichte, Informatik-Bericht Nr. 2/2006<br />
[Lie08] D. Liebhart et al., Integration Architecture Blueprint: Leitfaden zur Konstruktion von Integrationslösungen., Carl Hanser Verlag 2008<br />
[Met95] R. Metcalfe, A network becomes more valuable as it reaches more users, InfoWorld, Oct. 1995<br />
[Moo65] G. Moore, Cramming more components onto integrated circuits, in: Electronics Magazine, Vol. 38, Number 8, April 1965<br />
[Schl09] C.B. Schiltz, EU warnt vor Boom bei gefälschten Medikamenten, Welt Online, 07.12.2009, siehe:<br />
http://www.welt.de/wirtschaft/article5449188/EU-warnt-vor-Boom-bei-gefaelschten-Medikamenten.html<br />
[Schw07] H.G. Schweim, Gefälschte Arzneimittel – aus der Dritten Welt in die Industrienationen, 2007, siehe: http://www.pharmtech.unibonn.de/dra/hintergrundinformationen<br />
[Sne10] M.H. Sneed, E. Wolf, H. Heilmann, Softwaremigration in der Praxis: Übertragung alter Softwaresysteme in eine <strong>moderne</strong> Umgebung,<br />
dpunkt.verlag 2010<br />
[Sul10a] E. Sultanow, Virgo: Serverseitige Webanwendungen aus Komponenten, in: iX – Magazin für professionelle Informationstechnik 11/2011<br />
[Sul10b] E. Sultanow, Zusammenarbeit in verteilten Projekten: Dekomposition, Barrieren und Lösungen im Kontext der Webent wick lung, Gito 2010<br />
[Zac07] R. Zacharias, Produktlinien: Der nächste Schritt in Richtung Software-Industrialisierung, in: Javamagazin 3/2007<br />
64 65
fachartikel<br />
der autor<br />
ABGRENZUNG ALS METHODE<br />
DER ANFORDERUNGSANALYSE:<br />
TEIL 2: ABGRENZUNGEN<br />
HERAUSARBEITEN<br />
Wer in Modellen, Beschreibungen und Anforderungen mit Abgrenzungen arbeitet, stößt oft auf<br />
Unverständnis, Ablehnung oder zumindest ein gewisses Unbehagen bei den Lesern und<br />
Begutachtern. Durch negative Aussagen scheint der Gegenstand der Betrachtungen viel weniger<br />
präzise beschrieben zu sein als durch positive Bestimmungen. Manchmal entsteht der<br />
Eindruck, dass der Autor dadurch nur eine Unvollständigkeit der Analyse und Beschreibung verdeckt.<br />
Dennoch sind treffende Abgrenzungen notwendig und sogar ein Indiz für gute Arbeit.<br />
Warum das so ist, auf welchen Gebieten nach ihnen gefahndet werden sollte und wie Abgren -<br />
zungen formuliert werden könnten, ist Thema dieses Artikels. Im ersten Teil, der in der letzten<br />
Ausgabe von OBJEKTspektrum erschienen ist, ging es um Abstimmungen zwischen<br />
Arbeitgeber und -nehmer.<br />
Bernd Körner<br />
(E-Mail: bernd.koerner@t-systems.com)<br />
ist Softwareentwickler und Requirements-Engineer,<br />
davon 13 Jahre in Projekten für Personaleinsatz -<br />
planung, Managementinformations- und Projekt -<br />
abrechungssysteme für die Deutsche Post AG.<br />
Analyse und Modellierung sieht er als eine Art<br />
angewandter Philosophie.<br />
Wie gewinnt man die Abgrenzungen, aus<br />
welchen Quellen entspringen sie, welche<br />
Prozesse fördern sie ans Licht und wie<br />
trennt man Relevantes von Irrelevantem?<br />
Vor der Analyse muss sich der Bearbeiter<br />
über die geforderte bzw. angestrebte<br />
Detailliertheit, also die Fertigungstiefe, im<br />
Klaren sein. Sie bestimmt, welche Probleme<br />
er in diesem Bearbeitungsschritt erkennen<br />
und lösen muss und welche er für einen<br />
Folgeschritt offen lassen kann. Maßstab<br />
dafür ist das angestrebte Abstraktions -<br />
niveau. Nur wenn die beschreibenden<br />
Elemente sich auf annähernd demselben<br />
Abstraktionsniveau befinden, lässt sich die<br />
Vollständigkeit der Analyse prüfen oder<br />
abschätzen. Es könnte beispielsweise festgelegt<br />
werden, dass die aktuelle Beschrei -<br />
bung nur die Elemente einer Benutzungs -<br />
schnittstelle aufzählen soll, nicht aber<br />
deren Anordnung, Bedingungen, graphische<br />
Gestaltung usw. Diese Anforderungen<br />
an das Beschreibungslevel tragen also selbst<br />
abgrenzende Elemente in sich.<br />
Zum anderen fordert die Analyse eine<br />
konsequente Systemsicht. Der Bearbeiter<br />
muss alle eingehenden Informationen<br />
dahingehend interpretieren, was sie für das<br />
System bedeuten und an welchen Stellen sie<br />
das System überschreiten. In den Ein -<br />
gangsdokumenten konstatierte Tatsachen<br />
muss er in systembezogene Anforderungen<br />
übersetzen. Das ist ein wichtiger Schritt, da<br />
er Implikationen von Tatsachen auf das<br />
System und damit deren Relevanz für das<br />
System aufdeckt. Wenn z. B. die Aussage<br />
„Kein Mensch ist älter als 200 Jahre” sich<br />
als systemrelevant herausstellt, sieht das<br />
System die Abgrenzung „Ich brauche keine<br />
Menschen mit einem Lebensalter >200<br />
Jahre berücksichtigen”, was immer das für<br />
Konsequenzen hat.<br />
Die Aufgabe enthält als Eingangsgrößen<br />
neben der expliziten Formulierung der<br />
Anforderungen, meistens auch noch<br />
Verweise auf Dokumente und Aspekte, die<br />
als Randbedingungen zu berücksichtigen<br />
sind. Diese Dokumente sind in der Regel<br />
für einen größeren Rahmen gedacht.<br />
Deswe gen muss der Bearbeiter zunächst die<br />
relevanten Bestandteile herausarbeiten.<br />
Einige sind unstrittig relevant oder irrelevant,<br />
für andere ist es unklar, ob sie einbezogen<br />
werden sollen. Stellt sich auf<br />
Nachfrage die Irrelevanz heraus, ergibt das<br />
Abgren zungen.<br />
Ein Teil davon betrifft die Einbettung der<br />
Aufgabe in eine übergeordnete Aufgabe<br />
oder einen größeren Rahmen. Dieser übergeordnete<br />
Rahmen enthält bereits Struk tur -<br />
elemente, Funktionen, Status und Aspekte.<br />
Der Bearbeiter prüft, welche auf seine<br />
Aufgabe Einfluss haben könnten, und formuliert<br />
als unklar bestimmte und vom<br />
Auftraggeber ausgeschlossene Elemente als<br />
Abgrenzung.<br />
Dann geht es an die Analyse der Aufgabe<br />
selbst, indem unter anderem Vor- und<br />
Nachbedingungen, Teilschritte und Fehler -<br />
fälle herausgearbeitet werden. Durch Ein -<br />
gangsgrößen und Ergebnisobjekte ist ein<br />
Teil der nötigen Strukturen bereits vorgegeben,<br />
Zwischenergebnisse und Prozess -<br />
status ergänzen diese. Aus Strukturen<br />
erwachsen Möglichkeiten, Status und<br />
Konstellationen, die eine bestimmte<br />
Situation in der Aufgabe vorfinden kann.<br />
So kommt bisher Implizites zutage: Teile,<br />
Wege, Bedingungen, Substrukturen, Pro -<br />
bleme und Abhängigkeiten. Eine vorher<br />
ungesehene Welt tut sich auf, erweitert sich<br />
wie ein Luftballon, der aufgeblasen wird –<br />
und es entsteht ein expandierendes Uni -<br />
versum. Wer versucht, in ein fremdes<br />
Fachgebiet einzusteigen, z. B. die Bäckerei,<br />
wird überrascht sein, wie viele Einfluss -<br />
größen, Möglichkeiten und Wechsel -<br />
beziehungen das Gelingen des Backens ausmachen<br />
und so eine leise Ahnung davon<br />
bekommen.<br />
Diese zunächst unüberschaubare Menge<br />
von Möglichkeiten gilt es, handhabbar zu<br />
machen, so weit zu reduzieren, dass überschaubare<br />
Abläufe entstehen, sie einerseits<br />
zu kategorisieren und zusammenzufassen<br />
und andererseits eine möglichst große<br />
Menge auszuschließen – sei es, weil sie irrelevant<br />
sind, sei es, weil sie mit nur sehr geringer<br />
Wahrscheinlichkeit eintreffen können.<br />
Diese Ausschlüsse von Möglichkeiten formuliert<br />
der Bearbeiter als Abgren zun gen.<br />
Ein Ergebnis-Artefakt ist nicht beliebig<br />
aufgebaut, sondern nach den Erfor -<br />
dernissen der Aufgabe strukturiert. So<br />
kann das Ergebnis auch nicht auf beliebigen<br />
Wegen erreicht werden, sondern aus<br />
der Fülle der Möglichkeiten gibt es entweder<br />
einige festgelegte oder einige nicht<br />
erlaubte. Daraus erwachsen Notwendig -<br />
keiten, die als Ab grenzungen definiert werden<br />
können.<br />
66 67
fachartikel<br />
Wenn für eine Analyseaufgabe als solcher<br />
deren Umfang bekannt ist – aus der<br />
Erfahrung oder idealerweise durch Punkte<br />
einer Checkliste –, lassen sich damit leicht<br />
relevante von irrelevanten Punkten trennen<br />
sowie eine gewisse Vollständigkeit der<br />
Analyse erreichen und dokumentieren.<br />
Das System muss es dem Benutzer ermöglichen, xxx.<br />
Das System soll fähig sein, dass xxx.<br />
Das System wird fähig sein, dass xxx.<br />
Tabelle 1: Anforderungsmuster.<br />
Rechtlich zugesicherte Eigenschaft.<br />
Empfohlene Eigenschaft.<br />
Zukünftig zugesicherte Eigenschaft.<br />
Formulierung von<br />
Abgrenzungen<br />
Anforderungen an ein System werden<br />
gewöhnlich nach dem in Tabelle 1 zu -<br />
sammengefassten prinzipiellen Muster formuliert.<br />
„Muss” und „Soll” zeigen dabei<br />
die rechtliche Verbindlichkeit an und beanspruchen<br />
damit Raum für den Auf -<br />
traggeber. Die Formulierung in Tabelle 2 ist<br />
zwar negativ, aber im Kern eine positive<br />
Aussage und eine echte Anforderung. Sie<br />
begegnet einer Befürchtung des Auftrag -<br />
gebers und zwingt den Aufragnehmer zu<br />
einer bestimmten Aktion.<br />
Abgrenzungen sind aus Systemsicht und<br />
negativ formuliert. Sie beschreiben, was<br />
das System nicht können oder tun soll. Der<br />
Auftraggeber soll sie so verstehen: Das<br />
kannst du nicht erwarten, über diesen<br />
Aspekt habe ich nicht nachgedacht, weil er<br />
mir als irrelevant erschien (Tabelle 3). Dem<br />
Auftragnehmer dagegen lassen Abgrenzun -<br />
gen Spielräume (Tabelle 4).<br />
Da ein beschreibendes Dokument oder<br />
Anfor derungsdokument für Auftraggeber<br />
und -nehmer gleichermaßen gültig sein und<br />
es nicht für jeden eine eigene Variante<br />
geben soll, müssen die Formulierungen beiden<br />
genügen. Dementsprechend schlage ich<br />
die Formulierungen in Tabelle 5 vor.<br />
Abgren zungen werden darüber hinaus zur<br />
Dar stellung von „Verschwindendem”<br />
genutzt (Tabelle 6). Zu einer Abgrenzung<br />
gehört idealerweise eine Begründung,<br />
warum sie gerechtfertigt ist. So können<br />
spätere Irritationen vermieden werden:<br />
„Warum bloß haben wir das damals ausgeschlossen?”.<br />
■<br />
Das System braucht nicht xxx (zu<br />
berücksichtigen), weil yyy.<br />
Der Auftragnehmer versucht durch Ab -<br />
gren zungen möglichst viel Land auszugrenzen.<br />
Die Verwendung von All-Quantoren<br />
(wie „alle”, „keine”) sind in den positiv<br />
formulierten Anforderungen ein Risiko.<br />
Hier aber kommen sie ihm entgegen:<br />
■ Das System braucht kein xxx zu be -<br />
rück sichtigen, weil yyy.<br />
Das System darf nicht zulassen, dass xxx.<br />
Tabelle 2: Negative Formulierung, aber echte Anforderung.<br />
Das System wird nicht xxx.<br />
Es ist nicht betrachtet, ob xxx.<br />
Tabelle 3: Abgrenzung aus Auftraggeber-Sicht.<br />
Das System muss nicht xxx.<br />
Es ist nicht festgelegt, ob xxx.<br />
Tabelle 4: Abgrenzung aus Auftragnehmer-Sicht.<br />
Das System braucht nicht xxx (zu berücksichtigen).<br />
Es ist nicht betrachtet/festgelegt, ob …<br />
xxx ist ausschließlich für yyy (vorgesehen, gültig, …).<br />
Der Aufraggeber toleriert, dass das System nicht xxx.<br />
Tabelle 5: Formulierungsvorschläge.<br />
Das System braucht nicht mehr xxx<br />
(zu berücksichtigen, zu realisieren, anzubieten).<br />
Tabelle 6: Darstellung von Verschwindendem.<br />
■ Keine anderen Aspekte sind in diesem<br />
Zusammenhang relevant.<br />
■ Alle anderen Möglichkeiten sind in diesem<br />
Zusammenhang ausgeschlossen.<br />
Die Eigenschaft, die Möglichkeit oder das<br />
Verhalten muss ausgeschlossen werden.<br />
Das wird das System definitiv nicht leisten.<br />
Wenn der Aspekt dennoch Einfluss auf das<br />
Ergebnis der Aufgabe hat, könnte es zu negativen<br />
Auswirkungen kommen.<br />
Die Eigenschaft oder das Verhalten ist nicht<br />
gefordert, aber möglich.<br />
Eine Lösung zu diesem Problem muss gefunden<br />
werden, aber die Auswahl der Lösung steht frei.<br />
Auf die Eigenschaft wird jetzt oder immer verzichtet.<br />
Die Art der Lösung ist für den Sinn der<br />
Aufgabe irrelevant.<br />
Abgrenzung von Geltungsbereichen.<br />
Die Lösung entspricht nicht den ursprünglichen<br />
Intentionen des Auftraggebers, wird aber akzeptiert.<br />
Eine Funktionalität wird (gegebenenfalls ab einem<br />
Zeitpunkt) nicht mehr benötigt.<br />
Der Auftraggeber hingegen möchte verlorenes<br />
Land zurückgewinnen und deswegen<br />
die All-Quantoren eliminieren:<br />
1/2012
fachartikel<br />
■<br />
■<br />
■<br />
Das System braucht nicht x1, x2, x3<br />
berücksichtigen, weil yyy.<br />
Keine anderen Aspekte sind für xxx<br />
relevant.<br />
Alle anderen Möglichkeiten sind für<br />
xxx ausgeschlossen.<br />
Distanz zur Aufgabe<br />
Weit entfernt.<br />
Behandlung des Aspekts<br />
• Wird nicht beachtet, nicht analysiert und nicht erwähnt, weil<br />
nicht der geringste Bezug zur Aufgabe ersichtlich ist.<br />
• Betrifft die unendliche Vielfalt der „restlichen” Welt außerhalb<br />
der Aufgabe.<br />
Die letzten beiden Abgrenzungen bergen<br />
für den Auftraggeber ein hohes Risiko, da<br />
der Geltungsbereich („In diesem Zusam -<br />
menhang”) schwer abgrenzbar und wiederum<br />
von einer Grauzone umgeben ist. Will<br />
er diese wegdiskutieren, kann der Auf -<br />
tragnehmer antworten: „Bitte in positiven<br />
Aussagen formulieren.” Die beste Gegen -<br />
strategie ist es hier wohl, den Geltungs -<br />
bereich stringent einzugrenzen. Das kann<br />
leicht ins Unendliche führen, wenn man<br />
dafür eine ähnliche Aussage verwendet, wie<br />
z. B.: „Das betrifft xxx und sonst nichts.”<br />
Gebiete der Abgrenzung<br />
Zu welchen Sachverhalten ist es sinnvoll,<br />
Abgrenzungen zu formulieren? Wo sind die<br />
Eier versteckt, wo und wie soll man am<br />
besten nach ihnen suchen? Welche Pro -<br />
bleme sind damit verbunden? Je nach<br />
(gedanklicher) Entfernung eines Aspekts<br />
zur Aufgabe finden sich verschiedene Arten<br />
von Abgrenzungen. In allen Distanz -<br />
bereichen sollte man suchen. Die verschiedenen<br />
möglichen Adressaten sollten<br />
berück sichtigt werden, für jeden kann es<br />
spezielle Abgrenzungen geben.<br />
Abgrenzungen kann es sowohl für eine<br />
Sache selbst (ein System, Anforderungen an<br />
ein System) als auch für die Beschreibung<br />
der Sache als Metaebene geben. Je nach<br />
Bezugsobjekt wollen verschiedene Abgren -<br />
zungen entdeckt werden.<br />
Die Sache selbst wird in der Analyse zerlegt<br />
und in Teile gegliedert. Jedes verdient<br />
eigene Aufmerksamkeit hinsichtlich möglicher<br />
Abgrenzungen. Einige Typen dieser<br />
Teile, hier Gegenstände der Abgrenzung<br />
genannt, entfalten in dieser Hinsicht besondere<br />
Eigenheiten.<br />
Distanzbereiche zur Aufgabe<br />
Zunächst lassen sich Suchbereiche in<br />
verschiedenen Entfernungen zur Aufgabe<br />
denken. Gedanklich weit entfernte Such -<br />
bereiche in die Be trachtungen aufzuneh -<br />
men, wäre wegen ihrer Unendlichkeit ein<br />
sinnloses Unter fangen.<br />
Näher liegende Tatsachen sind in Ob jek -<br />
ten, Prozessen und Bemerkungen der übergeordneten<br />
Ebene zu finden. Sie verdienen,<br />
Mittlere Entfernung.<br />
Nah angrenzend.<br />
Schneidet die Aufgabe.<br />
Innerhalb.<br />
in groben Zügen, als nicht betrachtet ausgeschlossen<br />
zu werden. Es bleibt die<br />
Möglichkeit, dass doch noch relevante<br />
Aspekte gefunden werden, wenn das<br />
Problem nur analysiert würde. Die<br />
Abgrenzung gibt dem Auftraggeber die<br />
Möglichkeit, solche Fehler zu erkennen.<br />
Nah angrenzende Bereiche haben direkte<br />
Schnittstellen zur Aufgabe. Sie sind nicht<br />
Teil der Aufgabe, betreffen sie aber durch<br />
ihre Existenz. Deswegen lohnt es, sie grob<br />
zu analysieren. Wenn sich keinerlei relevante<br />
Teilaspekte ergeben, kann der<br />
Komplex ausgegrenzt werden. Finden sich<br />
aber einige relevante Teilaspekte, dann gilt<br />
es, die übrigen explizit auszuschließen.<br />
Ist die aktuelle nicht die unterste Ebene,<br />
gibt es innerhalb der Aufgabe Löcher in der<br />
• Wird beachtet, aber nicht analysiert. Bezugspunkte in<br />
übergeordneten Ebenen sind zu finden, aber sie berühren mit<br />
großer Sicherheit nicht die Aufgabe.<br />
• Abgrenzung: Aspekt ist nicht betrachtet.<br />
• Wird analysiert. Es ergeben sich ausschließlich irrelevante<br />
Teilaspekte.<br />
• Abgrenzung: Es werden keine Anforderungen gestellt bezüglich …<br />
• Wird analysiert. Es ergeben sich relevante und irrelevante<br />
Teilaspekte.<br />
• Letztere sind möglicherweise von anderen zu leisten und<br />
werden abgegrenzt: Das System braucht nicht …<br />
• Die Beschreibungsebene ist nicht die tiefste, es bleiben<br />
Analyseaufgaben und Freiräume für folgende Bearbeiter.<br />
• Abgrenzung: Detaillierung ist nicht betrachtet.<br />
Tabelle 7: Suchbereiche für Abgrenzungen in verschiedenen Entfernungen zur<br />
Aufgabe.<br />
Abb. 1: Distanz der Abgrenzungen zur Aufgabe.<br />
Beschreibung. Die Aussagen bilden sozusagen<br />
ein noch lockeres Gespinst. Aufgabe<br />
der nachfolgenden Bearbeitungsschritte ist<br />
es, die Löcher mit noch feineren Fäden<br />
zuzuspinnen, so dass eine homogene Be -<br />
schreibungsfläche entsteht. Diese geschlossene<br />
Aufgabe kann pauschal durch die<br />
Abgrenzung der Bearbeitungstiefe, aber<br />
auch explizit durch Abgrenzungen an die<br />
Nachfolger übergeben werden (Tabelle 7).<br />
Adressaten von Abgrenzungen<br />
Abgrenzungen können verschiedene Adres -<br />
saten haben (Tabelle 8). Für Abgrenzungen<br />
gegenüber den Auftraggebern reicht es, diese<br />
zu konstatieren. Ob die Sache irrelevant<br />
ist oder von einem anderen übernommen<br />
68 69
fachartikel<br />
Adressat<br />
Der Auftraggeber.<br />
Ein oder mehrere Mitarbeiter.<br />
Nachfolgende Bearbeiter bzw.<br />
Auftragnehmer.<br />
Tabelle 8: Adressaten von Abgrenzungen.<br />
werden muss, liegt nicht in der Verant -<br />
wortung des Abgrenzenden und muss nicht<br />
unbedingt von ihm verstanden sein.<br />
Anders sieht es aus, wenn es sich um eine<br />
Teilaufgabe unter gleichberechtigten<br />
Kollegen in einem größeren Rahmen handelt.<br />
Dann gibt es den Anspruch, ein homogenes<br />
Ganzes abzuliefern. Sowohl die<br />
Abgrenzungen („Das musst du beschreiben!”)<br />
als auch die Ansprüche („Das ist<br />
meine Sache!”) richten sich dann gegen die<br />
Mitarbeiter. Das können durchaus auch<br />
mehrere sein, was eine Unterscheidung der<br />
Abgrenzungen nötig macht. Die angrenzenden<br />
Teile müssen verstanden sein, die<br />
Abstimmungen bewegen sich nicht auf<br />
einem prinzipiellen, sondern einem technischen<br />
Niveau: In welchem Bereich ist der<br />
Aspekt besser untergebracht, in welchem<br />
Zusammenhang ist ein Problem effektiver<br />
zu lösen? Als Eskalationsinstanz fungieren<br />
der Architekt oder die Projektleitung.<br />
Bezugsobjekte von Abgrenzungen<br />
Abgrenzungen sind Inhalt von Dokumen ten<br />
oder Beschreibungen. Diese Doku mente<br />
betreffen aber eine Aufgabe, einen Sach -<br />
verhalt oder ein System. Wie es Anfor -<br />
derungen zur Sache selbst, zum System, aber<br />
auch zur Beschreibung als Metaebene geben<br />
kann, so auch Abgren zungen. Beide müssen<br />
Bezugsobjekt<br />
Dokument, Beschreibung.<br />
System.<br />
Tabelle 9: Bezugsobjekte von Abgrenzungen.<br />
Inhalt der Abgrenzungen<br />
Aspekte, die nicht im Rahmen der Aufgabe liegen.<br />
Aspekte, die von anderen im Rahmen einer umfassenderen Aufgabe<br />
übernommen werden sollen.<br />
Aspekte, die unterhalb des Beschreibungslevels liegen, die noch nicht<br />
ausformuliert sind, die Freiräume für den Bearbeiter lassen.<br />
gedanklich getrennt werden, denn es macht<br />
einen Unterschied, ob über eine Sache überhaupt<br />
nicht nachgedacht oder im Ergebnis<br />
des Nachdenkens eine Abgrenzung getroffen<br />
wurde (Tabelle 9).<br />
Dokumente sind meist in eine Doku -<br />
menten- oder Gedankenlandschaft eingebettet.<br />
Die Berücksichtigung mancher als<br />
Quellen für die eigene Arbeit schließt andere<br />
aus. Die Abgrenzungen beziehen sich<br />
damit auf bekannte Tatsachen über die<br />
Sache – also Sätze, Behauptungen und<br />
Gegeben heiten im Hinblick auf die<br />
Aufgabe. Diese Abgrenzungen haben die<br />
folgende Struktur:<br />
■<br />
Es ist nicht berücksichtigt, dass xxx.<br />
Anders für die Sache selbst: Hier stehen<br />
Teilbereiche, Elemente der Sache, im<br />
Fokus. Für sie gilt es zu entscheiden, ob sie<br />
einbezogen oder ausgegrenzt werden sollen.<br />
Das können Strukturelemente, Status<br />
und Funktionen mit deren Vorausset -<br />
zungen und Bedingungen sein. Hier findet<br />
sich die folgende Struktur:<br />
■<br />
Das System braucht nicht xxx …<br />
Im Verlauf der Abstimmung kann sich herausstellen,<br />
dass bestimmte abgegrenzte<br />
Inhalt der Abgrenzungen<br />
• Nicht betrachtete Aspekte (Modellabgrenzung).<br />
• Nicht betrachtete andere Dokumente im Umfeld.<br />
• Bekannte, aber nicht berücksichtigte Tatsachen.<br />
• Referenzen auf andere Dokumente.<br />
• Beschreibungsebene, Abstraktionsgrad.<br />
• Nicht zur Aufgabe gehörende Aspekte (Scope).<br />
• Referenzen auf Anforderungen oder Funktionalitäten in<br />
anderen Systemen<br />
• Offen gelassene Entscheidungen<br />
1. Generelle Abgrenzungen<br />
a. Nicht betrachtete Aspekte<br />
i. Nicht betrachtete Folgen<br />
ii. Nicht berücksichtigte Aspekte<br />
iii. Nicht berücksichtigte<br />
Tatsachen<br />
iv. Nicht berücksichtigte<br />
Ereignisse<br />
v. Nicht berücksichtigte<br />
Einflussgrößen<br />
b. Abgrenzung der Abstraktionstiefe<br />
2. Die Sache betreffend<br />
a. Generelle Abgrenzungen<br />
b. Rahmenbedingungen<br />
i. Nicht berücksichtigte Arten<br />
nicht-funktionaler<br />
Anforderungen<br />
c. Struktur<br />
i. Verantwortlichkeiten<br />
ii. Nicht benötigte Klassen und<br />
Elemente<br />
iii. Wertebereiche<br />
iv. Ausschluss von Veränderungen<br />
v. Ausschluss von Wegen für<br />
Veränderungen<br />
d. Status<br />
i. Ausschluss von<br />
Wertekonstellationen<br />
e. Prozess<br />
i. Nicht nötige Teilschritte<br />
ii. Nicht zu berücksichtigende<br />
Parameter<br />
iii. Nicht zu berücksichtigende<br />
Tatsachen<br />
iv. Nicht zu berücksichtigende<br />
Ereignisse<br />
v. Ausschluss von Aktionen in<br />
Abhängigkeit vom Zustand<br />
vi. Ausschluss von<br />
Einschränkungen für Aktionen<br />
Kasten 1: Die Struktur der Gegenstände<br />
von Abgrenzungen darstellen (die<br />
Beschreibung betreffend).<br />
Tatsachen doch relevant sind. Deren Ana -<br />
lyse gebiert nun wieder neue Anfor -<br />
derungen und Abgrenzungen der zweiten,<br />
bestimmte Elemente betreffenden Art.<br />
Gegenstände der Abgrenzung<br />
Die Bezugsobjekte haben eine typische<br />
Struktur und die Struktur hat typische<br />
Elemente mit jeweiligen Eigenheiten. Die<br />
Elemente lassen sich in einer Struktur der<br />
Gegenstände von Abgrenzungen darstellen<br />
(Kasten 1). Einige dieser Gegenstände verdienen<br />
eine nähere Erläuterung:<br />
1/2012
fachartikel<br />
Bedingung Folgerung Beispiel<br />
Wenn Dann • Wenn die Ampel „rot” zeigt, dann muss man warten.<br />
• Wenn die Temperatur 21°C beträgt, dann soll das<br />
Wasserglas voll sein.<br />
Wenn nicht Dann • Wenn die Ampel nicht „grün” zeigt, dann muss man warten.<br />
• Wenn die Temperatur nicht 21°C beträgt, dann soll das<br />
Wasserglas halb voll sein.<br />
Wenn Dann nicht • Wenn die Ampel „rot” zeigt, dann darf man nicht gehen.<br />
• Wenn die Temperatur 21°C beträgt, dann darf das<br />
Wasserglas nicht halb voll sein.<br />
Wenn nicht Dann nicht • Wenn die Ampel nicht „grün” zeigt, dann darf man nicht gehen.<br />
• Wenn die Temperatur nicht 21°C beträgt, dann darf das<br />
Wasserglas nicht voll sein.<br />
Tabelle 10: Negative Wenn-Dann-Ausdrücke.<br />
Die Abgrenzung gegen mögliche Folgen<br />
einer Verfahrensweise oder Systembenut -<br />
zung erfordert in einem nachfolgenden<br />
Schritt eine Risikobewertung. Diese erst<br />
rechtfertigt die Abgrenzung oder aber<br />
erklärt die Folgen für untragbar und ersetzt<br />
sie durch Forderungen.<br />
Nicht berücksichtigte Aspekte betreffen<br />
meist die Rahmenbedingungen einer<br />
Aufgabe. Für ein System sind dies hauptsächlich<br />
die nicht-funktionalen Anfor -<br />
derun gen. Abgrenzungen dazu sind häufig<br />
im Passiv formuliert: „xxx muss nicht<br />
berücksichtigt werden” oder „Es werden<br />
keine Anforderungen bezüglich xxx erhoben.”<br />
Trotz dieser expliziten Abgrenzung<br />
existiert im Hintergrund eine weitere<br />
Frontlinie, die Gesetze, allgemeine Rege -<br />
lungen, Betriebsvereinbarungen, Produkt -<br />
bestim mungen, Style-Guides usw. bilden<br />
und die konkrete Anforderungen implizieren.<br />
Die Aufgabe und deren Abgrenzungen<br />
definieren zunächst ein statisches Bild. So<br />
wie es aber Anforderungen geben kann, die<br />
die flexible Veränderung von Verhaltens -<br />
weisen, Parametern und Aussehen – ja fast<br />
allen Elementen und Aspekten eines<br />
Systems – einfordern, so muss es im<br />
Gegenzug auch entsprechende Abgren zun -<br />
gen geben. Der Ausschluss von bestimmten<br />
Veränderungen (z. B. Inhalten von Aus -<br />
wahl listen) soll dies leisten. Wie wichtig das<br />
ist, wird klar, wenn man bedenkt, dass das<br />
Hinzufügen, Ändern oder Löschen, z. B.<br />
eines Listeneintrags, im allgemeinen Fall<br />
auch Änderungen in der Funktionalität<br />
nach sich zieht.<br />
Wertebereiche lassen sich sowohl als<br />
explizite Anforderungen als auch als<br />
Abgrenzungen sehen. Sie trennen einen<br />
geforderten von einem nicht geforderten<br />
Bereich. Es ist günstig, sie positiv als<br />
Anforderung zu formulieren. Sie werden<br />
dann nicht in den Abgrenzungen auftauchen.<br />
Die Struktur von bedingten Aktionen<br />
zeigt vier Ausprägungen (Tabelle 10). Das<br />
Besondere am „nicht” ist, dass es eine<br />
unbekannte (Rest)Menge bezeichnet. Die<br />
Bedingung „Wenn nicht …” geht von einer<br />
bestimmten positiven Erwartung aus, die<br />
sich auf viele mögliche Arten getäuscht<br />
sieht. Die Folgerung „Dann nicht …” verbietet<br />
ein bestimmtes Verhalten oder einen<br />
bestimmten Zustand aus vielen anderen<br />
möglichen.<br />
Im Ampelbeispiel (Tabelle 10) lassen sich<br />
die negativen Aussagen leicht auflösen,<br />
indem alle Zustände (rot, gelb, grün, warten,<br />
aufmerksam sein, gehen) in der Wenn-<br />
Dann-Struktur dargestellt werden. Für<br />
kontinuierliche Werte oder offene bzw. sehr<br />
große Mengen ist dies aber nicht möglich,<br />
wie das zweite, etwas konstruierte Beispiel<br />
(Zeile 2 in Tabelle 10) zeigt. Die drei<br />
„Nicht”-Varianten lassen sich nicht in die<br />
Wenn-Dann-Struktur übersetzen.<br />
Wenn bestimmte Bedingungen oder<br />
Zustände Aktionen ausschließen, gerät der<br />
Benutzer des Systems in seinem Bear -<br />
beitungsweg in eine Sackgasse. Diese<br />
bedarf einer Erklärung und eines Auswegs.<br />
Deswegen muss das System auf ausgeschlossene<br />
Möglichkeiten mit einer<br />
Fehlerbehandlung und Information reagieren.<br />
Prozesswege können ins Abseits und in<br />
fehlerhafte Zustände führen. Normaler -<br />
weise begegnet der Planer dem mit<br />
Geländern und Leitplanken, die den<br />
Benutzer des Systems auf dem rechten Weg<br />
halten. Aber manchmal sind diese unerwünschten<br />
Möglichkeiten so vielfältig,<br />
kompliziert und verzweigt, dass es sehr aufwändig<br />
wäre, sie alle explizit zu behandeln.<br />
Wenn der Auftraggeber diesen Aufwand<br />
nicht tragen möchte, akzeptiert er Ab gren -<br />
zungen, die die Verantwortung, nicht in<br />
solche Situationen zu geraten, in die Hand<br />
des Benutzers oder der Organisation legen.<br />
Beispiel<br />
Ein fiktives Beispiel soll das Vorange -<br />
gangene illustrieren und zeigen, wie<br />
Abgrenzungen konkret aussehen könnten.<br />
Die Zustellung von Postsendungen soll<br />
statt zu Fuß mit dem Auto erfolgen.<br />
Der Abteilungsleiter betreut einen Mitar -<br />
beiter, der sich in der Zustellung auskennt,<br />
mit der Aufgabe, ein passendes Auto zu<br />
bestellen. Er erklärt ihm die Ziele der<br />
Maßnahme, übergibt eine knappe Prozess -<br />
beschreibung und weist auf einzuhaltende<br />
Gesetze und betriebliche Regelungen hin.<br />
Der Mitarbeiter findet sich nun in der<br />
Rolle des Aufragnehmers und muss die<br />
Aufgabe analysieren und herausfinden, was<br />
ein „passendes Auto” ist. Er greift dazu auf<br />
sein Fachwissen zurück, erstellt eine Liste<br />
von möglichen Situationen, in denen das<br />
Auto eingesetzt werden soll, und erkundet,<br />
was das Auto (das System) in diesen<br />
Situationen können muss. Manche Ent -<br />
scheidungen kann er aus seiner Sicht nicht<br />
treffen und fragt seinen Auftraggeber und<br />
andere Beteiligte und Betroffene:<br />
■<br />
■<br />
Muss ich diesen oder jenen Aspekt<br />
beachten?<br />
Muss das Auto dies oder das können?<br />
Er erhält positive und negative Antworten.<br />
Aus den negativen formuliert er die<br />
Abgrenzungen und spiegelt damit seinem<br />
Auftraggeber wider:<br />
■<br />
■<br />
■<br />
Welche Aspekte des Autos und seines<br />
Zusammenwirkens mit der Aufgabe<br />
und der Umwelt er nicht untersucht<br />
hat.<br />
Was das Auto nicht leisten wird.<br />
Welche Aspekte er nicht festgelegt hat<br />
und dem Autohersteller als Freiheit<br />
überlässt.<br />
Nehmen wir an, der Auftraggeber akzeptiert<br />
alle Abgrenzungen bis auf das<br />
70 71
fachartikel<br />
Dokument<br />
Generelle Abgrenzung.<br />
Nicht betrachtete Aspekte.<br />
Nicht berücksichtigte Tatsachen.<br />
Nicht berücksichtigte Ereignisse.<br />
Nicht berücksichtigte Einflussgrößen.<br />
Nicht betrachtete Folgen.<br />
Abgrenzung der Abstraktionstiefe.<br />
Anforderungen<br />
Generelle Abgrenzungen.<br />
Nicht berücksichtigte Aspekte.<br />
Nicht benötigte Elemente.<br />
Wertebereiche.<br />
Ausschluss von Veränderungen.<br />
Ausschluss von Wegen<br />
für Veränderungen.<br />
Ausschluss von Wertkonstellationen.<br />
Nicht nötige Prozessschritte.<br />
Nicht zu berücksichtigende<br />
Parameter, Tatsachen, Ereignisse.<br />
Ausschluss möglicher Aktionen.<br />
Keine Verhinderung verbotener<br />
Aktionen.<br />
Ausschluss möglicher Ereignisse.<br />
Nicht zu berücksichtigende Auslöser<br />
von Ereignissen.<br />
Auswahl aus Alternativen.<br />
Ausschluss von Einschränkungen.<br />
Beispiele<br />
Keine anderen Aspekte als die hier beschriebenen sind für die Aufgabe<br />
relevant.<br />
• Der Einsatz der Autos ist ausschließlich im Inland geplant.<br />
• Die Abnahme durch den TÜV ist hier nicht beschrieben.<br />
• Die Anforderungen an die Abnahme legt der TÜV fest.<br />
• Die Tatsache, dass die Verkehrsdichte in den nächsten 5 Jahren um<br />
25% wachsen soll, ist nicht berücksichtigt.<br />
• Die für nächstes Jahr geplante Veränderung von<br />
Zulassungsbedingungen ist noch nicht berücksichtigt.<br />
Mögliche Naturkatastrophen sind nicht berücksichtigt.<br />
Mögliche Witterungseinflüsse sind nicht berücksichtigt.<br />
Die Auswirkungen auf die Arbeitnehmerzufriedenheit sind nicht in die<br />
Untersuchung einbezogen.<br />
Ob die Autos mit Navigationssystemen ausgestattet werden sollen,<br />
bleibt einer späteren Untersuchung vorbehalten.<br />
Beispiele<br />
Das Auto braucht keine weiteren Anforderungen zu erfüllen.<br />
• Es werden keine expliziten Anforderungen zur Performance erhoben.<br />
• Es ist keine Mindestlaufleistung gefordert.<br />
• Anforderungen zur Verfügbarkeit sind in xxx beschrieben.<br />
• Das Auto braucht kein Navigationssystem zu haben.<br />
• Die Anforderungen an das Navigationssystem sind in [xxx] beschrieben.<br />
• Das Auto muss in einem Temperaturbereich von -20°C bis +40°C<br />
sicher arbeiten und alle anderen Anforderungen erfüllen.<br />
• Das Auto wird nicht unter -20°C und nicht über +40°C eingesetzt.<br />
Die Sitzhöhe braucht nicht verstellbar zu sein.<br />
Die geplante Fahrtoute braucht dem Auto nicht über Funk übermittelt,<br />
sondern kann manuell am Navigationsgerät eingegeben werden.<br />
• Die Möglichkeit, dass bei voller Beladung über 60 km/h gefahren<br />
wird, braucht nicht berücksichtigt werden, denn dies ist durch<br />
betriebliche Regelungen untersagt.<br />
• Das Auto muss nicht geländetauglich sein.<br />
Das Auto darf alle Türen in einem Schritt öffnen; es braucht nicht zuerst<br />
die Fahrertür und in einem zweiten Schritt die anderen Türen zu öffnen.<br />
• Das Auto muss nicht regendicht sein.<br />
• Die Scheinwerferneigung braucht sich nicht automatisch an die<br />
Beladungssituation anzupassen.<br />
• Die Anforderungen an den Winterbetrieb Kälte sind in [xxx] beschrieben.<br />
• Das Auto braucht keinen Rückwärtsgang.<br />
• Das Auto braucht und darf dem Fahrer das Linksabbiegen nicht<br />
ermöglichen.<br />
Das Auto braucht keine Wegfahrsperre, denn es wird nachts auf<br />
gesicherten Höfen abgestellt.<br />
Ein Wechsel des Fahrers an einem Tag ist<br />
organisatorisch ausgeschlossen.<br />
Das Auto braucht den Fahrer nicht über den nächst fälligen<br />
Wartungstermin zu informieren, da dies über einen zentralen<br />
Wartungsplan geregelt wird.<br />
Die Farbe des Autos kann frei gewählt werden.<br />
Die Höchstgeschwindigkeit muss nicht künstlich begrenzt werden.<br />
Weglassen der Wegfahrsperre, denn er<br />
erkennt, dass nicht alle in Frage kommenden<br />
Höfe ausreichend gesichert sind. Dann<br />
wird er die Abgrenzung durch die neue<br />
Anforderung ersetzen: „Das Auto muss<br />
eine Wegfahrsperre besitzen”. Der Auf -<br />
tragnehmer analysiert das erneut, findet<br />
verschiedene Möglichkeiten für Wegfahr -<br />
sperren und so neue Anforderungen und<br />
Abgrenzungen.<br />
Die Anforderungen übergibt er als<br />
Aufforderung zu einem Angebot an einige<br />
Autohersteller. Er überlegt, ob er die bisher<br />
formulierten Abgrenzungen mit übergeben<br />
sollte. Einerseits ist damit die Gefahr verbunden,<br />
dass ihm sonst (kostenfrei) enthaltene<br />
Bestandteile seiner Lieferung verloren<br />
gehen. Andererseits käme ohne Abgren -<br />
zungen ein wohl teureres Angebot heraus.<br />
Also entschließt er sich, sie mit einzubeziehen<br />
– und liegt gut damit.<br />
Abgrenzung<br />
Über was haben wir hier nicht gesprochen?<br />
Über fast alles andere in der Welt. Wir<br />
haben nicht über Vulkanausbrüche gesprochen,<br />
denn das hat ja nun wirklich nichts<br />
mit dem Thema zu tun. Wir haben nicht<br />
über Mitwirkungspflichten des Auftrag -<br />
gebers gesprochen, obwohl diese ja eigentlich<br />
Brüder der Abgrenzungen sind: Sie fallen<br />
wie die Abgrenzungen nicht in den<br />
Aufgabenbereich, aber der Auftragnehmer<br />
ist im Gegensatz zu jenen auf die Zu -<br />
lieferungen angewiesen. Doch andererseits<br />
betreffen sie den Inhalt von Dokumenten<br />
und Anforderungen nur mittelbar. Nicht<br />
die Mitwirkungspflicht als solche ist für<br />
unser Thema relevant, sondern der Inhalt<br />
der Mitwirkungen. Wir haben nicht über<br />
die Verarbeitung von Abgrenzungen in<br />
Testfällen gesprochen, obwohl diese einen<br />
wertvollen Input für jene liefern. Aber das<br />
mag Aufgabe einer anderen Erörterung<br />
sein.<br />
Wir haben nicht darüber gesprochen,<br />
was es hinsichtlich der einzelnen Gegen -<br />
stände der Abgrenzungen bedeutet, wenn<br />
die Aspekte irrelevant, out of Scope oder<br />
im Scope sind, denn solche Details würden<br />
wohl doch den Rahmen des Artikels sprengen.<br />
Sind diese Abgrenzungen akzeptabel?<br />
Lassen sie den Sinn des Artikels unversehrt?<br />
Jetzt könnte man noch überlegen,<br />
wie diese Abgrenzungen abgegrenzt werden<br />
könnten usw.<br />
■<br />
Tabelle 11: Beispiele für Abgrenzungen.<br />
1/2012
uchbesprechung für sie gelesen von ...<br />
VOM ARCHITEKTONISCHEN<br />
VERSTEHEN, ENTWERFEN UND<br />
WIEDERVERWENDEN<br />
Aus dem dpunkt.verlag stammt das Buch „Basiswissen Softwarearchitektur ”. Auf rund 380<br />
Seiten adressiert die dritte Auflage verschiedene Aspekte des Themas Softwarearchitektur,<br />
darunter Grundlagen, das Verhältnis von Architek tur zur Organisation, das Vorgehen beim<br />
Entwurf, dessen Einflussfaktoren sowie die Dokumen tation von Architekturen, ein<br />
Werkzeugkasten für Architekten, industrielle Softwareent wick lung, Produktlinien und modellbasierte<br />
Ansätze.<br />
... Michael Stal,<br />
Chefredakteur von JavaSpektrum.<br />
Wohltuend wirkt in dem Buch die Tat -<br />
sache, dass es sich tatsächlich auf Archi -<br />
tektur fokussiert und keine langatmigen<br />
Abstecher in andere Gebiete macht. Es<br />
richtet sich explizit an die Zielgruppe der<br />
Projektleiter und Softwareentwickler.<br />
Torsten Posch, Klaus Birken, Michael Gerdom<br />
Basiswissen Softwarearchitektur:<br />
Verstehen, entwerfen, wiederverwenden<br />
In den ersten Kapiteln erfährt der Leser,<br />
warum Softwarearchitektur überhaupt<br />
wichtig ist und wie sich das Thema in<br />
Projektorganisationen einbettet. Dass es<br />
für größere Projekte nicht nur einen<br />
Architekten geben kann, sondern ein<br />
Architekturteam, dafür aber einen<br />
Chefarchitekten, gehört zu den wichtigen<br />
Ausführungen. Der sollte aber nicht<br />
Kompromisse eingehen, wie die Autoren<br />
anmerken, sondern gute und tragfähige<br />
Entscheidungen mit anderen Rollen treffen.<br />
In den nachfolgenden Kapiteln beschreiben<br />
die Autoren die notwendigen Schritte zur<br />
Vorbereitung des Entwurfs sowie den<br />
Entwurf selbst.<br />
Zu den Stärken des Buches gehört es,<br />
dass es sich nicht nur auf Technologie und<br />
Werkzeuge beschränkt, sondern auch verschiedene<br />
Arten von Einflussfaktoren<br />
beleuchtet. Für den Entwurf sollten<br />
Architekten ein iterativ-inkrementelles<br />
Vorgehen nutzen, weil sich Architek -<br />
turentwurf nicht als Einbahnstraße entpuppt,<br />
sondern als „Piecemeal Growth”,<br />
bei dem der Entwurf Schicht für Schicht<br />
wächst. Ein Big Bang lässt sich nicht mehr<br />
kontrollieren, ein iterativer-inkrementeller<br />
Ansatz hingegen schon. Damit der Leser<br />
das alles nachvollziehen kann, bringen die<br />
Autoren ein Fallbeispiel, das aber zu<br />
schlank ist, um die konzeptionellen<br />
Aussagen exemplarisch nachvollziehen zu<br />
können. Im letzten Teil des Buchs streifen<br />
die Autoren Posch, Birken und Gerdom<br />
dpunkt.verlag 2011<br />
380 Seiten<br />
41,90 €<br />
ISBN-10: 3898647366<br />
ISBN-13: 978-3898647366<br />
dann noch fortgeschrittene Themen wie<br />
Produktlinien oder modellbasierte Ansätze<br />
à la MDA und DSLs. Dadurch erhält der<br />
Leser ein sehr abgerundetes und gutes Bild<br />
davon, welchen Herausforderungen sich<br />
Architekten heute stellen müssen.<br />
Wo Licht ist, da ist bekanntlich auch<br />
Schatten. Nicht umsonst steckt der Begriff<br />
„Basiswissen” im Titel. Demzufolge können<br />
viele der Kapitel einzelne Themen nur<br />
anreißen, aber nicht vertiefen. Exem -<br />
plarisch seien hier die Erläuterungen zu<br />
architektonischen Bewertungen er wähnt,<br />
die zwar einen guten, wenn auch nicht vollständigen<br />
Einblick in die Materie geben.<br />
Dadurch regen die Autoren zwar den<br />
Appetit an, können ihn aber nicht stillen.<br />
Zudem wäre ein Kapitel zu eingebetteten<br />
Systemen bzw. zum Thema System-<br />
Engineering wünschenswert, die besondere<br />
Randbedingungen besitzen. Im Kapitel<br />
über Softwareentwicklung im industriellen<br />
Maßstab kommt zwar Wiederverwendung<br />
zur Sprache, nicht aber Problematiken wie<br />
Produkt- versus Lösungsgeschäft oder zum<br />
Beispiel Entwurf über mehrere Standorte<br />
hinweg. Auch sollten sich die Autoren für<br />
weitere Neuauflagen überlegen, ob es wirklich<br />
sinnvoll ist, MDA bei den modellbasierten<br />
Verfahren in den Vordergrund zu<br />
stellen. Jedenfalls hält sich dessen<br />
Verbreitung in der Praxis sehr in Grenzen.<br />
Das alles ist natürlich dem Problem<br />
geschuldet, dass ein Buch es nicht allen<br />
Lebenslagen und Bedürfnissen recht<br />
machen kann.<br />
Insgesamt erweist sich das Buch „Basis-<br />
wissen Soft warearchitektur” als lesenswerte<br />
und wichtige Lektüre für die angesprochene<br />
Zielgruppe. Es verschafft einen<br />
Einblick in architektonisches Arbeiten,<br />
ohne den Leser mit Information zu erschlagen.<br />
Für Manager in Entwick -<br />
lungsabteilungen dürfte es auch eine interessant<br />
Lektüre darstellen, für prak -<br />
tizierende Softwarearchitekten hingegen<br />
nur bedingt.<br />
■<br />
74 75
fachartikel<br />
mehr zum thema:<br />
www.it-grundschutz.de<br />
www.bsi-fuer-buerger.de/smartphones<br />
die autorin<br />
TECHNIK PLUS SENSIBILITÄT:<br />
SICHERER SMARTPHONE-<br />
EINSATZ IN UNTERNEHMEN<br />
Im Arbeitsalltag setzen sich Smartphones zunehmend durch. Doch Vergesslichkeit, Sorg -<br />
losigkeit und technische Risiken stellen potenzielle Gefahren für die sensiblen Unternehmens -<br />
daten dar, auf die mit den mobilen Endgeräten zugegriffen wird. Auch ist vielen Nutzern nicht<br />
bewusst, dass der Schutzbedarf eines Smartphones dem eines normalen PCs entspricht.<br />
Aufklärung der Mitarbeiter ist also genauso dringend angeraten wie die Integration der mobilen<br />
Endgeräte in das unternehmensweite Sicherheitskonzept. Dieser Artiekl beschreibt die<br />
wichtigsten Schritte, die ein Unternehmen ergreifen sollte, um Smartphones sicher einsetzen<br />
zu können.<br />
Isabel Münch<br />
(E-Mail: Isabel.Muench@bsi.bund.de)<br />
ist Referatsleiterin für IT-Sicherheitsmanagement<br />
und IT-Grundschutz beim Bundesamt für Sicherheit<br />
in der Informationstechnik. Ihre Arbeitsschwer -<br />
punkte sind die Weiterentwicklung des IT-Grund -<br />
schutzes sowie die Leitung und Koordination von<br />
IT-Sicherheitsanalysen.<br />
Aus dem Business-Alltag sind Smartphones<br />
schon jetzt kaum noch wegzudenken, und<br />
dabei steht ihre Entwicklung erst am Anfang.<br />
So erwartet das Marktforschungs unter -<br />
nehmen IDC in seinem Worldwide Quarterly<br />
Mobile Phone Tracker (vgl. [IDC]), dass die<br />
Zahl der intelligenten Handys in diesem Jahr<br />
um 55 % auf 472 Millionen steigen und sich<br />
bis zum Jahr 2015 noch einmal verdoppeln<br />
wird. Dieser Boom kommt nicht von ungefähr.<br />
Als Kombination aus Mobiltelefon und<br />
Personal Digital Assistant (PDA) erfüllt die<br />
jüngste Genera tion der Smartphones im<br />
Arbeitsalltag immer mehr Funktionen.<br />
Gerade wer viel beruflich unterwegs ist, nutzt<br />
mit mobilen Endgeräten die früher oftmals<br />
unproduktive Reisezeit für Arbeit und berufliche<br />
Interaktion.<br />
Dabei kommt der Geschäftswelt zugute,<br />
dass die Benutzer in ihrem privaten Umfeld<br />
gerne mobil erreichbar sind und diese<br />
Erfahrung in der Arbeitswelt ebenfalls<br />
nicht missen möchten. Doch stehen den<br />
Vorteilen einige Nachteile gegenüber, beispielsweise<br />
menschliche Nachlässigkeit.<br />
Laut einer repräsentativen Umfrage im<br />
Auftrag des BITKOM (vgl. [BIT]) vom<br />
August 2010 haben rund 7 Millionen<br />
Deutsche ihr Mobiltelefon bereits einmal<br />
verloren, rund 4 Millionen ist es schon einmal<br />
gestohlen worden. Dies ist erst recht<br />
erschreckend, wenn man be denkt, wie viele<br />
möglicherweise unternehmenskritische,<br />
sicherheitsrelevante Daten auf diese Weise<br />
abhanden gekommen sind – und zwar<br />
umso mehr, je größer die Datenspeicher<br />
werden. So bestehen dem Marktforscher<br />
Gartner zufolge schon heute 47 % der<br />
Informationen auf mobilen Endgeräten aus<br />
Unternehmensdaten.<br />
Abb. 1: Angriffsziel Smartphone: Schutzbedarf mit dem eines PC vergleichbar.<br />
Menschliche Schwächen,<br />
Diebstahl, technische Risiken<br />
Hinzu kommt die Sorglosigkeit mancher<br />
mobiler Nutzer, die aus Bequemlichkeit<br />
eine einfache Bedienung der Sicherheit vorziehen<br />
oder nach dem „Augen-zu-unddurch”-Prinzip<br />
surfen und telefonieren.<br />
Der Diebstahl mobiler Geräte durch offene<br />
Türen oder Fenster, der Blickkontakt<br />
Unbefugter auf Displays mit vertraulichen<br />
Daten oder die Infizierung mit Schad -<br />
programmen durch die private Nutzung<br />
eines Business-Smartphones bergen glei -<br />
cher maßen potenzielle Gefahren für Unter -<br />
neh mensdaten.<br />
Smartphones unterliegen den gleichen<br />
technischen Risiken wie normale PCs.<br />
Auch Smartphones sind potenzielle Ziele<br />
für Attacken mit Viren, Trojanern oder<br />
Spam, für Hackerangriffe oder gezielten<br />
Datendiebstahl. Analog dazu lässt sich<br />
auch der Schutzbedarf eines Smartphones<br />
mit dem eines PC vergleichen – was aber<br />
vielen Nutzern nicht bewusst ist. In der<br />
aktuellen Bürgerumfrage des BSI (vgl. [BSIb])<br />
war über einem Drittel der Befragten<br />
1/2012
fachartikel<br />
■ Halten Sie Ihre Zugangsdaten unter Verschluss. Geben Sie die PIN sowie Codes so<br />
ein, dass niemand sie mitlesen kann, und wechseln Sie regelmäßig Ihre Passwörter.<br />
■ Lassen Sie das Gerät niemals unbeaufsichtigt herumliegen, um unbefugte Zugriffe zu<br />
vermeiden.<br />
■ Halten Sie das Betriebssystem stets auf dem aktuellen Stand. Installieren Sie die vom<br />
Hersteller empfohlenen Anwen dungs-Updates regelmäßig.<br />
■ Installieren Sie nur solche Apps, die Sie auch regelmäßig nutzen. Wenn es möglich ist,<br />
prüfen Sie kritisch, ob die Zugriffsrechte zum Erfüllen der Funktionalität wirklich<br />
nötig sind – es könnte sich um potenzielle Trojaner-Software handeln.<br />
■ Informieren Sie sich wenn möglich über den jeweiligen Anbieter der App und dessen<br />
Vertrauenswürdigkeit. Hilfreich können dabei beispielsweise Kritiken anderer<br />
Nutzer im Internet sein.<br />
■ Deaktivieren Sie drahtlose Schnittstel len (z. B. WLAN oder Bluetooth), wenn Sie sie<br />
nicht benötigen.<br />
■ Seien Sie vorsichtig bei öffentlichen Hotspots oder ungesicherten bzw. unbekannten<br />
WLAN-Angeboten.<br />
■ Prüfen Sie in den Einstellungen regelmäßig den Akku-Verbrauch. Bei Auffälligkeiten<br />
sollten Sie verdächtige Applikationen im Zweifelsfall deinstallieren.<br />
■ Wenn Sie Ihr Smartphone verlieren, lassen Sie umgehend die SIM-Karte sperren.<br />
Kasten 1: Hinweise zum Schutz Ihres Smartphones.<br />
(36 %) nicht bekannt, dass ein Smartphone<br />
dieselben Sicherheitsvorkehrungen wie ein<br />
PC benötigt. Außerdem hat fast die Hälfte<br />
der befragten Nutzer noch nie ein<br />
Sicherheits-Update eingespielt. Aufklärung<br />
der Mitarbeiter tut also dringend Not,<br />
zumal Sicherheitsexperten von einer<br />
Zunahme IT-gestützter Angriffe über mobile<br />
Endgeräte ausgehen.<br />
Entsprechend breit sollten deshalb die<br />
Sicherheitsrichtlinien eines Unternehmens<br />
angelegt werden. Ein solches Gesamt konzept<br />
setzt bei der Geschäftsführung an, die sich<br />
zunächst vor Augen führen sollte, dass<br />
Sicherheit ein Prozess ist und nur im Ganzen<br />
erreicht und gewährleistet werden kann.<br />
Deshalb muss die Nutzung mobiler End -<br />
geräte für Firmenzwecke von Anfang an in<br />
das unternehmensweite Sicherheits kon zept<br />
integriert werden. Außerdem sollte sich die<br />
Geschäftsführung ihrer Vorbild funktion<br />
bewusst sein und beispielsweise keine Smart -<br />
phones oder Applikationen benutzen, die<br />
Mitarbeitern verboten wurden.<br />
Der Weg zur IT-Sicherheit<br />
Als Standard für die Informationssicherheit<br />
in Unternehmen hat das Bundesamt für<br />
Sicherheit in der Informationstechnik (BSI)<br />
(vgl. [BSI-a]) den IT-Grundschutz erarbeitet.<br />
Dabei handelt es sich um ein betrieblich<br />
einfach zu nutzendes Instrument, um dem<br />
Stand der Technik entsprechende Sicher -<br />
heitsmaßnahmen zu identifizieren und<br />
umzusetzen. Die BSI-Standards zum Infor -<br />
mationssicherheitsmanagement, die IT-<br />
Grundschutz-Kataloge, aber auch die ISO-<br />
27001-Zertifizierung auf der Basis von IT-<br />
Grundschutz werden hierfür als Werk zeuge<br />
eingesetzt. Nach modularem Prinzip lassen<br />
sich für den Umgang mit mobilen End -<br />
geräten einzelne Bausteine – wie etwa zum<br />
Thema Sensibilisierung der Mitar beiter,<br />
mobiler Arbeitsplatz, Schutz vor Schad -<br />
programmen, Firewall oder Virtuelle Pri -<br />
vate Netze (VPN) – zu einem kompletten<br />
Sicherheitsgerüst zusammenfügen.<br />
Schutzbedarf wie<br />
ein Computer<br />
Wenn es also darum geht, Smartphones in<br />
die Unternehmens-IT einzubinden, sollte<br />
zunächst Klarheit darüber herrschen, dass<br />
diese auf Grund ihrer Funktio nalität eher<br />
mit Computern als mit Handys vergleichbar<br />
sind. Das müssen auch die Mitarbeiter<br />
verinnerlichen. Denn im Fall ungenügender<br />
Absicherung der Geräte und der Kom -<br />
munikationsschnittstellen (z. B. WLAN<br />
oder Bluetooth) können sowohl Gespräche<br />
abgehört werden als auch sensible Daten –<br />
wie Adressbucheinträge, Ter mine, SMS<br />
oder E-Mails – von Kriminellen ausgespäht<br />
werden.<br />
Malware als Gefahrenquelle<br />
Ein weiteres Risiko liegt in der Infektion<br />
mit Schadprogrammen. Entsprechende<br />
Malware kommt zunehmend in Umlauf.<br />
Eine Infizierung funktioniert dabei wie bei<br />
einem normalen Computer, nämlich beispielsweise<br />
per E-Mail oder über manipulierte<br />
Web-Seiten. Auch zum Download<br />
angebotene Apps können eine Gefahren -<br />
quelle darstellen. Ist ein Smartphone erst<br />
einmal mit einem Schadprogramm infiziert,<br />
können eventuell Daten mitgelesen oder<br />
manipuliert werden. Das dritte wesentliche<br />
Risiko besteht im Ausfall bzw. der Mani -<br />
pulation des Fernzugriffs. Smartphones<br />
werden häufig im beruflichen Umfeld<br />
genutzt, um auf Unternehmensdaten zuzugreifen<br />
– ein äußerst attraktives Ziel für<br />
Angreifer.<br />
Bewusst auf mögliche<br />
Infektionen achten<br />
Der notwendigen Sensibilisierung der Mit -<br />
arbeiter schließt sich die nächste Frage an:<br />
Woran ist eine Infektion mit Schadsoftware<br />
zu erkennen? Dafür gibt es verschiedene<br />
Indikatoren. Ist etwa der Akku-Verbrauch<br />
ungewöhnlich hoch oder schaltet sich das<br />
Gerät unerwartet aus, sollte der Nutzer<br />
misstrauisch werden. Das gleiche gilt, wenn<br />
das Smartphone unbekannte Rufnummern<br />
anwählt. Denn es wäre möglich, dass dabei<br />
persönliche Informationen abgefragt,<br />
Konten bzw. Guthaben manipuliert werden<br />
oder durch die Anwahl kostenpflichtiger<br />
Rufnummern hohe Kosten entstehen.<br />
Argwohn ist auch dann angebracht, wenn<br />
ungewollt persönliche Daten oder SMS versendet<br />
werden, sich ohne Zutun des<br />
Nutzers die PIN verändert oder auf dem<br />
Einzelverbindungsnachweis Verbindungen<br />
aufgelistet sind, die der Nutzer nicht zuordnen<br />
kann.<br />
Notwendige Regelungen treffen<br />
Neben der ständigen Aufmerksamkeit für<br />
Auffälligkeiten dieser Art gehört eine ganze<br />
Palette technischer sowie organisatorischer<br />
Maßnahmen in das unternehmenseigene<br />
Sicherheitspaket. Dafür sollte man im<br />
Vorfeld eine Vielzahl von Regelungen treffen:<br />
■ Welche Daten dürfen gespeichert und<br />
verarbeitet werden?<br />
■ Wie ist mit privaten Daten umzugehen?<br />
■ Welchen Anforderungen an Betriebs -<br />
syste me, Schnittstellen, zentrale Admi -<br />
nis tration oder Sicherheit muss entsprochen<br />
werden?<br />
■ Welche zusätzlichen Sicherheitsmecha -<br />
nismen werden verwendet?<br />
76 77
fachartikel<br />
Hinzu kommen die Besonderheiten der<br />
mobilen Kommunikationsnetze sowie die<br />
Nutzung von WLAN und Bluetooth.<br />
Außerdem sollte man festlegen, unter<br />
welchen Rahmenbedingungen Smart -<br />
phones genutzt werden dürfen und wie sie<br />
unterwegs zu schützen sind. In diese<br />
Kategorie gehören auch Regelungen für<br />
Geräte, die von Besuchern in die Unter -<br />
nehmensräume mitgebracht werden.<br />
Weiter hin sind die notwendigen Schritte bei<br />
Verlust zu definieren. Darüber hinaus müssen<br />
die Benutzer über die Grenzen der<br />
Sicherheitsmaßnahmen ebenso Bescheid<br />
wissen wie über die unternehmensweiten<br />
Richtlinien für den sicheren Einsatz.<br />
Zum Schutz vor Missbrauch oder Dieb -<br />
stahl sollten Smartphones nicht an unsicheren<br />
Orten unbeaufsichtigt zurückgelassen<br />
werden. Verlorene oder gestohlene Geräte<br />
sollten sofort gesperrt werden. Zudem ist<br />
die Abfrage einer PIN oder eines Passworts<br />
sowohl beim Einschalten des Geräts als<br />
auch nach längerer Nichtnutzung oder<br />
beim Wechsel der SIM-Karte eine<br />
Standard-Sicherheitsmaßnahme.<br />
Ob und auf welche Weise zusätzliche<br />
Dienste wie Bluetooth oder WLAN genutzt<br />
werden dürfen, bedarf ebenfalls der<br />
Definition. Nicht benötigte Dienste sollten<br />
generell deaktiviert sein. Vertrauliche<br />
Daten und E-Mails müssen durch geeignete<br />
Maßnahmen zur Authentisierung und<br />
Verschlüsselung vor unbefugtem Zugriff<br />
geschützt werden. Bei Online-Zugriffen<br />
vom Smartphone auf das IT-Netz des<br />
Unternehmens muss außerdem eine sichere<br />
Kommunikation gewährleistet werden.<br />
Hierbei sind Verfahren zu definieren, wie<br />
Verbindungen über die unterschiedlichen<br />
Schnittstellen, beispielsweise über VPN-<br />
Techniken, aufgebaut werden. Bei beson -<br />
ders hohem Schutzbedarf ist der Einsatz<br />
von Krypto-Handys sinnvoll, die eine<br />
durchgängig verschlüsselte Sprach- und<br />
SMS-Kommunika tion ermöglichen.<br />
Was die Speicherung von Daten und<br />
Programmen betrifft, so empfiehlt es sich,<br />
vertrauliche Daten gar nicht oder nur verschlüsselt<br />
auf den Geräten oder zusätzlichen<br />
Speicherkarten abzulegen und sensible<br />
Informationen nicht unverschlüsselt<br />
über das Mobiltelefon weiterzugeben. Zur<br />
Ausfallvorsorge ist zudem eine regelmäßige<br />
Datensicherung notwendig. Für den Fall<br />
des Datenverlustes ist zu definieren, über<br />
welche Mechanismen das letzte Backup<br />
wieder eingespielt werden kann – vor allem<br />
dann, wenn der Mitarbeiter gerade unterwegs<br />
ist.<br />
Links<br />
Empfehlungen für die<br />
Mitarbeiter veröffentlichen<br />
Alle Sicherheitsempfehlungen zum Thema<br />
Smartphones sollten zudem zielgruppengerecht<br />
aufbereitet und in einer Benutzer -<br />
richtlinie unternehmensweit veröffentlicht<br />
werden. Dass sich dieser Aufwand für<br />
Unternehmen lohnt, liegt auf der Hand.<br />
Schließlich legen gesetzliche Regelungen<br />
wie die Eigenkapital-Vorschriften des<br />
Basler Ausschusses für Bankenaufsicht<br />
(Basel II) oder das Gesetz zur Kontrolle und<br />
Transparenz im Unternehmensbereich<br />
(KonTraG) eindeutig fest, dass das<br />
Geschäftsrisiko durch Sicherheitslücken<br />
beim Unternehmer liegt.<br />
Wichtig ist, dass bei allen technischen und<br />
organisatorischen Maßnahmen niemals der<br />
Faktor Mensch außer Acht gelassen wird.<br />
Schließlich nützen die besten technischen<br />
Sicherheitsvorkehrungen nichts, wenn ein<br />
Mitarbeiter während eines Telefonats unterwegs<br />
ungeniert und lautstark sensible Unter -<br />
nehmensinformationen verrät. ■<br />
[BIT] Bitkom, Handy-Diebstahl weit verbreitet, siehe: http://www.bitkom.org/de/presse/66442_64952.aspx<br />
[BSI-a] Bundesamt für Sicherheit in der Informationstechnik, siehe: www.bsi.bund.de<br />
[BSI-b] Bundesamt für Sicherheit in der Informationstechnik, BSI-Bürgerumfrage zur<br />
Internetsicherheit, siehe:<br />
https://www.bsi.bund.de/ContentBSI/Presse/Pressemitteilungen/Presse2011/BSI-Buergerumfrage-Internetsicherheit_11022011.html<br />
[IDC] IDC, Worldwide Quarterly Mobile Phone Tracker, siehe:<br />
http://www.idc.com/research/viewfactsheet.jsp?containerId=IDC_P8397<br />
1/2012