Strategien der Softwareentwicklung
Softwareentwicklungsprozesse beinhalten in der Regel viele einzelne Aktivitäten, um aus bestimmten Artefakten neue zu erstellen. Die Verläufe sind mehr oder weniger komplex. Sie lassen sich jedoch im Wesentlichen auf vier Grundstrukturen zurückführen.
Die folgenden Darstellungen beschränken sich auf die wesentlichen Aktivitäten und Artefakte einer Softwareentwicklung. Ausgehend von einer Spezifikation wird über die Schritte Analyse, Design, Implementation und Test ein Produkt erstellt. Der Schwerpunkt dieser Beschreibung liegt auf der Struktur der Prozesse nicht auf deren Ausgestaltung im Einzelnen.
Lineare Softwareentwicklung
Lineare Softwareentwicklung ist eine Folge von Arbeitsschritten, die während der Softwareentwicklung einmalig durchlaufen werden. Eine Wiederholung ist nicht vorgesehen.
Bild 1: Verlauf linearer Entwicklung
In manchen Fällen wird diese simple Vorgehensweise fälschlicherweise als Wasserfallmodell bezeichnet. Obwohl diese Vorgehensweise praktisch nie dem tatsächlichen Verlauf einer Softwareentwicklung entspricht, werden Softwareentwicklungsprozesse dennoch häufig linear dargestellt.
Bedeutung der Symbole
Aktivität
Artefakt
Startknoten
Endknoten
Übergang
Verbindung
Iterative Softwareentwicklung
Unter iterativer Softwareentwicklung wird die Wiederholung einzelner Arbeitsschritte oder des gesamten Prozesses verstanden.
Bild 2: Verlauf iterativer Entwicklung
Diese Vorgehensweise entspricht weitgehend der üblichen Praxis. Unter Wiederholung wird allerdings verstanden, die einzelnen Schritte könnten in jeder beliebigen Folge wiederholt werden.
Bei iterativer Entwicklung dürfen zwar Schritte wiederholen werden, dann müssen aber auch alle nachfolgenden Schritte wiederholt werden. Indem dieses außer Acht gelassen wird, kommt es zu den bekannten Diskrepanzen zwischen Analyse- Design- Code- und Dokumentationsdokumenten.
Wasserfallmodell
In den Köpfen von Entwicklern und Projektmanagern spukt immer noch, das Wasserfallmodell sei linear. Die Wahl des Namens führt offensichtlich zu diesem Missverständnis. Tatsächlich ist es eine vereinfachte Darstellung des iterativen Modells. Es könnte nämlich, falls notwendig, im Zuge der Wiederholung einer Aktivität auch deren Vorgänger wiederholt werden.
Bild 3: Verlauf des Wasserfallmodells
Das Wasserfallmodell hat eine nahezu perfekte Sicht auf die Softwareentwicklung. Es wird davon ausgegangen, dass die Ergebnisse der vorhergehenden Aktivitäten fehlerfrei seien. Sind dennoch Korrekturen nötig, könnten sie in der vorangehenden Aktivität durchgeführt werden. Tatsächlich ist es in der Praxis selten, noch frühere Aktivitäten wiederholen zu müssen.
In großen Projekten sind die Artefakte (Dokumente, Programme usw.) sehr umfangreich und entsprechend hoch ist der Aufwand für die Wahrung deren Konsistenz. Jede Änderung führt dann unweigerlich zu zusätzlichem Verwaltungsaufwand. Es wird folglich alles unternommen, um Fehler so früh wie möglich zu entdecken. Fatal wirkt sich die Praxis aus, die Wiederholung einfach zu unterlassen.
Das Wasserfallmodell wurde, obwohl nicht unter diesem Namen, von Royce W. Winston in seinem Artikel "Managing The Development Of Large Software Systems" [2] 1970 vorgestellt. Er beschreibt dieses Modell, also das mit den einfachen Rücksprüngen, als fehlerträchtig und risikobehaftet. Selbst ein um weitere iterative Elemente erweitertes Modell war unbefriedigend.
Inkrementelle Softwareentwicklung
Inkrementelle Softwareentwicklung bedeutet die Wiederholung der gesamten Entwicklung. Sie legt den Fokus auf die Produkte, konzentriert sich darauf, welches Produkt bzw. Teilprodukt wann ausgeliefert wird.
Bild 4: Verlauf inkrementeller Entwicklung
Inkrementeller Softwareentwicklung liegt ein Entwicklungsprozess zugrunde, der jeweils ganz durchlaufen wird. Vor jeder Wiederholung wird entschieden, welche Teile des Produkts als nächstes realisiert bzw. verändert werden sollen. Die Ziele bleiben fest, lediglich die Art und Vollständigkeit ihrer Umsetzung wird in der Iteration modifiziert. In der Regel werden die Wünsche der Anwender in die Entscheidung einbezogen.
Vielfach werden die Begriffe iterativ und inkrementell synonym verwendet.
Wie im Abschnitt Iterative Softwareentwicklung beschrieben, bedeutet iterative Entwicklung die Wiederholung von Aktivitäten mit dem Ziel der Verbesserung. Es ist auch die Wiederholung der gesamten Entwicklung möglich. Der Verlauf entspricht dann dem von Bild 4.
Zur Klärung:
- Iterative Entwicklung - im engeren Sinne - soll ein Produkt verbessern.
- Inkrementelle Entwicklung - im engeren Sinne - soll ein Produkt erweitern.
In der Praxis werden - selbstverständlich - während eines inkrementellen Zyklus auch Fehler behoben. Damit können inkrementelle und iterative Entwicklung in der Regel nicht klar getrennt werden.
Im allgemeinen Sprachgebrauch kann davon ausgegangen werden, dass
- iterative Entwicklung auch inkrementelle einschließen kann und
- inkrementelle Entwicklung iterative einschließt.
Inkrementelle Softwareentwicklung ist sehr erfolgreich, weil damit Fehler aus vorangegangenen Entwicklungszyklen erfolgreich und konsistent ausgemerzt werden können. Außerdem können damit Prototypen des Produkts erstellt werden, die Teile der spezifizierten Funktionalitäten bereits enthalten.
Evolutionäre Softwareentwicklung
Evolutionäre Softwareentwicklung beschreibt ebenso wie inkrementelle die Wiederholung der gesamten Entwicklung.
Evolutionäre Softwareentwicklung bezieht im Gegensatz zu inkrementeller Entwicklung die Anpassung der Ziele bzw. Spezifikation ausdrücklich mit ein. Sie konzentriert sich ebenfalls darauf, welches Produkt bzw. Teilprodukt wann ausgeliefert wird.
Bild 5: Verlauf evolutionärer Entwicklung
Evolutionärer Entwicklung liegt ein Prozess zugrunde, der jeweils ganz durchlaufen wird. Vor jeder Wiederholung wird entschieden, welche Teile des Produkts als nächstes realisiert bzw. verändert werden sollen. Die Art und Vollständigkeit ihrer Umsetzung wird während der Wiederholung modifiziert. Evolutionäre Entwicklung bezieht ausdrücklich die Adaption der Ziele ein.
Das Attribut evolutionär unterstreicht, dass die Ziele aufgrund der Evaluation des Produkts beim Kunden angepasst werden.
Zusammenfassung
Definition im engeren Sinne:
- Iterative Entwicklung bedeutet die Wiederholung von Teilen oder der gesamten Entwicklung mit dem Ziel der Verbesserung des Produkts mit vorgegebener Spezifikation.
- Inkrementelle Entwicklung bedeutet die Wiederholung der gesamten Entwicklung mit dem Ziel der Vervollständigung des Produkts mit vorgegebener Spezifikation.
- Evolutionäre Entwicklung bedeutet die Wiederholung der gesamten Entwicklung mit dem Ziel der Erweiterung des Produkts einschließlich seiner Spezifikation.
Allgemeiner Sprachgebrauch
Im allgemeinen Sprachgebrauch kann davon ausgegangen werden, dass
- iterative Entwicklung auch inkrementelle einschließen kann,
- inkrementelle Entwicklung iterative einschließt und
- evolutionäre Entwicklung iterative und inkrementelle einschließt sowie
- mit Iteration einfach nur Wiederholung gemeint ist.