Software-Werkzeuge der strukturierten Programmierung, Teil I

Entwicklungshilfe auch für DV-Manager

18.09.1981

"Die gängigen Programmiersprachen", konstatieren Achim von Spülnagel und Wolfgang Zinke

in der folgenden vierteiligen CW-Serie, "unterstützten die strukturierte Programmierung nicht oder nur teilweise." .Folgerichtig stellen sie bei ihrem Werkzeug "Sindus" (Structure Interpretation and Display Utility System) eine Eigenschaft heraus, die das Entwicklerherz erfreut: Sindus ermögliche, so die Autoren, die am weitesten verbreiteten Programmiersprachen zu verwenden und dennoch wohlstrukturierte Programme zu schreiben . Hier Teil I der CW-Serie "Software-Werkzeuge der strukturierten Programmierung ".

1.Ziele der strukturierten Programmierung

Der von Dijkstra geprägte Begriff der strukturierten Programmierung beschreibt eine Vorgehensweise, die den gesamten Programmierungsprozess überschaubar und die entsprechenden Programme verständlich und wartungsfreundlich macht. Bei konsequenter Anwendung dieser Methode von der Entwurfs- bis zur Testphase wird die Produktion von Programmsystemen rationalisiert und gleichzeitig die Zuverlässigkeit der Produkte erhöht

Im engeren Sinne verlangt strukturierte Programmierung die hierarchische Modularisierung eines Systems in überschaubare Einheiten, die jeweils eine definierte Funktion realisieren, und eine übersichtliche Darstellung des Daten- und Kontrollflusses. Werkzeuge, die den Systementwickler dabei unterstützen, sind etwa höhere Programmiersprachen, Petri-Netze , Aufrufgraphen oder Strukturdiagramme. Mit ihnen werden durch Automatisierung gleichzeitig normierte Unterlagen geschaffen, die von allen Projektbeteiligten leicht verstanden werden können.

Ein Hauptanliegen beim Einsatz solcher Werkzeuge in der Software-Entwicklung ist es, Qualitätsnormen für die Produkte zu erfüllen und die Kosten für Entwicklung und Wartung kontrollierbar zu halten. Sie sollen helfen, die folgenden Management-Ziele zu erreichen :

- Zwang zu Disziplin und Kooperation beim Programmierer ,

- Gewehrleistung einer einheitlichen Vorgehensweise ,

- Sicherung der Qualität eines Systems weitgehend unabhängig von der Qualifikation einzelner Mittarbeiter,

- einfache Nachprüfbarkeit des Funktionumfangs der Programme ,

- Rationalisierung des Programmierungsprozesses ,

- Verbesserung der Testbarkeit , Wartbarkeit und Wiederverwendbarkeit von Programmen,

- Verbesserung der Planbarkeit von Terminen .

Im folgenden wird als Beispiel ein System von Werkzeugen beschrieben , das ohne eine große Umstellung in praktisch allen Anwendungsgebieten einsetzbar ist und die meisten der genannten Aufforderungen erfüllt: Sindus (Structure Interpretation and Display Utility System ).

Das System besteht aus:

- einem Generator für Strukturdiagramme (Struktogramme) in Form gedruckter Listen,

- Vorübersetzen von gängige Programmiersprachen und

- einem bildschirmorientierten Editor ,der Spezialfunktionen für das Arbeiten mit Struktogrammen und strukturiert geschriebenen Programmen im Dialog besitzt.

Es ist ablauffähig unter IBM- und Siemens-Betriebssystemen in der jeweiligen gewohnten Programmierumgebung. Neben dem eigenen Editor können auch die in diesen Betriebssystemen vorhandenen Editoren für die Textbearbeitung eingesetzt werden. Beispiele: CMS oder TSO.

2. Konstruktionen der Strukturierten Programmierung:

Ein wesentliches Konzept der strukturierten Programmierung ist die Verwenden von wenigen grundlegenden , standardisierten Konstruktionen zur Steuerung des Kontrollflusses. Die in diesem Zusammenhang üblicherweise genannten Konstruktionen sind

- der Block, insbesondere die Prozedur,

- die Verzweigung,

- die Schleife.

2.1 Block

Unter einem Block wird eine Folge von Anweisungen verstanden, die in einem engeren inhaltlichen Zusammenhang stehen .Gekennzeichnet wird er zum Beispiel durch eine Klammerung mit begin und bend.

2.2 Prozedur

Eine Prozedur ist zunächst einmal einfach ein benannter Block, dessen Anweisungen aber an beliebigen Programmstellen aufgerufen werden können. Das Prozedur-Konzept beinhaltet darüber hinaus die Möglichkeit, Schnittstellen zur aufrufenden Umgebung formal zu definieren , über Ein- und Ausgabeparameter.

Der Prozedur-Name, Parameter, und weitere Angaben, die die Schnittstelle zur Aufrufstelle betreffen, werden im Prozedur-Kopf aufgeführt (enter...).Der Prozedur-Rumpf enthält die ausführbaren Anweisungen und wird beispielsweise durch end abgeschlossen. An bestimmten gekennzeichneten Stellen (exit )kann dynamisch aus einem Prozedur-Rumpf unmittelbar hinter die Aufrufstelle zurückgekehrt werden.

2.3 Verzweigung

Neben der bekannten bedingten Verzweigung mit if ... then ... else.. hat sich auch die Fallunterscheidung mit case... als nützliche Strukturierungshilfe erwiesen. Eine unbedingte Verzweigung (goto) wird dagegen abgelehnt. Während bei der bedingten Verzweigung ein Boolescher Ausdruck entscheidend dafür ist, welche Alternative ausgeführt werden soll , kann bei der Fallunterscheidung aus einer im Prinzip beliebig langer Folge ein bestimmter Block ausgwählt werden.

2.4 Schleife

Die in verschiedenen Programmiersprachen realisierten Schleifentypen unterscheiden wir hauptsächlich, an welcher Stelle die Endebedingungen abgeprüft werden: Am Anfang des Schleifenrumpfes (while) , am Ende (repeat ) oder an beliebigen Stellen innerhalb des Rumpfes (cycle).Neben der Formulierung der Endebedingungen als Booleschen Ausdruck, gibt es auch hier meist die komfortablere Form mit einer Laufvariablen , die gemäß einer Laufanweisung fortgeschaltet und abgeprüft wird.