Phasenablaufmodelle
für die Software-Entwicklung
(Software-Engineering)
Was ist Software-Engineering ?
Kurz gefaßt könnte man Software-Engineering als die organisierte, methodische Erstellung eines größeren Softwareprojektes bezeichnen.
Die Software-Krise
Die Software Industrie mußte relativ rasch feststellen, daß es kaum möglich war, die Bedürfnisse der Kunden zufriedenzustellen, ohne die althergebrachte Arbeitsweisen zu überdenken. Die Problematik war so offensichtlich, daß Fachleute in den späten 60er Jahren von einer Software-Krise sprechen.
Die Erstellung eines in Auftrag gegebenen Software Systems, die sowieso im Vergleich zu den Kosten der Hardware immer teurer geworden war, überschritt sowohl die Dauer als auch den Preis betreffend die vereinbarten Rahmenbedingungen oder aber konnte qualitätsmäßig nicht zufriedenstellen.
Oft mußten angesetzte Aufträge wieder abgesagt werden, weil der Kunde die bestellte "Ware" nicht mehr bezahlen konnte oder wollte. Auf der anderen Seite aber wollten die hochqualifizierten Programmierer für ihre Arbeit auch angemessen bezahlt werden. Die damaligen Großkunden der Softwareindustrie initiierten daraufhin eigens zum Besprechen eines Ausweges Konferenzen mit den Fachleuten auf Anbieterseite.
In dieser Zeit kommt die Bezeichnung Software-Engineering zum erstenmal in Gebrauch. Man hatte erkannt, daß Hauptursache der Krise die Schwerfälligkeit der damaligen Arbeitsweise bezüglich geringfügiger Änderungen der Software war.
Schon lange konnte kein Programm oder gar System aus mehreren Programmen oder Komponenten mehr von einer Person alleine programmiert werden. Nicht nur die Änderung der Anforderungen an ein Programm, nachdem es bereits fertiggestellt war, sondern auch die nachträgliche Behebung von Fehlfunktionen konnte kaum von den ursprünglichen Programmierern ausgeführt werden. Dokumentation war möglicherweise ausreichend erstellt, um den Anwender zufriedenzustellen, die Wartbarkeit litt aber oft unter unzureichender Weitsicht beim Entwurf und die ursprünglichen Gedanken der Programmierer waren dem Wartungspersonal oft nicht mehr zugänglich. Vor allem aber war die Vorgehensweise beim Entwurf größerer Softwaresyteme sehr wenig tolerant gegenüber Fehlplanung.
Das Wasserfallmodell
Die als Wasserfallmodell bekanntgewordene Vorgehensweise kann als erste Systematisierung der für jeden Konstruktionsprozeß typischen Phasen des Entwurfes, usw. im Software Engineering angesehen werden
Im Sinne der Zerlegung einer großen Aufgabe in mehrere kleine Aufgaben versucht man in jeder der einzelnen Phasen ein Teilprodukt zu erstellen, und auch ausreichend zu dokumentieren, so daß es der nächsten Phase zur Weiterbearbeitung übergeben werden kann. Offensichtlich kann und sollte man jede einzelne Phase noch einmal in Planung, Realisierung und Überprüfung zergliedern, um die Korrektheit des Teilproduktes jeder einzelnen Phase sicherzustellen. Das Ziel war es, Rückwirkungen der Erkenntnisse einer Phase auf vorherige Phasen möglichst auszuschließen.
Aus der Erfahrung wußte man, daß jede Fehlplanung in einer der verschiedenen Phasen um so aufwendiger beziehungsweise kostenintensiver zu beheben war, je weiter man innerhalb der Phasen schon fortgeschritten, war bevor der Fehler erkannt wurde. Deshalb mußte eben besonders auf Konsistenz und Eindeutigkeit jedes Zwischenproduktes geachtet werden. Hier wird auch die Notwendigkeit deutlich, geeignete Methoden, Notationen u.ä. zu finden, auf die sich die beteiligten Personen einigen konnten, um eine ordentliche Kommunikation zwischen den einzelnen Arbeitsschritten zu gewährleisten.
Obwohl gerade mit dem Ziel entworfen, unter den einzelnen Phasen möglichst korrekte Zwischenergebnisse auszutauschen, konnte das Wasserfallmodell die Probleme die sich ergaben, wenn trotz größter Sorgfalt Fehlplanungen in einer frühen Phase offenbar wurden, natürlich überhaupt nicht mindern.
Das Spiralmodell
Das nun angestrebte Verfahren, die notwendigen Phasen des Entwurfes, usw. möglichst durchgängig oder wiederholbar zu gestalten, wird allgemein als Spiralmodell idealisiert.
Man versucht im Prinzip die gleichen Tätigkeiten (Entwurf,..) auf verschiedene Entwicklungsstufen eines Projektes wiederholt anwenden zu können, und so nach und nach die vollständige Funktionalität zu realisieren. Außerdem kann in jedem erneuten Durchlaufen eines Zyklus ein anderes Teilgebiet des Projektes gezielt angesprochen werden, wenn dort in einer vorhergehenden Phase Mängel entdeckt worden sind. Hier kann ein unvollständiger Prototyp des Systems erstellt werden, an dem der Kunde prüfen kann, ob das Produkt den Wünschen entspricht. Das entspricht grundsätzlich einem mehrfachen Durchlaufen des Wasserfallmodells, nur daß hier explizit gewünscht ist, bei jedem Durchlauf der "Spirale" ein Modell zu erstellen oder zu verfeinern, welches von jeder der anderen Phasen weiter bearbeitet werden kann.