08.03.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!