zurück zur Liste

Verifikation und Validation

Verifikation: es wird bewiesen, dass die Spezifikation korrekt ist. Daraus folt die partielle Korrektheit eines Programm(abschnitt)s. Wird noch das Terminieren des Programm(abschnitt)s für jede Eingabe bewiesen, ist dieses/r total korrekt.

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 (Hoare Kalkül):

{P} Vorbedingung
{Q} Nachbedingung
S Sequenz (der Teil des Programms, den man beweisen will.

Zuweisungsaxiom: {P}x = e{P[e/x]}
Alles was vorher für e galt, gilt nachher für x. Beispiel: x = 5 (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.)

Zuweisungsaxiom:
Sequenzregel: Wenn man von P mittels S1 zu R kommt, und von R mittels S2 zu Q, so kommt man von P über die Ausführung von S1 und s2 zu Q.
Bedingte Anweisung: Wenn P und die Bedinung B erfüllt sind und man über S1 zu Q gelangt, und wenn P erfüllt ist und B nicht und man über S2 zu Q gelangt, so gilt {P} if (B) then S1 else S2 {Q}.
Schleife: 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)


Validation: 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.

Fragen

Anmerkungen

Links