19. Oktober 2015
Hendrik Loesch
0

Softwareevolution

Als Softwareentwickler gibt es nichts Schöneres als mit einem neuen Projekt auf der grünen Wiese zu beginnen. Tatsächlich ist dies aber nur selten der Fall. Umso erstaunlicher ist es, dass die besonderen Umstände in einem lang laufenden Projekt und die Strukturen innerhalb von Bestandsanwendungen, eher selten im Fokus strukturierter Betrachtung stehen. Zumindest scheint es so, denn tatsächlich gibt es unter dem Begriff „Softwareevolution“ ein Themengebiet das genau dies adressiert.

Wie in Abbildung 1 gezeigt, unterteilt sich der Lebenszyklus eines komplexen Softwaresystems in mehrere Phasen. Häufig wird dabei der Zeitbereich der Evolution ausgelassen und nach einer initialen Entwicklungsphase davon ausgegangen, dass nur noch werterhaltende Dienste zu leisten sind. Zu diesen gehören beispielsweise die Fehlersuche und Behebung.

Softwarelebenszyklus

Abbildung 1 Der Softwareentwicklungsprozess nach Tom Mens & Serge Demeyer

In der Praxis ergibt sich jedoch bereits mit dem ersten Nutzerkontakt eine Vielzahl neuer Anforderungen, deren Umsetzung mit den Aufgaben des täglichen Produktivbetriebs synchronisiert werden müssen. Statt also einen Entwicklungsstand zu erreichen, der dann nur noch am Leben gehalten werden muss, entwickelt sich Software evolutionär auf Basis ihrer Benutzung. Dies wird vor allem offensichtlich, wenn man die Aufgaben während des Betriebs auf einen Zeitbereich von vielen Jahren betrachtet.

Abbildung 2 zeigt die Hauptaufgabenbereiche die sich während des Betriebs einer Software für Softwareentwickler ergeben. So startet alles natürlich mit der Entwicklung. Nach einiger Zeit nehmen jedoch stabilisierende Maßnahmen, wie Fehlerbehebungen zu. Mit zunehmenden Nutzerzahlen steigt auch der Bedarf Optimierungspotentiale zu nutzen, während zeitgleich noch immer neue Features implementiert werden. Spätestens nach einigen Jahren kommt es dann zur Sanierung von Teilbereichen oder der gesamten Software. Dies ist beispielsweise notwendig weil sich die grundlegenden Technologien stark geändert haben oder das Aussehen und die Benutzerführung verbessert werden sollen.

Evolutionäre-Softwareentwicklung

Abbildung 2 Die evolutionären Phasen nach Harry M. Sneed & Richard Seidl

Kommt es zur Sanierung des Systems, muss ebenfalls zwischen mehreren Möglichkeiten unterschieden werden. Die offensichtlichste Lösung, mit einem großen Knall eine völlig neue Software auf Basis der Erkenntnisse aus dem Bestandssystem zu entwickeln, ist mit den größten Aufwänden verbunden und sollte daher nur in absoluten Ausnahmefällen gewählt werden. Viel sinnvoller erscheint es daher einzelne Teile neu zu gestalten, was nicht bedeutet dass nur Module oder Komponenten des Systems erneuert werden. Es kann auch bedeuten, dass Features oder Funktionsgruppen in ein neues, schlankeres Softwaresystem übertragen und dann als Parallelsystem angeboten werden. Egal wie sich nun aber entschieden wird, in jedem Fall muss auch während der Sanierung noch immer der korrekte Betrieb des Bestandssystems sicher gestellt sein.

Formen-der-Softwareevolution

Abbildung 3 Kategorien der Softwaresanierung

Bereits bei der Stabilisierung, spätestens jedoch bei der Optimierung des Systems fallen notwendige Änderungen auf, die nicht zwangsläufig einen direkten Mehrwert für den Endnutzer darstellen. Aus diesem Grund ist die kontinuierliche Analyse des Systems und Bewertung von möglichen Aufgaben essentiell für eine zielgerichtete Evolution. Andernfalls drohen unnötige Anpassungen und damit auch unnötige Kosten.

Hendrik Lösch ist Senior Consultant für Microsofttechnologien bei der Saxonia Systems AG. Der Schwerpunkt seiner Arbeit liegt auf der Entwicklung von Software für Kunden im industriellen und medizinischen Umfeld. Darüber hinaus schreibt und spricht er über seine Arbeit, Clean Code und die Testautomatisierung in ihren unterschiedlichen Ausprägungen.

Twitter Xing 

TeilenTweet about this on TwitterShare on Facebook0Share on Google+0Share on LinkedIn0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

10 + drei =