Iterative Entwicklung
Das Verfahren der iterativen Entwicklung charakterisiert den Lebenszyklus eines Softwareprojekts mit mehreren Iterationen. Eine Iteration besteht aus einer losen Folge von Aufgaben, die aus den verschiedenen Disziplinen des Software-Engineering ausgewählt wurden.
Hauptbeschreibung

Was ist iterative Entwicklung?

Ein Projekt mit iterativer Entwicklung hat einen Lebenszyklus, der aus mehreren Iterationen besteht. Eine Iteration ist eine lose Folge von Aufgaben (Geschäftsmodellierung, Anforderungen, Analyse und Design, Implementierung, Deployment) unterschiedlichen Umfangs, je nachdem, an welcher Stelle im Entwicklungszyklus die Iteration stattfindet. Während der Konzeptions- und Ausarbeitungsphasen beziehen sich Iterationen verstärkt auf Management, Anforderungen und Designaktivitäten, während der Konstruktionsphase beziehen sie sich auf Design, Implementierung und Test. Während der Übergangsphase schließlich beziehen sich Iterationen auf Test und Deployment. Iterationen sollten einem festen Zeitrahmen haben; das heißt, der Zeitplan für die Iteration sollte vordefiniert sein. Der Umfang des Iterationsinhalts wird dann aktiv so verwaltet, dass der Zeitplan eingehalten werden kann.

Warum iterative Entwicklung?

Das anfängliche Design ist vermutlich noch nicht perfekt auf die Anforderungen ausgerichtet. Je später Probleme erkannt werden, desto höher sind die für die Beseitigung anfallenden Kosten; manchmal müssen sogar komplette Projekte storniert werden.

Es bestehen bei allen Projekten Risiken. Wenn allerdings bereits in einem frühen Stadium des Lebenszyklus geprüft werden kann, ob Risiken vermieden werden, kann wesentlich genauer geplant werden. Viele Risiken werden oft erst dann entdeckt, wenn das System integriert werden soll. Auch wenn das Entwicklerteam äußerst erfahren ist, ist es nie möglich, alle Risiken vorherzusagen.

Risiko- und Zeitdiagramm des Entwicklungsprozesses nach der Wasserfallmethode

In einem Lebenszyklus mit Wasserfallprinzip können Sie erst spät im Zyklus prüfen, ob ein Risiko vermieden wurde.

Risiko- und Zeitdiagramm des Entwicklungsprozesses nach der iterativen Methode

Während eines iterativen Lebenszyklus wählen Sie das Inkrement für die Entwicklung innerhalb einer Iteration auf der Basis von Schlüsselrisiken aus. Weil die Iteration eine getestete ausführbare Funktion erzeugt, können Sie feststellen, ob immanente Risiken verringert wurden oder nicht.

Vorteile der iterativen Vorgehensweise

Eine iterative Vorgehensweise ist im Allgemeinen leistungsfähiger als die Wasserfallmethode; dies hat verschiedene Gründe.

  • Die Risiken werden in einem frühen Stadium erkannt und reduziert, weil Elemente progressiv integriert werden.
  • Änderungen bei Anforderungen und Taktik können berücksichtigt werden.  
  • Weil es leichter ist, das Produkt zu verbessern und zu verfeinern, erhält man ein stabileres Produkt.
  • Die Organisationen lernen aus diesem Vorgehen und verbessern ihren Prozess.  
  • Die Wiederverwendbarkeit erhöht sich.

Ein Kunde sagte einmal: "Bei der Wasserfallmethode sieht alles phantastisch aus - bis fast zum Ende des Projekts und manchmal auch noch bis zum Integrationsprozesses. Und dann tut es einen Schlag. Bei der iterativen Methode bleibt die Wahrheit nicht lange verborgen."

Projektleiter mögen häufig die iterative Methode nicht, weil sie sie als endloses Hacken sehen. In Rational Unified Process läuft die interaktive Methode sehr kontrolliert ab. Anzahl, Dauer und Ziel der Iterationen werden genau geplant. Die Aufgaben und Zuständigkeiten der einzelnen Teilnehmer sind klar definiert. Objektive Bewertungen des Fortschritts werden erfasst. Zwischen den einzelnen Iterationen findet zwar Nacharbeit statt, aber sie wird ebenfalls streng kontrolliert.

Risiken vermindern

Die iterative Methode erlaubt es Ihnen, Risiken früher zu erkennen und zu entschärfen, die sonst erst im Verlauf der Integration erkannt werden würden. Während der Iteration werden in einem frühen Stadium alle Disziplinen überarbeitet und viele Aspekte des Projekts behandelt: Tools, gebrauchsfertige Software, Erfahrungen etc. Erkannte Risiken sind vielleicht gar keine mehr, aber es werden vielleicht neue Risiken aufgedeckt.

Integration ist nicht der "Big Bang" am Ende. Alle Elemente werden progressiv eingearbeitet. Eigentlich handelt es sich bei der iterativen Methode fast um eine fortlaufende Integration. Was bisher eine lange, ungewisse und schwierige Zeit war, bis zu 40 % des Arbeitsaufwands am Ende eines Projekts einnahm und nicht geplant werden konnte, ist jetzt in sechs bis neun kleinere Integrationsschritte aufgeteilt. Das heißt, am Anfang werden immer nur wenige Elemente integriert.

Änderungen einarbeiten

Die iterative Methode erlaubt es Ihnen, die Änderungen einzuplanen, die im Verlauf eines Projekts immer auftreten.

Änderungen und der Stand von Anforderungen sind primäre Problemquellen für ein Projekt und können zu verspäteter Auslieferung, nicht eingehaltenen Zeitplänen, unzufriedenen Kunden und frustrierten Entwicklern führen. Vor 25 Jahren schrieb Fred Brooks: "Planen Sie, etwas wegzuwerfen. Sie werden es ohnehin tun." Benutzer ändern ihre Meinung. Das ist die menschliche Natur. Es wäre falsch, Benutzer zu zwingen, das System so zu akzeptieren, wie sie es anfänglich haben wollten. Man ändert sein Meinung, weil sich die Umstände ändern. Die Benutzer lernen mehr über die Umgebung und die Technologie und sie sehen eine vorläufige Demonstration des Produkts im Verlauf seiner Entwicklung.

Während eines iterativen Lebenszyklus ist es möglich, am Produkt taktische Änderungen vorzunehmen. Um mit anderen Produkten auf dem Markt zu konkurrieren, entscheiden Sie sich vielleicht, Ihr Produkt mit weniger Funktionen auf den Markt zu bringen, oder Sie beziehen eine bestimmte Technologie jetzt von einem anderen Anbieter.

Auch technische Änderungen können bei Iterationen integriert werden. Wenn sich Technologie verändert oder ein neuer Standard eingeführt wird, können diese Elemente in das Projekt aufgenommen werden. Dies ist besonders dann der Fall, wenn sich Plattform oder untergeordnete Infrastrukturen ändern.

Höhere Qualität erzielen

Die iterative Methode sorgt für eine stabilere Architektur, weil Fehler über mehrere Iterationen korrigiert werden können. Unstimmigkeiten werden bereits früh erkannt. Leistungsengpässe können vermieden werden und werden nicht erst in der Nacht vor der Produktauslieferung ersichtlich.

Beim iterativen Entwickeln wird, anders als bei der einmaligen Ausführung von Tests bei Projektende, das Produkt wesentlich intensiver getestet. Kritische Funktionen werden in verschiedenen Iterationen getestet; so können auch die Tests selbst und die Testsoftware weiter entwickelt werden.

Lernen und verbessern

Entwickler bilden sich im Verlauf des Projekts weiter und die verschiedenen Kompetenzen und Kenntnisse können während des Produktlebenszyklus effektiver genutzt werden.

Statt lange auf Pläne zu warten und ihre Kenntnisse zu vertiefen, fangen die Tester in einem frühen Stadium des Projekts mit dem Testen an; auch die Dokumentation wird früh erstellt. Es ist frühzeitig während der Iterationsauswertung erkennbar, ob zusätzliches Training oder externe Mitarbeiter erforderlich werden könnten.

Der Prozess selbst kann während seiner Entwicklung verbessert werden. Die Auswertung am Ende jeder Iteration prüft nicht nur den Projektstatus von einer Zeitplanperspektive, sondern analysiert auch, was in Organisation und Prozess verändert werden muss, damit die nächste Iteration besser läuft.

Wiederverwendbarkeit erhöhen

Iterative Lebenszyklen erleichtern die Wiederverwendung von Komponenten. Es ist einfacher, allgemeine Komponenten zu identifizieren, wenn sie teilweise entworfen oder implementiert sind. als alle Gemeinsamkeiten zu Beginn des Projekts festzulegen.

Das Identifizieren und Entwickeln wiederverwendbarer Komponenten ist schwierig. Anhand von Designprüfungen in frühen Iterationen können Softwarearchitekten unerwartete Fälle möglicher Wiederverwendbarkeit identifizieren und bei späteren Iterationen diesen Code weiter entwickeln.

Die iterative Methode erleichtert auch die Integration von gebrauchsfertigen, kommerziellen Produkten. Sie können in mehreren Iterationen ausgewählt, integriert, geprüft und angepasst werden.