Dr. Christian Maurer, FU Berlin

Das Softwarepraktikum als Lehrprojekt

Das Softwarepraktikum dient dem Erwerb grundlegender Techniken der systematischen Erstellung komplexerer Software. Dabei steht zunächst die Beschäftigung mit ausgewählten Teilen eines vorliegenden Softwaresystems mit dem Ziel der Sensibilisierung für typische Probleme der Softwaretechnik im Vordergrund. Es schließt sich wahlweise die Planung von Grundzügen eines neuen Systems oder einer Erweiterung des vorgelegten Systems an, auf deren Basis bestimmte Teile der Planung realisiert werden. Leitidee ist dabei, daß sich die Konstruktionen maßgeblich auf die systematische Entwicklung abstrakter Datentypen und Datenobjekte stützen, wie sie den Kern des Grundstudiums im dritten Semester darstellen.

Der Softwarelebenszyklus

Am Anfang steht die Einführung in den Kern aller Phasenmodelle der Softwareentwicklung:
  1. Systemanalyse,
  2. Anforderungsdefinition,
  3. Spezifikation und
  4. Implementierung.
Das übergeordnete Lernziel ist die Einsicht, daß die Wartungsfreundlichkeit auch vergleichsweise bescheidener Systeme ganz entscheidend durch Prinzipien der Planung und des Entwurfs und deren Einhaltung bei der Realisierung bestimmt wird. Dies sind
  1. die hinreichend genaue Auseinandersetzung mit der Aufgabenstellung und deren sachlichem Hintergrund,
  2. eine vollständige und widerspruchsfreie Festlegung des Außenverhaltens des Systems,
  3. eine geeignete Zerlegung in weitestgehend unabhängige Teile und eine exakte Beschreibung der so entstandenen Komponenten und ihrer wechselseitigen Abhängigkeiten,
  4. eine elegante und nachvollziehbare Konstruktion der Komponenten unter Einsatz einer geeigneten Programmiersprache.
Im Zentrum steht dabei die Erkenntnis, daß aus mangelnder Rücksicht auf diese Prinzipien fehlerträchtige, unbeherrschbare und risikoreiche Software resultiert, deren grundsätzlich nicht sichergestellt werden kann und Die häufigste Fehlerquelle beruht auf Mängeln in der Dokumentation der Arbeitsergebnisse der einzelnen Phasen (Unvollständigkeiten und Widersprüchlichkeiten), die Mißverständnisse oder fehlerhafte Interpretationen jeweils beim Übergang von einer Phase zur nächsten zur Folge haben und damit zu schwerwiegenden Entwurfs- und Konstruktionsfehlern führen können.

Sie lassen sich durch die folgenden Beispiele treffend charakterisieren:

© unbekannter Zeichner - vermutlich aus den USA,
der sich hoffentlich auf diesem Wege der elektronischen Veröffentlichung endlich aufspüren läßt -
(Für Hinweise per E-Mail wäre ich sehr dankbar.)

Durch diese Bemerkungen sind einige Forderungen an Softwaresysteme skizziert, die in der "Softwarekrise" vor knapp drei Jahrzehnten artikuliert wurden und die dazu geführt haben, daß die Softwaretechnik eine eigenständige Disziplin der Informatik wurde. In der praktischen Arbeit lassen sich die einzelnen Phasen des Softwarelebenszyklus nicht beliebig scharf voneinander abgrenzen; in jeder Phase können sich Unvollständigkeiten oder Inkonsistenzen mit den Arbeitsergebnissen vorheriger Phasen herausstellen, die deren Modifikation oder Erweiterung erzwingen (Jedes Modell des Softwarelebenszyklus geht letztlich von einem verhältnismäßig starren Phasenkonzept aus und wird dem dialektischen Wechselspiel der Phasen untereinander nicht genügend gerecht.)

Insbesondere ist die Revision eines Systems nicht von der Veränderung oder Erweiterung der Aufgabenstellung zu trennen, die Anlaß zu einer vertieften Systemanalyse gibt; ein erneuter Einstieg in den Softwarelebenszyklus mit dem Ziel der Produktion eines im Leistungsumfang erweiterten Systems ist die Folge. Das genannte Kernmodell ist auch auf die Erstellung von Prototypen anwendbar, wobei Software unter mehrfachem, sich teilweise überschneidendem Phasendurchlauf systematisch entwickelt wird.

Projektarbeit

Im Hinblick auf den verfügbaren Zeitrahmen ist nicht beabsichtigt, formale Anforderungs- oder Spezifikationssprachen zu benutzen, die über die bisher erlernten Methoden der Spezifikation abstrakter Datentypen (etwa mittels funktionaler Programmierung) hinausgehen oder CASE-(Computer Aided Software Engineering-)Werkzeuge einzusetzen. Die Teilnehmer lernen informell Sie lernen die Bedeutung der projektbegleitenden Dokumentation in allen vier Phasen kennen, deren Unvollständigkeit zwangsläufig Probleme in späteren Phasen aufwirft. Sie gewinnen Einsicht in die Risiken komplexer Softwaresysteme mit der ihnen innewohnenden Instabilität gegen kleine Änderungen. Am Beispiel des bearbeiteten Projektes untersuchen sie die Wirkungen gezielter Veränderungen, wodurch sie Maßstäbe zur Beurteilung der Entwicklung von Software danach entwickeln, ob sie eine adäquate Invarianz gegen definierte Änderungen aufweist. Nebenbei werden sie für die Gefahren blinden Vertrauens in größere technische Systeme sensibilisiert, die auf von Menschen (sic!) geschriebenen (Programm-) Texten beruhen. Sie nehmen Verbesserungen und Erweiterungen im Sinne eines erneuten Durchlaufens des Softwarelebenszyklus vor. Damit werden sie in die Lage versetzt, Aufgabenstellungen einzugrenzen, den Aufwand bei der Bearbeitung der einzelnen Projektphasen abzuschätzen und sie zeitgerecht planen und durchführen zu können.

Situation eines Lehrprojektes

Die Teilnehmer beobachten gruppendynamische Prozesse, die sich aus den Widersprüchen zwischen der Verfolgung von Eigeninteressen und dem Zwang zur Realisierung eines gemeinsamen Zieles ergeben. Sie reflektieren während ihrer Arbeit ihre mitunter problematische Mehrfachrolle als Abgesehen davon gibt es grundsätzliche Unterschiede zwischen der kommerziellen Erstellung von Software und einem Lehrprojekt, die im wesentlichen darin bestehen, daß Für die Projektleitung ergeben sich daraus folgende (bewußt pointiert formulierte) Thesen, deren weitgehende Beherzigung auch für den späteren Schulunterricht empfohlen werden kann: Anhand der Erfahrungen aus dem Softwarepraktikum, insbesondere der Einsicht in die meist um Größenordnungen unterschätzte Komplexität am Anfang der Festlegung der Aufgabenstellung ist es für die Teilnehmer möglich, Themenstellungen oder Bereiche dahingehend abzuschätzen, ob sie sich für Projekte an der Schule eignen. Dabei beachten sie das Spannungsfeld zwischen

Literatur:

Balzert, H.:
Lehrbuch der Software-Technik (2 Bände), Spektrum Akademischer Verlag (1996)
Denert, E.:
Software Engineering, Springer-Verlag (1991)
Kimm, R.:, Koch, W.:, Simonsmeier, W.:, Tontsch, F.:
Einführung in Software Engineering, de Gruyter (1979)
Löhr, K.-P.:
SOFTWARE-Bausteine: Wiederverwendbare Komponenten vereinfachen die Programmentwicklung, LOGIN 9, Heft 6 (1989), 15-21
Meyer, B.:
Object-oriented Software Construction (2nd Edition), Prentice Hall (1997)
Nagl, M.:
Softwaretechnik - Methodisches Programmieren im Großen, Springer (1990)
Nievergelt, J., Ventura, A.:
Die Gestaltung interaktiver Programme, Teubner (1983)
Parnas, D. L.:
On the Criteria To Be Used in Decomposing Systems into Modules, Comm. ACM 15 (1972), 1053-1058
Pagel, B.-U., Six, H.-W.:
Software Engineering, Addison-Wesley (1994)
Pomberger, G.:
Softwaretechnik und Modula-2, Hanser Verlag (1984)
Sommerville, I.:
Software Engineering (Fifth Edition), Addison-Wesley (1996)
weitergehende Hinweise:
Literaturliste von Prof. Dr. K.-P. Löhr zur Vorlesung Softwaretechnik

Christian Maurer, 20.5.1999