Die Phasen eines Softwareprojektes

Um bei einer komplexen Aufgabe den Lösungsprozeß systematisch zu gliedern, definiert man in der Systemtechnik Vorgehensmodelle, die die Zerlegung des Prozesses in planbare, überschaubare Abschnitte vorgeben. Wie bei anderen Projekten auch, werden daher Software-Projekte in einzelne Phasen zerlegt. Dann kann schrittweise geplant, durchgeführt, kontrolliert und entschieden werden. Diese Phasen, zusammen mit ihrer zeitlichen Abfolge, nennt man Software-Life-Cycle. Einzelne Phasen können wiederholt ausgeführt werden. In jeder Phase finden die wichtigen Aktivitäten Dokumentation und Qualitätssicherung statt.

Phasenmodelle

Trotz zahlreicher Variationen werden im wesentlichen immer die folgenden Phasen unterscheiden:

  1. Problemanalyse und Planung
  2. Systemspezikation (Anforderungsdefinition)
  3. System- und Komponentenentwurf
  4. Implementierung und Komponententest
  5. Systemtest
  6. Betrieb und Wartung

Für jede der Phasen ist festgelegt, durch welches Ergebnis sie abgeschlossen wird.

Phase Ziele (= Zustand in der Zukunft) Tätigkeiten Ergebnisse
Problemanalyse und Planung
  • Aufgabenbereich festgestellt
    1. auszuführende Tätigkeiten dokumentiert
    2. zu automatisierende Teile identifiziert
  • Ressourcenbedarf geklärt
  • Ist-Zustand erheben
  • Problembereich abgrenzen:
  • geplantes System grob skizzieren
  • Umfang und Wirtschaftlichkeit des Projektes abschätzen
  • Beschreibung des Ist-Zustandes
  • Projektauftrag
  • grober Projektplan
  • Systemspezifikation Vertrag zwischen Auftraggeber und Hersteller geschlossen über Leistungsumfang, Prämissen der Realisierung
  • Pflichtenheft erstellen
  • Projektplan genau festlegen
  • Systemspezifikation validieren
  • Projekt ökonomisch rechtfertigen
  • Pflichtenheft (=Systemspezifikation)
  • genauer Projektplan
  • System- und Komponentenentwurf festgelegt, wie und durch welche Systemkomponenten die Anforderungen der Systemspezifikation erfüllt werden. Systemarchitektur entwerfen:
  • Komponenten definieren
  • Schnittstellen entwerfen
  • Wechselwirkungen festlegen
  • logische Datenmodell festlegen
  • algorithmische Struktur entwerfen
  • Algorithmen und Architektur validieren
  • Beschreibung der Systemarchitektur
  • logisches Datenmodell
  • Algorithmen
  • Dokumentation der Entwurfsentscheidungen
  • Implementierung und Komponententest
  • Entwurfsergebnisse sind auf einem Rechner ausführbar
  • Komponententest bestanden
  • vollständige Verfeinerung der Algorithmen
  • Übertragung in eine Programmiersprache (Codierung)
  • logisches Datenmodell in physisches übertragen
  • Übersetzung, statische Prüfungen
  • Komponenten testen
  • Programmtext der Komponenten
  • Protokolle der Komponententests
  • physisches Datenmodell
  • Systemtest
  • Wechselwirkung der Systemkomponenten unter realen Bedingungen erprobt
  • Systemimplementation und -spezifikation stimmen überein
  • Subsysteme integrieren
  • Installation
  • Abnahmetest durch Benutzer
  • Leistungstests
  • Systemtestprotokoll
  • auslieferbares Endprodukt
  • Betrieb und Wartung störungsfreier Betrieb im Feld
  • im Betrieb entdeckte Fehler beheben
  • Systemänderungen und -erweiterungen vornehmen
  • neue Anforderungen

    Die wesentlichen Phasen des Software-Life-Cycle

    Das klassische sequentielle Software-Life-Cycle-Modell

    In diesem Modell darf mit der nächsten Phase erst begonnen werden, wenn die Ergebnisse der vorhergehenden Phase vollständig vorliegen. Damit einher geht die folgende Vorgehensweise bei der SW-Entwicklung nach dem Prinzip der Topdown-Zerlegung sogenannter "Black Boxes":

    1. Das System wird als schwarzer Kasten betrachtet, dessen Wirkung nach außen genau festgelegt wird, seine innere Struktur wird jedoch offengelassen. Es geht also zunächst nur darum, was das System leisten soll, erst später wird geklärt, wie die Leistung erbracht wird.
    2. Das System wird in Komponenten zerlegt, die wiederum als schwarze Kästen betrachtet werden. Festgelegt wird nur, was diese Komponenten leisten, und wie sie zusammenarbeiten, d.h. ihre Schnittstellen werden vollständig spezifiziert.
    3. Schließlich wird jede einzelne Komponente entworfen realisiert und getestet.
    4. Liegen alle Komponentenrealisierungen vor, werden sie, entsprechend der früher festgelegten Systemzerlegung, zum System integriert.
    Vorteile Nachteile
    Die wichtigsten Tätigkeiten sind definiert und abgegrenzt. Dies erleichtert Planung von Projekten und Kostenschätzungen Die Annahme, der Entwicklungsprozeß könne strikt sequentiell verlaufen, ist falsch. Iterationen zwischen den Phasen sind häufig notwendig. Wie oft, ist selten vorhersehbar.
    Die Vorgehensweise ist unabhängig, von Projektgröße, Komplexität des Produktes und Anwendungsgebiet. Eine Phase erst dann zu beginnen, wenn die vorhergehende vollständig abgeschlossen ist, ist unrealistisch. Phasenergebnissse sind selten auf Anhieb richtig, häufig zeigt sich erst in späteren Phasen die dafür benötigte Information.
    Die Strukturierung des Entwicklungsprozesse fördert eine gute Struktur des Produktes. Die strikte Trennung der Phasen ist unrealistisch, die komplexen Wechselwirkungen zwischen den Phasen führen in der Wirklichkeit zu Überlappungen von Tätigkeiten verschiedener Phasen.
    Die Grundlage für einen arbeitsteiligen Entwicklungsprozeß wird bereitgestellt: unverzichtbar für große Projekte. Produktteile, d.h. "greifbare Ergebnisse" liegen erst sehr spät vor. Änderungswunsche der Benutzer können erst sehr spät geäußert werden.

    Pro und Contra des Life-Cycle-Modells

    Erfahrungen mit den Nachteilen des klassischen sequentiellen Software-Life-Cycle-Modells haben zu zahlreichen Variationen dieses Vorgehensmodells geführt. Zu den wichtigsten gehören:

    Wasserfall-Modell
    Es enthält im wesentlichen zwei Erweiterungen:
    1. Rückkopplungen zwischen aufeinanderfolgenden Phasen werden vorgesehen, besonders um teure Iterationen über mehrere Phasen hinweg zu vermeiden.
    2. die möglichst experimentelle Validierung der Phasenergebnisse wird in den Software-Life-Cycle eingebunden.
    Protyping-orientiertes Life-Cycle-Modell
    Es hält die klassische Phaseneinteilung aufrecht, allerdings mit dem Unterschied, daß die Phasen stark überlappt ablaufen, insbesondere Entwurf, Implementierung und Test stark ineinander verschmelzen. Während beim klassischen Vorgehensmodell so spät wie möglich implementiert wird, nämlich erst dann, wenn alle Einzelheiten des Spezifikations- und Entwurfsprozesses geklärt sind, werden bei dieser Vorhensweise so früh wie möglich Prototypen implementiert mit den folgenden Zielen:
    1. Risikominderung
    2. erfolgreiche Qualitätssicherung in allen Phasen,
    3. Lerneffekte durch Experimente unter realen Bedingungen auszunutzen,
    4. falls möglich, Prototypen evolutionär zum Produkt hin zu entwickeln.

    Zumeist entstehen zwei Arten von Prototypen:

    1. Benutzerschnittstellenprototypen als Grundlage der Diskussion mit dem Anwender, um die Systemspezifikation zu stabilisieren und präzisieren,
    2. Architektur- und Komponentenprototypen, um Entwurfsentscheidungen herbeizuführen und frühestmöglich zu überprüfen.
    Spiral-Modell

    Es versucht, die bisher besprochenen Modelle zu verallgemeinern und enthält sie daher als Spezialfälle. Für ein bestimmtes Projekt ist dann die am besten geeignete Vorgehensweise zu wählen. Der Entwicklungsprozess durchläuft mehrere Ausarbeitungsstufen, die Spiralenzyklen genannt werden. Jeder Zyklus umfasst, für jedes Produktteil und für jede Ausarbeitungsstufe die gleiche Schrittfolge:

    1. Festlegung von Zielen, Lösungsvarianten (make or buy, Wiederverwendung, Nebenbedingungen und Einschränkungen wie Kosten, Termine, ..),
    2. Erarbeitung und Beurteilung von Lösungsvarianten, Risiken erkennen und beseitigen, dabei Einsatz von Prototyping
    3. Entwicklung und Validierung des Produktes der nächsten Stufe
    4. Planung der nächsten Phasen
    Objekt-orientiertes Life-Cycle-Modell
    Es unterscheidet sich in den ersten beiden Phasen, Problemanalyse und Systemspezifikation, überhaupt nicht von den klassischen Vorgehensmodellen. Erst auf spätere Phasen hat der Einsatz objekt-orientierter Techniken, bei denen ja die Implementierung entscheidend durch Zusammenfügen bereits existierender Bausteine geprägt ist, folgende Konsequenzen: