Systematische Variantenbildung für Software – Maßarbeit von der Stange

Hersteller von Softwareprodukten stehen heutzutage vor der Herausforderung, ihre Software schnell und vor allem flexibel an Anforderungen von Kunden und Branchen anpassen zu müssen. Unter dem dabei entstehenden Zeit- und Kostendruck wird oft bestehender Programmcode kopiert und für den nächsten Kunden angepasst. Kurzfristig ist dies eine schnelle und naheliegende Vorgehensweise. Langfristig ist der Aufbau einer anpassbaren Produktlinie sowohl aus Wartungs- als auch aus Produktsicht skalierbarer und nachhaltiger.
Die deutsche IT-Industrie ist bekannt für Ihre Stärke in der Entwicklung qualitativ hochwertiger Softwarelösungen. Für Ihre Kunden spielen dabei laut einer aktuell diskutierten Umfrage [1] Individuallösungen weiterhin eine wichtige bis sehr wichtige Rolle. Dennoch erkennen Unternehmen auch die Vorteile von Standardprodukten. Hierzu gehören beispielsweise die sofortige Verfügbarkeit und die in der Regel niedrigeren Anschaffungskosten. Darüber hinaus wollen sich die Unternehmen aber vor allem etablierte Prozesse und Industriestandards sowie in den Systemen realisierte Anwendungs- und Branchenexpertise zunutze machen.
Nichtsdestotrotz bedeutet die Freiheit, standardisierte Produkte anzupassen, auch die Möglichkeit, eigene Stärken besser zu unterstützen. So können beispielsweise durch die Entwicklung individueller Funktionalitäten oder die Abbildung firmenspezifischer Geschäftsprozesse Kernkompetenzen und Marktvorteile eines Unternehmens noch weiter ausgebaut werden. Um diesen gegenläufigen Ansprüchen Ihrer Kunden gerecht zu werden, nutzen Hersteller von Softwareprodukten die Möglichkeit, den Programmcode ihrer Software zu kopieren und entsprechend der individuellen Anforderungen anzupassen (s. Abb.1). Kurzfristig bietet dies Flexibilität und Entwicklungsgeschwindigkeit um auf Kundenwünsche eingehen zu können und letztendlich zusätzlich Umsatz zu generieren. Mittel- und langfristig ist es jedoch vor allem für die Verantwortlichen der Produktentwicklung eine große technische Herausforderung diese angepassten Produktkopien im Griff zu behalten. Steigt die Anzahl angepasster Produktkopien, beschränkt dies gleichermaßen auch die Möglichkeit, neue Funktionen und Eigenschaften miteinander zu kombinieren und mehreren Kunden anbieten zu können.
Die Probleme sind bekannt
Wie eine aktuelle Industrie-Umfrage im Rahmen eines Forschungsprojektes [2] am Forschungszentrum Informatik (FZI) und am Karlsruher Institut für Technologie (KIT) gezeigt hat, sind die Schwierigkeiten individuell-angepasster Produktkopien den Software-Herstellern heutzutage weitreichend bekannt [3]. Die befragten Unternehmen bestätigten, dass ihnen die damit verbundenen Probleme wie beispielsweise stark erhöhte Wartungskosten bewusst sind. Die Wartung von Software wird allgemein seit vielen Jahren untersucht, da sie im gesamten Lebenszyklus eines Produktes der Hauptkostentreiber ist. Hierbei haben verschiedenste Untersuchungen gezeigt, dass speziell das Verstehen des Programmcodes und seiner Zusammenhänge bis zu 60% der Aufwände einnimmt [4]. Angepasste Produktkopien steigern diese Aufwände noch weiter, da Zusammenhänge nicht mehr nur innerhalb eines Programms, sondern über mehrere Programme hinweg bewältigt werden mnüssen. Nichtsdestotrotz nutzen Software-Hersteller die hohe Flexibilität, welche Sie durch das Anpassen der Produktkopien erlangen, bewusst aus, um insbesondere Neukunden auch kurzfristig gewinnen und bedienen zu können.
Kunden schätzen Variabilität
Generell gilt, je besser ein Hersteller seine Produkte an Kundenbedürfnisse anpassen kann, desto wettbewerbsfähiger ist er. Die Variabilität einer Software drückt dabei aus, wie flexibel dies möglich ist. Vergleichbar mit der Automobilbranche bedeuten Konfigurationsmöglichkeiten und optionale Zusatzpakete auch zusätzliche Preismodelle und Anreize.
Je besser man seine Produkte an Kundenbedürfnisse anpassen kann, desto wettbewerbsfähiger ist man
Um im Fall bereits existierender, angepasster Produktkopien die dafür erforderliche Variabilität zu realisieren, stehen unterschiedliche Vorgehensweisen zur Auswahl. So kann man einerseits die Softwarekopien akzeptieren und versuchen, Ihnen durch Managementaufwände Herr zu werden. Mit steigender Anzahl an Kopien sind jedoch auch immer weiter steigende Herausforderungen und Mehraufwände zu erwarten. Dies betrifft vor allem die Bereiche Wartung, Wiederverwendung und Qualitätssicherung. Sollen die damit verbundenen wiederkehrenden Kosten vermieden werden, empfiehlt es sich, die entstandenen Kopien wieder in ein einziges Produkt zusammenzuführen. Dieser Ansatz wird als Konsolidierung bezeichnet und führt zu einer zwar nachträglichen, aber dennoch explizit geplanten Variabilität der Software. So können Anpassungen an individuelle Kundenanforderungen im System vorgesehen und damit auf lange Sicht handhabbar gestaltet werden.
Viele Wege führen zur Konsolidierung
Wählt man den Ansatz der Konsolidierung, dann gibt es zwei Extreme, zwischen denen man sich bewegt. Zum einen kann man die Kopien komplett in ein einziges Produkt zusammenführen, welches durch integrierte "Schalter" erlaubt, die verschiedenen Optionen einzustellen (Single-Code-Base). Zum anderen kann man die angepassten Code-Stellen lokalisieren und über als "Trace Links" bezeichnete Referenzen auf Ebene des Programmcodes nachvollziehbar machen. Während die Erstellung einer Single-Code-Base bei der Konsolidierung selbst sehr aufwändig ist, so sind Trace Links langfristig sehr anspruchsvoll in ihrer Handhabung.
Als guter Mittelweg empfiehlt es sich, ein Kernprodukt in Form einer erweiterbaren Plattform zu gestalten und die individuellen Anpassungen in Zusatzkomponenten auszulagern. Das Konzept ist vergleichbar mit einem Auto, bei dem Kunden beispielsweise einen stärkeren Motor oder eine bessere Klimaanlage wählen können. Eine solche Lösung wird auch als Softwareproduktlinie bezeichnet.
Produktlinien auf Basis bewährter Anpassungen
Softwareproduktlinien verwalten verschiedene, systematisch kombinierbare und konfigurierbare Software-Bausteine, die flexibel an Kunden- und Branchenbedürfnisse angepasst werden können. Durch solche Bausteine erhöht sich der Grad der Wiederverwendung. Der Aufwand für die Realisierung und Wartung kundenspezifischer Softwarevarianten reduziert sich. Abb.2 illustriert das Konzept einer Produktlinie.
Den genannten langfristigen Vorteilen einer Softwareproduktlinie stehen jedoch anfangs deutlich höhere Entwicklungsaufwände gegenüber. Vor allem in noch unbekannten Domänen und gerade für kleine und mittelständische Softwarehersteller bedeutet die Vorabinvestition in eine Produktlinie mit "geratener" Variabilität daher oft ein zu hohes finanzielles Risiko. Daher schaffen die genannten Wege der Konsolidierung für Softwarehersteller mit bestehenden Produktkopien eine einfache, mit weniger Risiko behaftete und wirtschaftliche Methode, um eine Produktlinie auch im Nachgang zu entwickeln.
Herausforderungen und Praxiserfahrungen
Wie die Rückmeldungen der anfangs erwähnten Umfrage bestätigt haben, gehört die Konsolidierung von Produktkopien nicht zum Tagesgeschäft von Software-Herstellern. Während bei der Entwicklung heutzutage Programmcode im Kleinen immer wieder bereinigt und aufgeräumt wird, sind Erfahrungen im Umgang mit Produktkopien im Großen eher rar. Die Gründe liegen hierfür in der fehlenden Werkzeugunterstützung sowie der individuell fehlenden Erfahrung der Entwickler.
Die fehlende Automatisierung zur Konsolidierung von Produktkopien bedeutet sehr hohe manuelle Aufwände. Beispielsweise gestaltet es sich selbst für erfahrene Entwickler schwer und äußerst zeitaufwändig, die in den einzelnen Produktkopien vorgenommenen Änderungen und Erweiterungen sowie die damit verbundenen Abhängigkeiten zu anderen Programmteilen auf Ebene des Programmcodes überhaupt zu erkennen.
Erfahrung und Ausbildung – daran sollte jeder Softwarehersteller aktiv arbeiten
Werkzeugunterstützung zur Reduzierung der manuellen Aufwände bei der Software-Konsolidierung ist bisher nur unzureichend verfügbar. Fortschritte in der Entwicklung geeigneter Werkzeuge für die Analyse der Produktkopien und die anschließende Verwaltung der konsolidierten Produkte sind unter anderem von dem durch die Bundesregierung geförderten Forschungsprojekt "KoPL" [2] zu erwarten, in dessen Kontext auch die oben genannte Umfrage erstellt wurde. Je nach untersuchten Softwarekopien war es mittels der im Projekt entwickelten Analysesoftware bereits möglich, bis zu 99% der durchgeführten Anpassungen zu identifizieren und 72% der Zusammenhänge zwischen diesen Anpassungen zu rekonstruieren.
Der Aspekt der Erfahrung und Ausbildung hingegen ist etwas, an dem jeder Softwarehersteller zweifellos aktiv arbeiten sollte. Abgesehen von der Konsolidierung selbst hilft auch das Wissen über Variabilität und Softwareproduktlinien bei der zukünftigen Entwicklung neuer kundenspezifischer Anpassungen.
Möchte man seine Mitarbeiter weiterentwickeln, gleichzeitig aber auch bereits kurzfristig von einer Konsolidierung profitieren, kann die Hinzunahme eines erfahrenen Technologieberaters in Erwägung gezogen werden. Hierbei sollten dem Team u. a. folgende etablierte Best-Practices vermittelt werden:
- Die Festlegung einheitlicher Variabilitätsmechanismen sowie die Definition von Richtlinien und Kriterien in Bezug auf die Konsolidierung bilden grundlegende Maßnahmen zur Vermeidung von Insellösungen, Inkonsistenzen und der Ausprägung unterschiedlicher Implementierungsstile.
- Eine zentrale, strukturierte Dokumentation der Konfigurationsmöglichkeiten sowie eine geeignete Gruppierung von Produktfunktionen aus Kunden- und Vertriebssicht sichern das rechte Maß an Konfigurationsfähigkeit der Produktlinie.
- Die Kopplung von Konsolidierung und Produkterweiterung sollte in Zusammenarbeit von Entwicklung und Produktmanagement erfolgen. Das Durchführen kurzer, iterativer Entwicklungszyklen führt hierbei zu kontinuierlichem Feedback zwischen Konsolidierung und Tagesgeschäft und ermöglicht eine sukzessive Bewertung des Konsolidierungsfortschrittes.
- Implementierung eines Monitorings und Managements von Qualitätstrends.
Steht hingegen rein das Ziel eines konsolidierten Produktes im Vordergrund und geht man davon aus, dass die eigenen Mitarbeiter zukünftig nur mit der finalen Softwareproduktlinie weiterarbeiten, so ist das vollständige Outsourcing an einen erfahrenen IT-Partner ebenfalls eine geeignete Wahl.
Individuelle Ziele und Wege
Welches Ziel und vor allem welcher Weg einer Konsolidierung für das eigene Unternehmen die richtigen sind, ist genauso individuell wie die Kundenanforderungen an das eigene Softwareprodukt. Oftmals empfiehlt sich daher eine vorausgehende Analyse der eigenen Gegebenheiten, bevor man sich für Ziel und Weg entscheidet. Die Autoren selbst haben positive Erfahrungen mit der Durchführung von Einstiegsworkshops sammeln können, in denen Sie gemeinsam mit Ihren Kunden die ersten Schritte richtig gesetzt haben und damit alle Beteiligten auf das Konsolidierungsvorhaben einstimmen konnten.
- Computerwoche: Unternehmen verschwenden Entwicklungsressourcen
- KoPL
- Benjamin Klatt (2014): Consolidation of Customized Product Copies into Software Product Lines, Seite 184
- T. M. Pigoski und A. April (2004): Software Maintenance, in: Guide to the Software Engineering Body of Knowledge, IEEE Computer Society Press
Neuen Kommentar schreiben