FH München, FB 07 Informatik/Mathematik
Inhaltsverzeichnis dieser Seite:
Die Konsequenz: Es lohnt sich viel mehr Aufwand in die frühen Phasen zu stecken, als in die späteren Phasen;
Dieses ordnet die oben beschriebenen Phasen linear an: Jede Phase mündet in ein Zwischen- oder Endprodukt, das (zeitlich) anschließend von der nachfolgenden Phase aufgegriffen wird;
Es gibt keinen Rückweg! Das hat z.B. die Konsequenz, daß der Entwurf komplett abgeschlossen werden muß, bevor mit der Implementierung begonnen werden kann.
Dieses Wasserfallmodell hat sich bald als unrealistisch entpuppt,
wird aber oft noch weiterhin propagiert,
weil es sich vordergründig leicht verwalten und planen läßt.
Im Spiralmodell folgen die Phasen nicht linear aufeinander, sondern wiederholen sie mehrfach reihum. Mit jedem Umlauf nähert man sich näher dem angestrebten Endprodukt an, bis letztendlich der Aufwand für die nächste Runde den zu erwartenden Fortschritt überwiegt.
Das Unangenehme am Spiralmodell ist die kaum vorhersagbare Anzahl Umläufe
bis zur ausreichenden Nähe zum Idealprodukt.
Die Resultate der Problemeanalyse werden in einer Problembeschreibung gesammelt. Diese Problembeschreibung kann z.B. in Form eines "Pflichtenheftes" schriftlich niedergelegt werden. Beim Fixieren der Problembeschreibung muß darauf geachtet werden, daß keine stillschweigenden Annahmen gemacht werden oder scheinbare Selbstverständlichkeiten als beschlossen angenommen werden.
Ein allgemeines Rezept zur Abwicklung der Problemanalyse läßt sich nicht angeben. Die Art des Problems hat zu großen Einfluß auf die notwendigen Gewichte. Interaktive Probleme können z.B. einigermaßen erschöpfend in sogenannten "Szenarios" beschrieben werden, in denen typische oder kritische Abläufe als Sequenz von Dialog-Schnappschüssen vorgegeben werden. Für andere Problemstellungen, wie z.B. Systemsoftware, ist eine derartige Dialogbeschreibung weitgehend uninteressant.
In der Problemanalyse soll noch alle Alternativen bezüglich des weiteren Vorgehens offen lassen. Es werden lediglich die Fazetten des Problems untersucht, gesammelt und festgehalten. Ziel ist eine Bestandsaufnahme.
Natürlich wird ein Entwurf schon mit Blick auf die nachher bei der Implementierung verfügbaren Möglichkeiten durchgeführt werden. Es hat nicht viel Sinn, Strukturen zu entwerfen, die nachher mit den verfügbaren Programmiersprachen und Systemmerkmale überhaupt nicht umgesetzt werden können.
Entwürfe haben Probleme mit Anforderungen, die nicht die Logik des Produktes betreffen. Ein Beispiel sind zeitliche Aspekte, wie etwa geforderte maximale Anwortzeiten im Dialog. Ein anderes Beispiel sind ergonomische Aspekte, die die leichte Bedienbarkeit betreffen. Derartige Randbedingungen sind nur mit sehr viel Erfahrung im Entwurf einzuhalten. In der Praxis läßt sich ein gewisses Maß an Experimentieren nicht umgehen. Dabei haben Methoden wie das "Rapid prototyping" Erfolg, bei denen Teile des Endproduktes schon frühzeitig bis zur Ausführbarkeit fortentwickelt werden, um erste Abschätzungen über das spätere Verhalten zu gewinnen.
Die Implementierungphase erfordert weit mehr als bloß Kenntnisse der Syntax und Semantik einer Programmiersprache. Ganz ähnlich wie in natürlichen Sprachen lebt jede Programmiersprache von einem Schatz an Idiomen, d.h. Redewendungen, Ausdrucksweisen, stilistischen Regeln. Bezogen auf Programmiersprachen beschreiben Idiome funktionierende und bewährte Muster, nach denen sich Teilaufgaben lösen lassen. Im Gegensatz zu Syntax und Semantik sind Idiome kaum irgendwo ausdrücklich beschrieben, sondern werden von jedem Benutzer einer Programmiersprache im Laufe der Zeit durch Erfolge und Fehlschläge selbst zusammengetragen. Dieser Lernprozeß durch praktische Erfahrungen ist sehr mühsam, zeitraubend und kostspielig. In neuerer Zeit werden deshalb Ansätze unternommen, Programmieren von der syntaktischen und semantischen Ebene auf die höhere Ebene der Idiome zu verlagern. In diesem Gebiet findet gegenwärtig rege Forschungstätigkeit statt.
Endprodukt der Implementierungphase ist ein ausführbares Programm, das meist einige wenige grundlegende Tests bestanden hat.
Systematische Tests lassen sich grob in "black box tests" und "white box tests" einteilen.
Tests sollten ausführlich samt den Ergebnissen dokumentiert werden, so daß bei Korrekturen, Modifikationen oder Erweiterungen ein Vergleich gezogen werden kann. Im einfachsten Fall können Testeingaben sowie gelieferte Ausgaben in den Quelltext selbst in Form von Kommentaren eingebaut werden. Eine andere Möglichkeit wäre das Programm um zusätzlichen Testcode zu erweitern, der mit einfachen Mitteln ein- oder ausgeblendet werden kann (z.B. bedingte Übersetzung mit Compilerschaltern). Ein und derselbe Code kann dann mit wenig Aufwand zum Selbsttest oder zum Einbau in das Gesamtprodukt verwendet werden.
Für größere Softwareprodukte, wie Compiler und Datenbanken, gibt es unabhängige Testsuites bzw. Institutionen, die auf kommerzieller Basis testen. So können z.B. neue C-Compiler einer Validierung unterzogen werden, die ihre Kompatibiltät mit dem ANSI-C-Sprachstandard überprüft. Nach einiger Zeit und einigen Kosten darf der Hersteller den Compiler als "ANSI-C-Compiler" bezeichnen.
Diese Vorstellung ist natürlich illusorisch. Software (insbesondere Systemsoftware) lebt i.d.R. viel länger als ursprünglich geplant. Mit Sicherheit übersteigt die Lebensdauer von Programmen die von Prozessoren.
Anpassungsarbeiten an neue Umgebungen (Hardware und andere Software) ist nicht vermeidlich und sollte als Kostenfaktor von vorne herein eingeplant werden.
Letzte Änderung: Thu Sep 26 13:58:29 1996