Formale Methoden in der Praxis - Institute of Software Technology
Formale Methoden in der Praxis - Institute of Software Technology
Formale Methoden in der Praxis - Institute of Software Technology
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Aber wie macht man das? Wie beschreibt man die Funktionsweise, ohne gleichzeitig zu sagen,<br />
wie diese realisiert wird? Das ist ke<strong>in</strong>e leichte Aufgabe. Die <strong>Methoden</strong> müssen gelernt und geübt<br />
werden. Viele S<strong>of</strong>twarespezialisten s<strong>in</strong>d dieser Aufgabe nicht gewachsen.<br />
Episoden: “Wie kann man etwas beschreiben, das man noch nicht hat.”<br />
Dieser Problematik muß man sich stellen, unabhängig davon, ob man formale <strong>Methoden</strong><br />
benützt o<strong>der</strong> nicht. Aber die mathematischen Grundlagen helfen, die Alternativen zu sehen, um<br />
die Aufgabe zu lösen.<br />
2.2 Spezifikationsmethoden<br />
Es gibt mehr als e<strong>in</strong>e Möglichkeit, e<strong>in</strong> Programm zu spezifizieren, ohne die Details e<strong>in</strong>er Implementierung<br />
preiszugeben.<br />
Für die Zwecke dieser E<strong>in</strong>führung werden vier <strong>Methoden</strong> unterschieden.<br />
1. Spezifikation mittels Vor- und Nachbed<strong>in</strong>gungen.<br />
2. Algebraische Spezifikation.<br />
3. Explizite Spezifikationen.<br />
4. Kontrakte.<br />
Vor- und Nachbed<strong>in</strong>gungen sagen, welche Programme als Lösung akzeptabel s<strong>in</strong>d.<br />
Mit algebraischen Spezifikationen werden abstrakte Datentypen o<strong>der</strong> Objektklassen spezifiziert,<br />
<strong>in</strong>dem die Relation <strong>der</strong> Funktionen bzw. <strong>Methoden</strong> untere<strong>in</strong>an<strong>der</strong> festgelegt werden.<br />
Explizite Spezifikationen def<strong>in</strong>ieren Funktionen o<strong>der</strong> <strong>Methoden</strong> direkt mittels gegebener, aber<br />
möglichst abstrakter Datentypen.<br />
Kontrakte spezifizieren die wechselseitigen Anfor<strong>der</strong>ungen paralleler Prozesse, sowie <strong>der</strong>en Verhalten.<br />
Wird <strong>der</strong> Benützer als e<strong>in</strong> Prozeß gesehen, so kann man auch Spezifikationen mit Vor- und<br />
Nachbed<strong>in</strong>gungen als Kontrakte bezeichnen.<br />
Die folgenden Beispiele illustrieren <strong>der</strong> Reihe nach die erwähnten <strong>Methoden</strong>.<br />
2.2.1 Def<strong>in</strong>ition durch Vor- und Nachbed<strong>in</strong>gungen<br />
Beispiel: Quadratwurzel<br />
Es soll e<strong>in</strong> Programm sqrt spezifiziert werden, das die Quadratwurzel e<strong>in</strong>er gegebenen reellen Zahl<br />
x liefert. Wir erleichtern uns die Aufgabe, <strong>in</strong>dem wir die E<strong>in</strong>- und Ausgabebereiche festlegen, und<br />
dem Resultat e<strong>in</strong>en Namen geben.<br />
sqrt (x : R) s : R<br />
Die Aufgabe besteht nun dar<strong>in</strong>, s <strong>in</strong> Relation zu x ausreichend festzulegen. Die Charakterisierung<br />
des Resultats soll möglichst e<strong>in</strong>fach und e<strong>in</strong>leuchtend se<strong>in</strong>. Es ist nicht <strong>der</strong> Algorithmus<br />
gefragt, son<strong>der</strong>n nur e<strong>in</strong> Kriterium, das entscheidet, ob e<strong>in</strong> angebotenes s e<strong>in</strong>e Lösung ist.<br />
Aus dem elementaren Mathematikunterricht er<strong>in</strong>nern wir uns an die “Probe”, die nach gewissen<br />
Rechenoperationen zu machen war. Als Probe zur Berechnung <strong>der</strong> Quadratwurzel wird das<br />
Resultat quadriert, das, wenn richtig gerechnet wurde, gleich dem Argument se<strong>in</strong> muß. Damit<br />
haben wir das gesuchte Kriterium für die Lösung. Weil diese Bed<strong>in</strong>gung nach <strong>der</strong> Ausführung des<br />
Programms gelten soll, nennt man sie Nachbed<strong>in</strong>gung (post-condition). Man schreibt:<br />
sqrt (x : R) s : R<br />
post s × s = x<br />
Die Annahmen, die man bezüglich <strong>der</strong> Inputs zu e<strong>in</strong>em Programm trifft, nennt man Vorbed<strong>in</strong>gung<br />
(pre-condition). Falls das Resultat im Bereich <strong>der</strong> reellen Zahlen liegen soll, muß die<br />
Vorbed<strong>in</strong>gung den Argumentbereich auf die positiven reellen Zahlen e<strong>in</strong>schränken.<br />
2