Files
tilman.de/www/uni/ws03/alp/verifikation.php
T
2011-10-26 10:11:42 +02:00

67 lines
3.3 KiB
PHP

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" media="all" href="stylesheet.css">
<title>Verifikation und Validation</title>
</head>
<body>
<span id="menu"><a href="index.php">zurück zur Liste</a></span>
<div id="buttons">
<form action="edit.php" method="POST">
<input type="hidden" name="filename" value="<?php echo $_SERVER['SCRIPT_FILENAME']?>">
<p>
<input type="submit" value="Seite bearbeiten">
</p>
</form>
</div>
<h1>Verifikation und Validation</h1>
<b>Verifikation:</b> es wird bewiesen, dass die Spezifikation korrekt ist. Daraus folt die <b>partielle</b> Korrektheit eines Programm(abschnitt)s. Wird noch das Terminieren des Programm(abschnitt)s für jede Eingabe bewiesen, ist dieses/r <b>total</b> korrekt.<br> <br>
Um ein Programm zu verifizieren, zerlegt man es in seine Einzelschritte und beweist für jeden einzeln die partielle Korrektheit. Dafür gibt es einige Formeln (<b>Hoare Kalkül</b>):<br><br>
<font size="+1"><font face="Times New Roman">{P}</font></font> Vorbedingung<br>
<font size="+1"><font face="Times New Roman">{Q}</font></font> Nachbedingung<br>
<font size="+1"><font face="Times New Roman">S</font></font> Sequenz (der Teil des Programms, den man beweisen will.<br><br>
Zuweisungsaxiom: <font size="+1"><font face="Times New Roman">{P}x = e{P[e/x]}</font></font><br>
Alles was vorher für e galt, gilt nachher für x. Beispiel: <code>x = 5</code> (alles was für die 5 "gilt", gilt jetzt auch für x, z.B. dass man sie zu einer anderen Zahl addieren kann oder dass sie ungerade ist.)<br><br>
<table >
<tr>
<td align="right">Zuweisungsaxiom:</td>
<td><img src="zuweisung.gif" width="146" height="33" border="0" alt=""></td>
<td></td>
</tr>
<tr>
<td align="right">Sequenzregel:</td>
<td><img src="sequenz.gif" width="228" height="57" border="0" alt=""></td>
<td>Wenn man von P mittels S<sub>1</sub> zu R kommt, und von R mittels S<sub>2</sub> zu Q, so kommt man von P über die Ausführung von S<sub>1</sub> und s<sub>2</sub> zu Q.</td>
</tr>
<tr>
<td align="right">Bedingte Anweisung:</td>
<td><img src="bedingung.gif" width="329" height="60" border="0" alt=""></td>
<td>Wenn P und die Bedinung B erfüllt sind und man über S<sub>1</sub> zu Q gelangt, und wenn P erfüllt ist und B nicht und man über S<sub>2</sub> zu Q gelangt, so gilt {P} if (B) then S<sub>1</sub> else S<sub>2</sub> {Q}.
</tr>
<tr>
<td align="right">Schleife:</td>
<td><img src="while.gif" width="273" height="55" border="0" alt=""></td>
<td>Es wird eine geeignete Schleifeninvariante benötigt. Gilt diese und B ist erfüllt und ist die Invariante nach Durchlauf der Schleife unverändert und ist B nicht mehr erfüllt, ist die Schleife partiell korrekt. Für die totale Korrektheit muss noch die Termnierung bewiesen werden (siehe ALP II Skript)</td>
</tr>
</table>
<br><br><b>Validation:</b> es wird überprüft, ob der Algorithmus das bestehende Problem löst, also ob er tut, was er soll. Es gibt dafür keine formale Schreibweise.
<h2>Fragen</h2>
<h2>Anmerkungen</h2>
<h2>Links</h2>
</body>
</html>