Von problemunabhängigen Datenstrukturen kann keine Programmstruktur abgeleitet werden

Jackson trennt Entwurf und Implementierung

08.05.1981

Die Korrektheit einer Programmstruktur bezüglich ihrer Datenstrukturen kann formal überprüft werden.

Das Ergebnis des Programmschritts wird überprüft, indem gezeigt wird, daß jede Datenstruktur korrekt in der Programmstruktur enthalten ist. Dazu werden pro Datenstruktur folgende Prüfschritte ausgeführt:

1. Streichen allen Textes bis auf die Komponentennamen der betreffenden Datenstruktur.

2. Streichen von leeren Teilbäumen (Ästen).

3. Verbleibender Rest der Programmstruktur muß in jeweilige Datenstruktur überführt werden können oder mit ihr übereinstimmen.

Der Leser führe diese Schritte bei Bild 5 selber durch und überzeuge sich so von der Korrektheit der Programmstruktur.

Wie wird dem Modell (Programmstruktur) eine Funktion zugeordnet ?

Im nun folgenden Anweisungsschrift werden die sogenannten Elementaranweisungen ermittelt und der Programmstruktur zugeordnet.

Elementaranweisungen spezifizieren Teilfunktionen.

Die einzelnen aus Aufgabenstellung und Programmstruktur sich ergebenden Elementaranweisungen werden systematisch ermittelt. Zu diesem Zweck gehen wir von der Ausgabe zur Eingabe vor und überlegen uns dabei, wie die Ausgabedaten aus den Eingabedaten entstehen.

In Bild 6 sind für unser Beispiel bei der Ausgabe beginnend zunächst die Anweisungen zum Eröffnen wild Schließen der beiden Ausgabedateien sowie zum Schreiben der Sätze dieser Dateien aufgeführt. Die Anweisungen 10-14 versehen die Sätze, die in den Anweisungen 3, 4 und 8 geschrieben werden, mit Inhalt. Den Datenfluß im Programm weiter von der Ausgabe zur Eingabe verfolgend, stellen wir fest, daß in den Anweisungen 10 und 11 in der Ausgabe ein Saldofeld gefüllt werden muß, welches nicht unmittelbar aus einem Eingabesatz gewonnen werden kann. Eine Variable "Saldo" muß initialisiert werden (Anweisung 15), und in diese Variable müssen die Mengenfelder der Eingabesätze saldiert werden (Anweisungen 16 und 17).

Sprachenunabhängige Elementaranweisungen

Schließlich enthalten Saldosatz und Saldozeile auch eine Teile-Nr. Diese kann nicht unmittelbar aus einem Eingabesatz übertragen werden, da zu dem Zeitpunkt, wo die betreffenden Ausgaben aufgebaut werden, der nächste Eingabesatz schon die Teile-Nr. der neuen Satzgruppe enthält. Die aktuelle Teile-Nr. wird deshalb in einem Gruppierwort GW zwischengespeichert (Anweisung 18).

Damit sind wir auf unserem Weg von der Ausgabe zur Eingabe beim Eingabedatenstrom angelangt, der eröffnet, gelesen und geschlossen werden muß (Anweisungen 19, 20, 21). Die Elementaranweisungen werden weitgehend programmiersprachenunabhängig formuliert, so daß während des Programmentwurfs noch keine Festlegung auf eine bestimmte Programmiersprache erfolgen muß.

Elementaranweisungen können Bezug auf bottom-up entwickelte, im Rahmen eines Arbeitsgebietes allgemein verwendbare Unterprogramme nehmen.

Bei komplexen Aufgabenstellungen empfiehlt es sich, vorab in einem bottom-up-Ansatz Komponenten zu definieren und zu implementieren, die beim Entwurf nach JSP als Elementaranweisungen dienen können. Eine Elementaranweisung kann dann durch ein Unterprogramm realisiert werden wie etwa "ermitteln Prüfziffer". Ein derartiger Satz von Unterprogrammen nimmt auf ein bestimmtes Arbeitsgebiet Bezug und ist im Rahmen dieses Arbeitsgebietes allgemein verwendbar.

Elementaranweisungen werden der Programmstruktur zugeordnet.

Am Ende des Anweisungsschrittes werden nun Funktion und Modell vereinigt - die Elementaranweisungen werden der Programmstruktur zugeordnet. Die Häufigkeit, mit der jede einzelne Elementaranweisung ausgeführt wird, bietet dabei eine wichtigen Anhaltspunkt.

Dazu prüft man zunächst, auf welche Datenkomponente sich die jeweilige Elementaranweisung bezieht, stellt dann fest, in welcher Programmkomponente diese Datenkomponente konsumiert oder produziert wird, und ordnet abschließend die Elementaranweisung der entsprechenden Programmkomponente zu, indem man die Ordnungsnummer der Anweisung an die Komponente anfügt. Bei diesem letzten Zuordnen ist dann nur noch darauf zu achten, daß die Elementaranweisung mit anderen Teilen der Programmkomponente eine korrekte Reihenfolge (Sequenz) bildet.

Gleichzeitige Entwurfsprüfung

Die hier explizit dargestellten Einzelüberlegungen laufen bei routinemäßiger Anwendung der JSP eher implizit ab, da die Zuordnung der Elementaranweisungen zur Programmstruktur bei einem ansonsten korrekten Entwurf sehr einfach ist. An dieser Stelle wird aber auch gleichzeitig die Korrektheit der bisher ausgeführten Entwurfsschritte geprüft, da Schwierigkeiten bei der Zuordnung einzelner Elementaranweisungen vermuten lassen, daß Modell (Programmstruktur) und Funktion nicht zusammenpassen, also ein Entwurfsfehler vorliegt.

_AU:Wolfgang George ist Gruppenleiter Methodenberatung bei der mbp (Mathematischer Beratungs- und Programmierungsdienst) GmbH, Dortmund.