Eine Iteration umfasst die Entwicklungsaktivitäten, die zu einem Produkt-Release führen, einer stabilen,
ausführbaren Version des Produkts, sowie alle anderen peripheren Elemente, die für die Verwendung dieses Release
erforderlich sind. Eine Entwicklungsiteration ist somit in gewisser Weise ein vollständiger Durchlauf durch alle
Disziplinen, mindestens aber ein Durchlauf durch die Disziplinen Anforderungen, Analyse & Design, Implementierung
und Test. Sie ist wie in kleines in sich geschlossenes Wasserfallprojekt. Beachten Sie, dass die Bewertungskriterien
bei der Planung der Iteration festgelegt werden. Das Release hat eine geplante Funktionalität, die demonstriert werden
kann. Die Dauer einer Iteration richtet sich nach der Größe und der Art des Projekts, aber wahrscheinlich werden in
jeder Iteration mehrere Builds
erstellt. Dies wird im Build-Plan für die Integration jeder Iteration festgelegt. Dass
mehrere Builds erstellt werden, ergibt sich aus dem fortlaufenden Integrationsansatz, der in Rational Unified Process
(RUP) empfohlen wird: Sobald Komponenten verfügbar werden, die einem Einheitentest unterzogen wurden, werden diese
integriert. Anschließend wird ein Build produziert, der dann Integrationstests unterzogen wird. Auf diese Weise nimmt
die Funktionalität der integrierten Software mit Fortschreiten der Iteration zu, um schließlich die bei der Planung der
Iteration definierten Ziele zu erreichen. Man könnte einwenden, dass jeder Build an sich eine Miniiteration darstellt.
Der Unterschied besteht jedoch in der erforderlichen Planung und in der Formalität der durchgeführten Bewertung. In
einigen Projekten kann es angemessen und zweckmäßig sein, Builds auf täglicher Basis zu erstellen, aber diese würden
gemäß Definition in RUP keine Iterationen darstellen. Die einzige Ausnahme könnten sehr kleine Ein-Man-Projekte bilden.
Selbst für kleine Projekte, an denen mehrere Personen beteiligt sind (z. B. fünf Personen, die 10.000 Codezeilen
entwickeln), ist es sehr schwierig, eine Iterationsdauer von weniger als einer Woche zu erzielen. Nähere Erläuterungen
finden Sie auf der Seite Richtlinie: Softwareentwicklungsplan.
Traditionell werden Projekte so organisiert, dass sie jede Disziplin nacheinander und nur einmal durchlaufen. Dies
ergibt den Wasserfalllebenszyklus:
Diese Vorgehensweise hat häufig zur Folge, dass sich die Integrationsarbeiten in einem späten Stadium der
Implementierung aufhäufen, wenn der erste Build des Produkts erstellt wird und das Testen beginnt. Probleme, die
während Analyse, Design und Implementierung verborgen blieben, kommen zum Vorschein, und das Projekt tritt auf der
Stelle, weil ein langwieriger Fehlerkorrekturzyklus beginnt.
Eine flexiblere (und weniger riskante) Möglichkeit ist, die verschiedenen Entwicklungsdisziplinen mehrfach zu
durchlaufen, ein besseres Verständnis der Anforderungen aufzubauen, eine stabile Architektur zu entwickeln, die
Entwicklungsorganisation aufzustocken und letztendlich eine Reihe von Implementierungen bereitzustellen, die nach und
nach vollständiger werden. Dies ist ein iterativer Lebenszyklus. Jeder Durchlauf durch die verschiedenen
Prozessdisziplinen ist eine Iteration.
Aus der Entwicklungsperspektive ist der Softwarelebenszyklus eine Abfolge von Iterationen, in denen die Software
inkrementell entwickelt wird. Jede Iteration wird mit dem Release eines ausführbaren Produkts abgeschlossen.
Dieses Produkt ist möglicherweise nur ein Teil der vollständigen Vision, kann aber aus einer bestimmten Engineering-
oder Benutzerperspektive durchaus hilfreich sein. Mit jedem Release gehen unterstützende Arbeitsergebnisse einher:
Release-Beschreibung, Benutzerdokumentation, Pläne usw. sowie aktualisierte Modelle des Systems.
Dieser iterative Ansatz hat im Wesentlichen zur Folge, dass die Arbeitsergebnisse, die zuvor beschrieben wurden, mit der Zeit wachsen und reifen.
Schauen Sie sich dazu das folgende Diagramm an.
Weiterentwicklung des Informationssets in den Entwicklungsphasen.
Untergeordneter Meilenstein
Jede Iteration wird mit einem untergeordneten Meilenstein abgeschlossen, an dem das Ergebnis der Iteration in Relation
zu den objektiven Erfolgskriterien dieser bestimmten Iteration auswertet wird.
|