Zur praktischen Anwendbarkeit mathematisch rigoroser Methoden zum Sicherstellen der Korrektheit von sequentiellen Computerprogrammen an den Fachbereich Informatik der Technischen Hochschule Darmstadt zum Erlangen des akademischen Grades Doktor-Ingenieur (Dr.-Ing.) eingereichte Dissertation von Robert Laurence Baber geboren in Los Angeles, California, U.S.A. Master of Science in Electrical Engineering und Master of Science in Industrial Management, Massachusetts Institute of Technology Erstreferent: Prof. Dr.-Ing. Hans-Jürgen Hoffmann Korreferent: Prof. Dr. David Lorge Parnas eingereicht am: 1994 August 4 Prüfungstermin: 1994 September 30 Erschienen in Darmstadt, 1994 D 17ÜÜÜ GGGKolumnentitelzeile 14,4p hoch. Kolumnentitel 10p, Seitenzahl 12p GGG ÜÜÜ ÜÜÜ GGGAbstandszeile, 13,98p hoch GGG ÜÜÜ ÜÜÜ GGG ???Erste Zeile im Textbereich ??? GGG ÜÜÜ ÜÜÜ GGGSchrift 12p, Zeilenabstand 14,4p GGG ÜÜÜ ÜÜÜ GGG GGG ÜÜÜ ÜÜÜ GGG GGG ÜÜÜ ÜÜÜ GGG GGG ÜÜÜ Satzspiegel Baber: Praktische Anwendbarkeit ... Höhe des Textbereichs = 24,100 cm = 683,16p = 47,44 Zeilen á 14,4p = 48,797 Zeilen á 14p ÜÜÜ GGG GGG ÜÜÜ ÜÜÜ GGG GGG ÜÜÜ ÜÜÜ GGG GGG ÜÜÜ ÜÜÜ GGG yyy ??? gggLetzte Zeile im Textbereich ggg ??? yyy GGG ÜÜÜ Geleitworte Die Qualität technischer Produkte muß gesichert und geprüft sein, bevor sie an einen Kunden ausgeliefert werden. Das gilt auch für Programme! Bei der Programmentwicklung fehlte lange Zeit ein Ansatz, diese Forderung zu erfüllen. Es wurde drauflos programmiert und geglaubt oder gehofft, daß kein Fehler vorliegt, der die Qualität mindert oder das Programm eigentlich unbrauchbar macht. In der Praxis ist es weitgehend immer noch so. Die in den letzten beiden Jahrzehnten gewonnenen wissenschaftlichen Erkenntnisse zur Qualitätssicherung beim Entwurf und der Implementierung sowie dann auch der stichhaltigen, nachvollziehbaren Überprüfung haben sich kaum bei Praktikern eingeführt; es sei zu mathematisch, zu aufwendig, zu schwierig waren (und sind) häufig gehörte Meinungsäußerungen von Programmierern, Software-Entwicklern und Projektverantwortlichen. Daß dieses Argument auf schwachen Füßen steht, zeigt diese Schrift. Zu einem ingenieurmäßigen Vorgehen beim Programmentwurf und der Programmierung sind kaum mehr mathematische Kenntnisse als die der Booleschen Algebra und der Mengenlehre erforderlich. Der Aufwand schlägt nicht zu Buche, wenn die Maßnahmen zur Qualitätssicherung beim Entwurf und der Programmierung sogleich mitbehandelt werden; es steigert sich sogar der Dokumentationswert, so daß auch eine qualitätsbezogene Überprüfung fast nebenbei abfällt. Und um Schwierigkeiten zu meistern, ist bekanntermaßen intensive Vorbereitung und stetige Übung der einfachste Weg; man muß es einfach tun, Erfahrung im Umgang mit den Formalien stellt sich ein, plötzlich sind die aufgezeigten Vorgehensweisen ganz selbstverständlich. Jedem, der sich diesen Herausforderungen bei seiner praktischen Arbeit stellen will, sei diese Schrift zum Studium empfohlen. Univ.-Prof. Dr.-Ing. Hans-Jürgen Hoffmann Darmstadt, im Februar 1995 Seit der schrittmachenden Arbeit von Robert Floyd in den 60er Jahren sind uns die Grundideen der Methoden zum Sicherstellen der Korrektheit von sequentiellen Computerprogrammen bekannt. Mit den Ergänzungen von (u.a.) Mills, Majster- Cederbaum und de Bruijn haben wir allgemein anwendbare theoretische Grundlagen für dieses Gebiet gewonnen. Heute gibt es keinen theoretischen Grund, die Korrektheit von Programmen, die in der Praxis geschrieben werden, nicht zu beweisen. Trotz diesen erfreulichen Tatsachen muß festgestellt werden, daß diese Ideen in der Industrie sehr selten angewendet werden. Es stellt sich die Frage, “Warum hat sich die Anwendung von mathematischen Methoden im Bereich Software Engineering nicht weiter durchgesetzt?” Meines Erachtens liegt das Hauptproblem in den bisher erarbeiteten Antworten auf die zwei Darstellungsfragen: · Wie können wir die durch Programme verwirklichten Funktionen leserlich beschreiben? · Wie können wir Datenzustände beschreiben? In den weit verbreiteten Arbeiten von Floyd, Hoare und Dijkstra wird angenommen, daß eine 1:1 Beziehung zwischen Bezeichnern und Programmvariablen besteht. Diese Annahme ermöglicht eine einfache Beschreibung der Datenzustände. Leider trifft diese Annahme bei den meisten in der Praxis benutzten Programmiersprachen nicht zu. Die Ansätze von Mills, Majster-Cederbaum, de Bruijn und anderen sind allgemeingültig, weil in diesen Arbeiten einfach von “states” gesprochen wird, ohne eine bestimmte Zustandsdarstellungsweise anzunehmen. Dies hat zur Folge, daß der Ingenieur, der diese Methoden anwenden will, seine eigene Darstellungsweise erfinden muß. Es hat sich herausgestellt, daß dies für die Mehrheit der Praktiker zu schwierig ist und daß sie deswegen auf die formale Überprüfung von Programmkorrektheit verzichten. In dieser Arbeit von Robert Baber bekommen die Leser und Leserinnen praktische Vorschläge und Beispiele, die die Lücke zwischen Theorie und Praxis überbrücken. Es wird gezeigt, wie man die seit 20 Jahren bekannte theoretische Grundlage in einem praktikablen Verfahren anwenden kann. In der vorliegenden Arbeit findet man Datenzustandsdarstellungen ohne die Einschränkung, die in den Ansätzen von Floyd, Hoare und Dijkstra impliziert sind. Man findet auch neue Vorschläge zur Beschreibung von Funktionen und Prädikaten. Viele Ingenieure werden die hier eingeführte Notation verständlicher als die klassische Schreibweise finden. Dieses Buch baut auf viele frühere Arbeiten auf und faßt die verschiedenen Ansätze zusammen. Es wird allen in der Praxis beschäftigten Ingenieuren und Informatikern empfohlen. Das umfangreiche Literaturverzeichnis wird auch vielen Forschern behilflich sein. Prof. Dr. rer. nat. (h.c.) David Lorge Parnas, Ph.D., FRSC Department of Electrical and Computer Engineering McMaster University Hamilton, Ontario, Canada L8S 4K1 Danksagung Meinem Doktorvater Prof. Dr.-Ing. Hans-Jürgen Hoffmann möchte ich vor allem für seine Geduld mit meinem nichtmuttersprachlichen Deutsch sowie für die Gelegenheiten, mit ihm verschiedene fachliche und technische Aspekte dieser Arbeit in persönlichen Gesprächen zu erörtern, danken. Diese Gespräche führten zu einer klareren und ausführlicheren Darstellung einiger Punkte. Mein herzlicher Dank gehört dem Korreferenten Prof. Dr. David L. Parnas, der trotz erheblichen Terminschwierigkeiten, deren Überwindung mit Unannehmlichkeiten verbunden war, diese Aufgabe übernommen hat. Darüber hinaus danke ich ihm für mehrere sowohl schriftliche als auch persönliche fachliche Dialoge im Verlaufe der Jahre über dieses und verwandte Themen. Meiner Frau Ursula und meinem Sohn Eric danke ich für stundenlanges Korrekturlesen. Meiner Tochter Ingrid danke ich für die rechtzeitige Bereitstellung plötzlich benötigter technischer Hilfsmittel. Eher mittelbar jedoch im wesentlichen Maße haben auch viele andere Personen zur Entstehung dieser Arbeit beigetragen: Prof. Dr. Hermann Dinges, Prof. Dr. Hilmar Drygas und Dr. John B. Ferebee verdanke ich eine Erweiterung und Vertiefung meiner mathematischen Kenntnisse sowie eine mathematischere Denkweise. Prof. Dr. Edsger W. Dijkstra und Prof. Dr. C.A.R. Hoare danke ich für ihre Unterstützung zunächst durch ihre Bücher und Artikel, die mich in diesen Stoff eingeführt haben, und danach für ihren in persönlichen Kontakten übermittelten Zuspruch und ihre Ermunterung meiner Überlegungen, die u.a. zu dieser Arbeit geführt haben. Drs. Willem Dijkhuis, der mich bei Software Reflected und meinen späteren Büchern mit wertvollem Rat und Tat unterstützte, bin ich sehr verbunden. Für Unterstützung und Ermunterung bei verschiedenen ingenieurwissenschaftlichen Bemühungen danke ich Prof. Dr.-Ing. Rudolf Saal und Prof. Dr.-Ing. Adolf Schwab. Prof. Dr.-Ing. Rudolf Saal hat mir auch nützliche Hinweise auf klassische deutschsprachige Lehrbücher für Ingenieurstudenten gegeben. Zusammenfassende Übersicht Gegenstand dieser Arbeit ist eine mathematische Grundlage für die Softwareentwicklung, die den wissenschaftlichen Grundlagen der klassischen Ingenieurwissenschaften entspricht, und ihre praktische Anwendung sowohl bei der Programmkonstruktion als auch bei der Programmkorrektheitsbeweisführung. Die hier zusammengestellte Grundlage und Vorgehensweise unterscheiden sich von denen der bisherigen Literatur über die Programmkorrektheitsbeweisführung vor allem durch eine auf die Belange der Praxis gerichtete Integration ausgewählter theoretischer Kenntnisse. Die Betrachtung von Programmausführungszuständen z.B. als Folgen von Programmvariablen (Datenumgebungen genannt) ermöglicht die unmittelbare Behandlung der Vereinbarung und der Freigabe von Variablen sowie des Vorhandenseins gleichnamiger Variablen (wie sie z.B. bei blockstrukturierten Programmiersprachen und in rekursiven Programmen vorkommen) in Korrektheitsbeweisen. Weitere aus praktischer Sicht wichtige Aspekte der Programmkorrektheitsbeweisführung und -konstruktion, denen bisher in der einschlägigen Fachliteratur nicht bzw. nicht ausreichend Rechnung getragen worden ist, werden hier behandelt bzw. berücksichtigt, z.B. Rechnerarithmetik (Ungenauigkeit der Gleitkommaarithmetik und ganzzahlige Arithmetik auf beschränkten Intervallen), Definitionsbereiche von Programmanweisungen, das Streben nach Einfachheit sowohl der mathematischen Grundlage als auch ihrer praktischen Handhabung, die informale bis formale, teilweise bis vollständige Anwendung, nicht terminierende Programme, die Systematisierung der praktischen Handhabung usw. Kapitel 1 behandelt das Problem fehlerhafter Software aus übergeordneter
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages208 Page
-
File Size-