# Inkrementelles Vorgehensmodell

Das inkrementelle Vorgehensmodell beschreibt ein Vorgehensmodell zur Softwareentwicklung der kontinuierlichen Verbesserung, bei dem häufig in kleinen oder sogar kleinsten Schritten vorgegangen wird. Die agile Softwareentwicklung basiert auf einem inkrementellen Vorgehen, Wikis arbeiten ebenso nach diesem Prinzip.

## Besonderheiten

Bei der inkrementellen Verbesserung steht der Endzustand in der Regel nicht fest. Das Projekt wächst organisch.

## Inkrementelles Vorgehensmodell in der Softwareentwicklung

Iterative und inkrementelle Entwicklung ist ein zyklischer Software-Entwicklungsprozess, der inzwischen auch in anderen Projektbereichen erfolgreich eingesetzt wird. Der Begriff „iterative Entwicklung“ wird meistens mit Referenz auf den kombinierten Ansatz verwendet.

### Definition von Inkrementell und Iterativ

Inkrementelle Entwicklung ist eine Strategie zur Termin- und Ablaufplanung, in der die verschiedenen Teile des Systems zu unterschiedlichen Zeiten und mit verschiedenen Geschwindigkeiten entwickelt und umgehend im Gesamtsystem integriert werden. Das Gegenbild ist eine gleichzeitige Integration aller Teilsysteme zum Abschluss des Projekts (Big-Bang-Integration).
Iterative Entwicklung ist eine Strategie zur Überarbeitungsplanung, die Zeit für laufende Revision und Verbesserung der Teile des Systems vorsieht. Sie setzt eine inkrementelle Entwicklung nicht voraus, passt aber sehr gut zu ihr. Ein Unterschied ist, dass das Ergebnis eines inkrementellen Arbeitsschritts nicht notwendigerweise Gegenstand weiterer Überarbeitung ist, noch dienen Ergebnisse aus Tests und Benutzerreaktionen als Vorgabe für nachfolgende Arbeitsschritte. Das Ergebnis einer Iteration hingegen wird auf notwendige Änderungen untersucht, vor allem hinsichtlich einer Anpassung der Ziele späterer Iterationen.
Der Grundgedanke hinter iterativer Überarbeitung ist es, ein Softwaresystem dergestalt schrittweise zu entwickeln, dass das Projektteam in die Lage versetzt wird, Erfahrungen aus vorangegangenen Entwicklungsschritten unmittelbar zu nutzen. Erfahrungen werden gezielt sowohl während der Entwicklung als auch aus der Verwendung des bereits abgeschlossenen Teils des Systems gewonnen.
Die wesentlichen Schritte im Prozess sind
* mit einer einfachen und ausbaufähigen Implementierung einer definierten Untermenge der zu diesem Zeitpunkt bekannten Systemanforderungen anzufangen.
* schrittweise mit zunehmender Kenntnis der sinnvollen Systemanforderungen die sich entwickelnden Versionen bis zur vollständigen Implementierung des Systems auszubauen
* bei jeder Iteration den Entwurf anzupassen – wobei hier zwischen Iterationen zur Implementierung neuer Funktionen und Iterationen zur Verbesserung der Systemarchitektur (Refactoring) zu unterscheiden ist
Die Prozedur selbst besteht aus einem Initialisierungsschritt, einem Iterationsschritt, und der Projektkontrollliste.
* Der Initialisierungsschritt schafft eine Basisversion des Systems mit dem Ziel, ein Produkt zu schaffen, auf das der Benutzer reagieren kann. Es sollte eine Stichprobe wesentlicher Gesichtspunkte des Problems abdecken und eine Lösung bieten, die leicht verstanden und umgesetzt werden kann.
* Für die Steuerung des Iterationsprozesses wird eine Projektkontrollliste geführt, in der alle bekannten ausstehenden Aufgaben aufgezeichnet werden. Sie beinhaltet Posten wie z. B. die Implementation neuer Features und den Neuentwurf bestehender Systemteile. Die Kontrollliste wird anhand der Ergebnisse der Analysephasen ständig überarbeitet.
* Jede Iteration beinhaltet die Umsetzung eines Postens oder einer definierten Gruppe von Posten aus der Projektkontrollliste und die Analyse der aktuellen Version des Systems. Bei der Umsetzung jedes Iterationsschritts ist das Ziel Einfachheit, Überschaubarkeit und Modularität, ob unmittelbar oder als Posten auf der Kontrollliste. Die Analyse einer Iteration beruht auf Benutzerfeedback und Programmanalyseverfahren. Sie untersucht die Struktur, Modularität, Benutzbarkeit, Zuverlässigkeit, Wirksamkeit und Zielerreichung. Anhand der Ergebnisse wird die Projektkontrollliste angepasst.

### Phasen – Richtlinien für die Zeitplanung

Zum Verständnis des Diagramms ist es sehr wichtig zu berücksichtigen, dass die Phasenaufteilung informell betrachtet werden muss. Teile des Systems werden umgehend im Gesamtsystem integriert (ein Deployment findet in jeder Iteration statt). Die Übergangsphase (Transition) überführt das System endgültig in den Produktiveinsatz. Der schräge Pfeil stellt die sequentielle Abarbeitung der Schritte dar und verdeutlicht, dass Architekten und Analysten im Verhältnis zu den Entwicklern immer einen Schritt voraus arbeiten.
Iterative Entwicklung teilt den Geschäftswert, also die Systemfunktionalität, in Iterationen ein. Bei jeder Iteration wird ein Teilabschnitt der Systemfunktionalität durch interdisziplinäre Arbeit fertiggestellt – beginnend mit dem Entwurf/Anforderungen bis hin zum Testen und der Inbetriebnahme. Der vereinheitlichte Prozess gruppiert die Iterationen in Phasen: Einleitung, Ausarbeitung, Konstruktion und Übergang. Diese Phasen sind informell anzusehen.
* Die Einleitungsphase ermittelt Projektrahmen, Risikofaktoren und (funktionelle wie nicht-funktionelle) Anforderungen in geringer aber ausreichender Tiefe, um eine grobe Schätzung des Arbeitsaufwandes zu erlauben.
* Die Ausarbeitungsphase liefert eine funktionsfähige Architektur, die die höchsten Risikofaktoren entschärft und die nicht-funktionellen Anforderungen erfüllt.
* Die Konstruktionsphase füllt die Architektur schrittweise mit produktionsreifem Code aus, der durch Analyse, Entwurf, Umsetzung und Prüfung der funktionellen Anforderungen entsteht.
* Die Übergangsphase überführt das System endgültig in den Produktiveinsatz.
Jede dieser Phasen kann auf eine oder mehrere Iterationen aufgeteilt sein, die meistens eher zeitlich und nicht durch die Umsetzung von Funktionsmerkmalen abgegrenzt sind. Architekten und Analysten arbeiten im Verhältnis zu den Entwicklern immer einen Schritt voraus.
Ein iteratives Vorgehensmodell zur inkrementellen Verbesserung wird durch die Vorgehensweise beim Spiralmodell beschrieben.