Software systematisch verbessern

Evolution, Änderung und Wartung – aber richtig!

Gernot Starke

Die Informatik-Ausbildung fokussiert auf die Neuentwicklung von Software – den Alltag vieler Softwerker prägen jedoch meist Pflege, Änderung oder Erweiterung von Systemen. In diesem Artikel stelle ich Ihnen aim42 vor, ein systematisches Vorgehen zur Verbesserung von Software. aim42 ist frei verfügbar und kondensiert Praktiken und Patterns rund um Evolution, Änderung und Wartung von IT-Systemen.

Wunsch und Wirklichkeit

In Entwicklung und Betrieb von Software wünschen wir uns über die gesamte Lebensdauer unserer Systeme möglichst niedrige Änderungs- und Betriebskosten, bei gleichzeitig hoher Änderbarkeit und Verständlichkeit (Abb. 1).

Abb. 1: Wunschsituation kommerzieller Software

Bei mittleren bis großen Systemen tritt diese ideale Situation in der Realität nur selten ein. Zeitdruck, Konstruktionsund Managementfehler sowie kurzfristig orientierte Entwurfsentscheidungen sorgen dafür, dass ziemlich genau das Gegenteil geschieht: Obwohl anfänglich alles sauber entwickelt und entworfen war, degenerieren Systeme über die Zeit – das Phänomen der „verfaulenden Software“ schlägt zu. Änderungen werden schwieriger, riskanter und dauern immer länger. In Entwicklung und Betrieb treten vermehrt Probleme auf, deren Behebung mehr und mehr Zeit und Ressourcen in Anspruch nimmt. Damit einher steigen Änderungs- und Betriebskosten.

Abb. 2: Ist-Situation kommerzieller Software

Ganz unterschiedliche Gründe verursachen diese missliche Situation – einige verbreitete Beispiele:

  1. Mangelnde konzeptionelle Integrität: identische Probleme werden innerhalb eines Systems unterschiedlich gelöst, es gibt mehrere unterschiedliche, teils widersprüchliche Lösungsansätze.
  2. Übermäßige strukturelle Komplexität, umständliche Konzepte oder Abläufe innerhalb des Systems.
  3. Schlechter Quellcode, der beispielsweise Grundlagen des Clean Code [1] verletzt, unter zu hoher Kopplung oder niedriger Kohäsion leidet, gegen Coding-Konventionen verstößt, Redundanzen enthält oder schlicht unverständlich ist.
  4. Zum fachlichen Problem unpassende Wahl von Technologien, Frameworks oder sonstiger Infrastruktur („mit Kanonen auf Spatzen schießen“). Diese Liste könnte ich nahezu beliebig weiter führen – und jeder neue Eintrag würde mich dabei an eine reale Situation meines bisherigen Berufslebens erinnern.

Wege in den Abgrund

Zu Beginn vieler Entwicklungsprojekte sieht Software doch recht ordentlich aus: Motivierte Teams erarbeiten stimmige Konzepte und setzen diese dann handwerklich sauber um. Konzepte und Technologien passen zum Problem, ebenso die Daten und Datenstrukturen.

Im Laufe der Zeit jedoch beginnt das Drama: Die ursprüngliche Ordnung weicht einem ständig steigenden Chaos. Ausnahmen werden zur Regel, Code wird immer schwerer verständlich, das Entwicklungsteam beginnt von „historisch gewachsen“ zu sprechen – weil kaum jemand nachvollziehen kann, wie es zu dieser kontinuierliche Verschlechterung kommen konnte.

Durch welche Gründe kommt es dazu? Verlernen Teams über die Zeit das vernünftige und saubere Arbeiten? Nein – vielmehr zwingen oftmals äußere Einflüsse zu Kompromissen, die dann langfristig zu den oben genannten Problemen führen. Neudeutsch nennen Manager dieses Phänomen „technische Schulden“ – Softwareentwickler bezeichnen diese als Quick-And-Dirty, Hot-Fix, oder Workaround – und wissen, dass sich dahinter meistens ein weiterer Schritt in Richtung „degenerierter Systeme“ (rotten-software) verbirgt.

Innere Werte werden vernachlässigt

Ursächlich resultieren diese Probleme in einem mangelnden Bewusstsein für die innere Qualität von Software. Auftraggeber interessieren sich primär für neue Features, Erweiterungen oder schnellstmögliche Fehlerbehebung, weniger für den Erhalt konzeptioneller Integrität, verständlichen Quellcode oder stimmige Anwendung von Konzepten oder Technologien. Aber gerade diese innere Qualität von Systemen stellt sicher, Ziele wie niedrige Änderungskosten, schnelle Fehlerbehebung, hohe Anpassbarkeit zu erreichen. Leider ignorieren immer noch zu viele IT-Manager diesen kausalen Zusammenhang.

Systematisch Verbessern

Der Weg zu besserer Software führt in der kommerziellen Realität immer über mehrere, meist kleine, Schritte zum Ziel. Praktisch niemals können wir den Lauf der Welt für einige Monate anhalten, um in dieser Zeit die Qualität unserer Software zu verbessern. Vielmehr müssen wir Verbesserungen in die regulären Wartungsarbeiten (etwa: Erweiterungen, Fehlerkorrekturen) integrieren.

Ich möchte Ihnen aim42 vorstellen – eine frei verfügbare Methode zur systematischen Verbesserung von Software. Basierend auf der langjährigen praktischen Erfahrung einiger Initiatoren wird sie mittlerweile als Open-Source Projekt durch ein engagiertes Team kollaborativ weiterentwickelt [2].

aim42 adressiert Business und Technik gleichermaßen.

Die zentralen Konzepte von aim42 kommen Ihnen garantiert bekannt vor: Probleme, (Lösungs-)Maßnahmen, Kosten und Risiken. Aim42 packt diese Aspekte in einen methodischen Rahmen und stellt sicher, dass wirklich relevante Probleme auch durch Maßnahmen abgedeckt werden – und nicht vorschnell an Themen optimiert wird, die nur geringen geschäftlichen Nutzen erbringen.

Weitere Informationen zum Thema: Grundkonzepte aim42

Probleme verursachen Kosten

Um Verbesserungen effektiv an realen Bedürfnissen auszurichten, sollten Sie für alle erkannten Probleme innerhalb von Softwaresystemen oder beteiligten Prozessen explizit deren „Kosten“ ermitteln: Welche Kosten entstehen beispielsweise durch direkt zurechenbaren Mehraufwand bei Entwicklung oder Betrieb, wie viel Geld kostet zusätzlich benötigte Hardware, welcher Umsatzausfall oder Opportunitätskosten fallen durch enttäuschte Kunden oder entgangene Verkäufe an? Zu den Kosten ermitteln Sie, in welcher Frequenz sie anfallen – etwa bei jeder Änderung, bei jedem Release des Systems oder bei jedem Aufruf einer bestimmten Systemfunktion.

aim42 nennt das problem list, eine Liste oder Tabelle sämtlicher bisher erkannten Probleme samt ihrer geschätzten Kosten. Erst wenn Sie die Kosten von Problemen kennen, können Sie mit anderen Stakeholdern zielgerichtet über Prioritäten und mögliche Abhilfen diskutieren. aim42 unterstützt Sie durch pragmatische und einfache Ansätze in dieser Bewertung.

Kontinuität und Iteration

Aus der Vogelperspektive teilt aim42 die systematische Verbesserung in drei Phasen ein:

  1. Analyze: Aufdecken und sammeln von Problemen. Gleichzeitig sollten Sie in der Analyse auch Verständnis für die Organisation, Struktur und Lösungskonzepte des Systems gewinnen, weil das für die Erkennung von Problemen und Risiken fundamental ist.
  2. Evaluate: Schätzen oder ermitteln des (Geld-)Wertes von Problemen und Maßnahmen. Das ermöglicht zielgerichtete Priorisierung und Planung. Diese Bewertung reichert Probleme und Maßnahmen um relevante Steuerinformationen und KPI’s für das IT- und technische Management an.
  3. Improve: Durchführen von Verbesserungsmaßnahmen. Hier fasst aim42 bewährte Patterns und Praktiken von Evolution, Refactoring, Migration oder stufenweisem Umbau zusammen.
Abb. 4: Drei Phasen der Verbesserung

Kontinuität und Iteration

Verbesserung ist ein kontinuierlicher Prozess (siehe Abbildung 4). aim42 funktioniert für beliebige Entwicklungs- oder Wartungsprozesse und teilt relevante Aktivitäten (Praktiken, Vorgehensmuster) in Phasen ein. Diese Aktivitäten können Sie in Ihrem normalen Entwicklungsvorgehen nahtlos integrieren.

Eine gedankliche Schleife wiederholt sich in aim42 immer wieder: (1) Sie finden ein Problem oder dessen Ursachen, (2) bewerten dieses Problem hinsichtlich seiner Kosten und (3) identifizieren Lösungsmaßnahmen dafür. (4) Sie wenden die Lösungsmaßnahme an und (5) analysieren ob das ursprüngliche Problem damit behoben ist.

Diese Schleife läuft in ähnlicher Form in jeglicher Art von Konstruktions- oder Optimierungsprozessen ab. Nach meiner Erfahrung kranken viele Systeme in der Praxis daran, dass die technisch Verantwortlichen vor der Bewertung der Kosten von Problem und Maßnahmen zurückschrecken. Stattdessen argumentieren sie über „Prinzipien der Softwaretechnik“ oder „technische Konzepte“ – und scheitern damit bei Management oder Auftraggebern.

Abb. 5: Kontinuierliche Verbesserung – iterativer Prozess

Praktiken und (Vorgehens-)Muster

aim42 katalogisiert zur Zeit fast 80 erprobte Praktiken und (Vorgehens-)Muster. Einige Beispiele finden Sie im Textkasten. Allerdings garantiert der Einsatz dieser Praktiken und Muster keinen Erfolg: Wie andere mächtige Werkzeuge auch gehört zur Anwendung dieser Praktiken Fingerspitzengefühl und etwas Erfahrung. Zwar finden Sie in der Methodenreferenz zu aim42 ([3]) eine Menge Hinweise über wenn, wann und wie, aber eine leistungsfähige Methode ist halt kein Algorithmus.

Weitere Informationen zum Thema: Auszug Praktiken und Patterns

Analyse: Verständnis gewinnen und Probleme identifizieren

Gewinnen Sie einen Überblick über Zweck, Aufgaben und insbesondere Qualitätsanforderungen an das System. Klären Sie interne Strukturen, Konzepte und wesentliche Architekturansätze. Dabei suchen Sie nach Problemen, Symptomen, Risiken oder technischen Schulden innerhalb des Systems, seiner Betriebs- oder Ablaufumgebung und allen zugehörigen Prozessen. Notieren Sie Lösungsideen (Maßnahmenvorschläge, „remedies“).

Evaluate: Abbildung auf betriebswirtschaftliche Größen

Stellen Sie die Vergleichbarkeit von Problemen und Lösungsmaßnahmen sicher, indem Sie deren betriebswirtschaftliche Werte (etwa in Euro oder Aufwandsgrößen) schätzen oder ermitteln. Damit können Sie Probleme und mögliche Maßnahmen priorisieren.

Improve: Mehr als nur Refactoring

Planen und koordinieren Sie die auf konkrete Probleme bezogenen Verbesserungsmaßnahmen. Ändern Sie, je nach Situation, Quellcode, Konzepte oder beteiligte Entwicklungs- oder Betriebsprozesse. Reduzieren Sie technische Schulden. Optimieren Sie Qualitätseigenschaften, beispielsweise Wartbarkeit, Verständlichkeit, Sicherheit oder Performance. Sämtliche Verbesserungen beziehen sich dabei auf Probleme oder deren Ursachen, die Sie in der Analysephase erkannt und anschließend bewertet haben – so stellen Sie sicher, keine Veränderung um ihrer selbst Willen durchzuführen.

Improvement Backlog

Eine wesentliche Frage innerhalb der kontinuierlichen Verbesserung habe ich bisher offen gelassen: Woher kommen die konkreten Verbesserungsvorschläge und –maßnahmen? In der Bewertungsphase wollen wir diese Maßnahmen bezüglich ihrer Aufwände und Risiken bewerten, und in der Verbesserungsphase wollen wir sie umsetzen – aber wann definieren wir sie überhaupt? Die Antwort lautet „kontinuierlich“: Ideen, Maßnahmen, Taktiken oder Strategien zur Verbesserung finden Sie in jeder der aim42-Phasen. Ich empfehle Ihnen, im Rahmen der systematischen Verbesserung von Software dazu ein Improvement Backlog zu führen, d.h. sämtliche Ideen für Verbesserungen im Rahmen einer Aufgabenliste zu dokumentieren.

Abb. 6: Maßnahmen in allen Phasen sammeln

Auch hierfür gilt wieder das Prinzip der systematischen Sparsamkeit: Halten Sie diese Dokumentation kurz und knapp. Aktualität ist wichtiger als Vollständigkeit, Transparenz wichtiger als Ausführlichkeit.

Community: Mitmachen erwünscht

aim42 ist ein junges Open-Source Projekt, das noch tatkräftige Unterstützung benötigt. Die bisherigen Committer bringen ihre langjährige und reichhaltige Erfahrung ein – und die gesamte Community freut sich über weitere Anregungen und Input. Für Interessierte: Das Handbuch zur Methodik (der so genannte method-guide) wird im AsciiDoc Format [4] geschrieben und automatisch auf [3] publiziert. Der gesamte Text liegt unter einer liberalen Creative-Commons Lizenz auf einem öffentlichen Github-Repository [5]. Werfen Sie einen Blick auf unsere offenen Punkte [6], ergänzen Sie Kommentare oder machen Sie Verbesserungsvorschläge.

Fazit

aim42 fasst bekannte und bewährte Praktiken und Vorgehensmuster für die Evolution und systematische Verbesserung von Software in einem methodischen Rahmen zusammen. In vielen Real-Life Situationen haben diese Praktiken ihre Praxistauglichkeit unter Beweis gestellt – aim42 integriert sie in einem gemeinsamen Kontext.

Referenzen

  1. Robert Martin: Clean Code – Handbook of Agile Software Craftmanship. Prentice Hall, 2008.  ↩

  2. http://aim42.org - Website mit weiteren Details zur Methode.  ↩

  3. aim42 Method-Guide, das „Handbuch“ zur Methode. Enthält einen umfangreichen Katalog von Patterns und Practices sowie ein Literaturverzeichnis. http://aim42.github.io  ↩

  4. http://asciidoctor.org  ↩

  5. Der Code: https://github.com/aim42  ↩

  6. Offene Punkte und Verbesserungsvorschläge zu aim42: https://github.com/aim42/aim42/issues  ↩

Thumb gernot starke

Gernot Starke – von ganzem Herzen Informatiker und Softwarearchitekt. Nach langem Aufenthalt in Prograland und sporadischen Ausflügen nach Analytistan ist er seit Jahren in Architektionen zu Hause. Als praktizierender Agilist glaubt er an methodisches Vorgehen in der Softwareentwicklung und lebt dieses entsprechend vor. Er ist (Mit-)Gründer als auch Maintainer von arc42 und aim42 – den Open-Source Ansätzen für Architekturdokumentation und -verbesserung. Als innoQ Fellow und Berater ist er in unterschiedlichen Branchen sowohl in kleinen, mittleren wie auch (ziemlich) großen IT-Projekten unterwegs.

Weitere Inhalte

Business technology
Dieser Artikel ist ursprünglich in Ausgabe 02/2014 der Zeitschrift Business & Technology erschienen. Die Veröffentlichung auf innoq.com erfolgt mit freundlicher Genehmigung des S&S Media-Verlags.

Kommentare

Um die Kommentare zu sehen, bitte unserer Cookie Vereinbarung zustimmen. Mehr lesen