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:
- Problemanalyse und Planung
- Systemspezikation (Anforderungsdefinition)
- System- und Komponentenentwurf
- Implementierung und Komponententest
- Systemtest
- 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
- auszuführende Tätigkeiten dokumentiert
- 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":
- 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.
- 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.
- Schließlich wird jede einzelne Komponente entworfen realisiert
und getestet.
- 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:
- Rückkopplungen zwischen aufeinanderfolgenden Phasen werden vorgesehen,
besonders um teure Iterationen über mehrere Phasen hinweg zu vermeiden.
- 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:
- Risikominderung
- erfolgreiche Qualitätssicherung in allen Phasen,
- Lerneffekte durch Experimente unter realen Bedingungen auszunutzen,
- falls möglich, Prototypen evolutionär zum Produkt hin zu
entwickeln.
Zumeist entstehen zwei Arten von Prototypen:
- Benutzerschnittstellenprototypen als Grundlage der Diskussion mit dem
Anwender, um die Systemspezifikation zu stabilisieren und präzisieren,
- 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:
- Festlegung von Zielen, Lösungsvarianten (make or buy, Wiederverwendung,
Nebenbedingungen und Einschränkungen wie Kosten, Termine, ..),
- Erarbeitung und Beurteilung von Lösungsvarianten, Risiken erkennen
und beseitigen, dabei Einsatz von Prototyping
- Entwicklung und Validierung des Produktes der nächsten Stufe
- 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:
- Entwurf und Implementierung sind nicht mehr streng voneinander getrennt,
da schon beim Entwurf berücksichtigt werden muß, welche Bausteine
aus der Klassenbibliothek für eine Lösung bereit stehen.
- Die Implementierungsphase ist kürzer und liefert daher schneller
Erkenntnisse über die Korrektheit des Entwurfes; dies führt zu
einer engen Rückkoplung beider Phasen.
- Die Klassenbibliothek, aus der die (wieder)verwendeten Bausteine stammen,
muß ständig gewartet und dokumentiert, bei Bedarf sogar erweitert
werden. Dies ist eine völlig neue Aktivität.
- Beim Testen werden nicht nur das anvisierte Produkt, sondern auch die
verwendeten Bausteine geprüft. Festgestellte Mängel an den Bausteinen
müssen genau protokolliert werden. Daraus resultierende Änderungen
müssen zentral in der Klassenbibliothek erfolgen, damit sie sich auf
die Projekte auswirken können, in denen die Bausteine auch verwendet
werden.
- Neu entstandene Bausteine müssen auf allgemeine Verwendbarkeit
geprüft werden. Ist dies der Fall, wird der Baustein in die Klassenbibliothek
aufgenommen, dokumentiert und allen potentiellen Verwendern bekannt und
zugänglich gemacht.