Software-Werkzeuge der strukturierten Programmierung, letzter Teil:

Entwicklungshilfen auch für DV-Manager

09.10.1981

6. Einsatzmöglichkeiten

6.1 Entwurf

Die hier vorgestellten Software-Entwicklungswerkzeuge dienen nicht nur dem Programmierer. Sie leisten in allen Phasen der Systementwicklung wertvolle Dienste. Ein System kann mit ihnen in allen seinen Entstehungsphasen beschrieben werden, ohne daß eine einzige Zeile Programmcode geschrieben ist.

Gerade auf der Suche nach dem Aufbau eines komplexen Systems, bei der funktionalen Planung, sind Werkzeuge für die strukturierte Programmierung hilfreich: Sie unterstützen die Systementwicklung in Stufen (den Top-down-approach). Mit ihnen kann man schrittweise Funktionen definieren und sie von innen und außen beschreiben. Abläufe können mit allen ihren Entscheidungen in natürlicher Sprache formuliert werden. Gibt es etwas zu ändern - und das ist gerade in der Planungsphase oft der Fall -, so kommt man auf einfache Weise zu stets aktuellen, gedruckten Ablaufplanen. Der Entwickler braucht sich dabei nicht mit Darstellungsproblemen, etwa dem Unterbringen von Text in Spalten oder dem Ausrechnen von Blockbreiten und -höhen, zu befassen: Das wird ihm vom System abgenommen.

Die Funktionen eines Systems werden als Prozeduren formuliert. Die strukturierte Programmierung begünstigt die Definition klarer Schnittstellen zwischen den Funktionen. Ein hierarchischer Systemaufbau ergibt sich von selbst.

6.2 Programmierung

Die Methode der strukturierten Programmierung ist universell einsetzbar und nicht wie die normierte Programmierung und die Entscheidungstabellentechnik auf die Anwendung in bestimmten Einzefällen beschränkt.

Die gängigen Programmiersprachen - Cobol, Fortran, PL/1, Assembler - unterstützen die strukturierte Programmierung nicht oder nur teilweise. In vielen Sprachen geht es nicht ohne GO TO oder ähnliches. Die hier präsentierte Lösung ermöglicht es, die weitestverbreiteten Sprachen zu verwenden und dennoch wohlstrukturierte Programme zu schreiben. Das Programm wird im Code der gewünschten Sprache geschrieben, die Steueranweisungen aber mit den Befehlswörtern, die von der strukturierten Programmierung gefordert sind. Die Vorübersetzer erzeugen daraus kompilierfähigen Zielcode. Darüber hinaus kann man aus der gleichen Eingabe auch ein jederzeit aktuelles, gefälliges, leicht lesbares, übersichtliches Struktogramm erzeugen.

Beim Programmieren kommen zwei weitere Eigenschaften der vorgestellten Vorübersetzer zum Tragen:

Einmal ist es die Abwesenheit von Sprungmarken (Labels) im Programmcode. Die strukturierte Programmierung zeichnet sich ja gerade dadurch aus, daß sie keine Sprunganweisungen und damit auch keine Sprungmarken erfordert. Erst wenn ein Vorübersetzer den Zielcode erstellt, werden Sprungmarken hinzugeneriert, die aber nur für den Compiler von Bedeutung sind. Man gewinnt so einen erheblichen Wartungsvorteil: Bei späteren Programmänderungen braucht auf Sprungmarken keine Rücksicht genommen zu werden.

Die zweite nützliche Eigenschaft zeigt sich vor allem dort, wo das Programm in direkter Kommunikation mit dem Rechner interaktiv über ein Terminal eingegeben wird: Es ist die formatfreie Eingabe. Man muß weder Zeilenlänge noch führende Leerzeichen beachten. Der Zielcode wird so arrangiert, wie er vom Compiler verlangt wird. Fortsetzungszeilen werden automatisch generiert, Kommentar wird berücksichtigt.

6.3 Test

Ist der Quellcode eines Programms erstellt, so kann der Entwickler mit den vom System gelieferten Dokumenten vor der ersten Kompilierung zunächst einen komfortablen Schreibtischtest machen: Er hat seinen Code in übersichtlich gestalteter Form als Struktogramm vor sich. Wenn er interaktiv mit dem Rechner arbeitet, kann er sich das Struktogramm sogar über Terminal ausgeben lassen und dieses editieren. Der Testaufwand wird enorm reduziert. Fehler können schon erkannt werden, bevor sie im realen Ablauf eines Programms auftreten. Die Behebung ist einfach: Der Quellcode wird geändert, und ein neues Struktogramm wird ausgegeben. Das geht in Sekundenschnelle und ohne Übersetzungs-, Binde- und Programmlaufzeiten.

Zur Unterstützung des eigentlichen Testbetriebs im Rechner erzeugen die Vorübersetzer übersichtlichen Zielcode ohne überflüssige Sprung- oder Leeranweisungen. Vorteilhaft wirkt sich aus, daß die generierten Sprungmarken aufsteigende Ordnung haben. So wird dem Entwickler das Zurechtfinden im Zielcode erleichtert.

Zwar wird auch mit Werkzeugen der hier vorgestellten Art der Programmtest von seinem Odium nicht befreit, ein Ausprobieren des Programms in einzelnen, willkürlich ausgedachten Testfällen zu sein. Aber das Erkennen der Testfälle ist wesentlich vereinfacht, und der Gesamtzusammenhang eines Programms wird transparenter: Aus dem eindimensionalen, unübersichtlichen Nacheinander von Anweisungen im Programmcode ist ein zweidimensionales, wohlgegliedertes Gebilde geworden, in dem die einzelnen Ablauffälle mit den Bedingungen, unter denen sie auftreten, ersichtlich sind.

6.4 Dokumentation

Sindus ist ein System nicht nur zur Erstellung von Programmen, sondern auch zu ihrer Dokumentation.

Das Dokument über ein Programm ist für den Anwender nicht der von den Vorübersetzern generierte Zielcode, sondern der strukturiert geschriebene Ausgangscode. Seine Auflistung und sein Struktogramm, beide in einem Lauf erstellbar, bilden die Unterlagen über das Programm. Mit dem Struktogramm hat man einen maschinell erzeugten Ablaufplan des Programms, der einfach zu reproduzieren und jederzeit aktuell ist.

Bei konsequenter Anwendung des Verfahrens der strukturierten Programmierung werden die Entwurfsunterlagen für das System, nämlich die in natürlicher Sprache abgefaßten Struktogramme über den Ablauf der Funktionen, mit Code in einer Programmiersprache gefüllt. Jeder Entscheidung und jeder daraus resultierenden Aktion im entworfenen Ablauf sind Programmanweisungen zugeordnet, jedem Strukturblock im Entwurf entspricht ein Strukturblock im fertigen Programm. Der Text des entworfenen Ablaufs kann sich im Programm als Kommentar wiederfinden.

Die so erstellten Unterlagen sind änderungsfreundlich. Es fällt leicht, sich in solche- Programmdokumente einzulesen. Die Auswirkungen. einer Änderung im Programmcode sind ohne weiteres erkennbar.

Fazit: 4

"Programming will remain very difficult, because once we have freed ourselves from the circumstantial cumbersomeness, we will find ourselves free to tackle the problems that are now well beyond our programming capacity." (Dijkstra, Turing Award Lecture 1972)