SOFTWAREVERIFIKATION
BEWEIS-TOOLS
Florian Hansel, Finja Michler
Agenda
Überblick
Deduktion
Modellprüfung
Abstrakte Interpretation
Anforderungen an Beweis-Tools
Beweis-Tools
Fazit
Überblick
Softwareverifikation: Ist das System richtig gebaut?
Softwarevalidierung: Ist es das richtige System?
Formale Verifikation im Bereich der statischen Tests
Geeignet für Hard- und Softwareverifikation
Hohe Kosten deswegen Anwendung nur bei
Sehr
sicherheitskritischen
Sehr teuren oder
Sehr komplexen Systemen
Deduktion
Logikkalkül, bestehend aus verschiedenen
Beweisregeln, die zunächst in Form von Vor- und
Nachbedingungen formuliert werden.
1.
2.
3.
4.
5.
Aussagenlogik
Prädikatenlogik
Temporallogik
Höherwertige Logik
Hoare Kalkül
Vorbedingung
Wenn …
dann…
Nachbedingung
Deduktion - Aussagenlogik
Aussagen müssen mit wahr oder falsch beantwortet
werden können
Zweiwertige Logik
Mögliche Operatoren:
Negation
Konjunktion
Disjunktion
Implikation
Äquivalenz
¬
Λ
V
↔
A
¬A
Wahr
Falsch
Falsch
Wahr
A
B
AΛB
Wahr
Wahr
Wahr
Wahr
Falsch
Falsch
Falsch
Wahr
Falsch
Falsch
Falsch
Falsch
Deduktion - Aussagenlogik
Durch geringe Ausdrucksstärke nicht komplex genug
für die Anforderungen der Verifikation
Findet im Hardwarebereich Anwendung zur
Abbildung von kombinatorischen
Hardwareschaltungen
Sonst Teilmenge der anderen Logiken
Deduktion - Prädikatenlogik
Prädikate sind Sätze mit Variablen. Die Variablen
werden mit Elementen einer gegebenen Menge
ersetzt und bilden so eine Aussage
Semi-entscheidbare Logik
Prädikatenlogik nullter Stufe (PL0): wahr, falsch
Quantoren: Allquantor ∀ und Existenzquantor ∃
∀
x: P(x,x) : Für alle x ist P(x,x) wahr.
∃ x: Q(x) : Es existiert ein x, so dass Q(x) wahr ist.
∀ x ∃ y: R(x,y) : Für alle x existiert ein y, so dass R(x,y)
wahr ist.
Deduktion – Beispiele Prädikatenlogik
… ist ein Mensch = Prädikat
Durch
einsetzen von Eigennamen (z.B. Sokrates) wird
daraus eine Aussage : Sokrates ist ein Mensch
Quantoren ermöglichen folgende Aussagen:
Alle
Menschen sind sterblich
Es gibt mindestens einen rosa Elefanten
Anwendbarkeit nur auf Individuen: Menschen, Tiere,
Gegenstände…
Deduktion – Beispiele Prädikatenlogik
A
B
C
(Jemand) wird (von allen) gemocht.
∃x ∀y : R(x,y)
A
B
C
A
B
C
A
(Jeder) mag (jemanden).
∀ x ∃ y : R(x,y)
B
C
A
A
B
C
B
C
(Alle) mögen (sich selbst).
∀ x : R(x,x)
Deduktion - Prädikatenlogik
Entscheidbarkeit bereits ab PL1 nicht mehr erfüllt
Ausdrucksfähigkeit nicht ausreichend für
Softwareverifikation
Deduktion – Höherwertige Logik
Erweiterung zu PL1: Geltungsbereich der Quantoren
erstreckt sich nicht nur auf Variablen, sondern über
Prädikate hinweg
Alle
Pferde sind Tiere; also sind alle Pferdeköpfe
Tierköpfe
Ermöglichen zum Beispiel Aussagen über natürliche
Zahlen
Geringes Automatisierungspotenzial
Deduktion – Verifikation nach Hoare
Grundprinzip aller deduktiven Verfahren
Aussagen in Form von Hoare-Tripeln notiert:
{P}
S {Q}
Unter der Annahme, dass {P} erfüllt ist, gilt nach
Ausführung des Programmfragmentes S die
Nachbedingung {Q}
Mit Hilfe dieser Form und den Operatoren der
Aussagenlogik, können Zuweisungen (=),
Fallunterscheidungen (if), Iterationen (while) und
ähnliches abgebildet werden.
Modellprüfung
3-stufige Vorgehensweise:
1.
2.
3.
Überführung des zu verifizierenden Systems in ein
geeignetes Modell
Beschreiben der erwarteten Systemeigenschaften
Durchführen der Verifikation (Modellprüfung)
Wenn die Systemeigenschaften E in dem durch
endlich viele Zustände S beschriebenem Modell M(S)
gelten, ist das System korrekt: M(S)|= E
Modellprüfung - LTL
LTL: linear time logic
Baut auf Aussagenlogik auf und erweitert diese um
temporale Operatoren
○
f im nächsten Zustand gilt f (temp. Schrittoperator)
◊ f in mind. einem Zustand gilt f (temp.
Existenzquantor)
□ f in allen Zuständen gilt f (temp. Allquantor)
gUf g gilt, bis zu dem Zustand, bei dem f gilt
(bedingte Allquantifizierung)
Modellprüfung – Beispiele LTL
LTL Formel Bedeutung
M,2 |= ○ f
Im nächsten Zustand gilt f
M,0 |= □ f
In allen Folgezuständen gilt f
M,0 |= ◊ f
In irgendeinem Folgezustand gilt f
M,0 |= f U g
F gilt solang bis g gilt
M,3 |= ¬ g
G ist im Zustand 3 falsch
M,2 |= f
Variable f ist im Zustand 4 wahr
M,0|=○(f Λ g) Im Zustand 0 sind f und g gültig
0
1
2
3
f
f
f
f
f
f
f
g
f
f
f, g
Modellprüfung - CTL
CTL: computation tree logic
Aussagen über Zustandsbäume
Boolsche Verknüpfungen werden
um temporale Operatoren erweitert.
Die Operatoren werden mit einem Existenz- (E) bzw. Allquantor
(A) verknüpft
○ E , ○ A – Temporale Schrittoperatoren (next)
◊ E , ◊ A – Temporale Existenzquantoren (eventually)
□ E , □ A – Temporale Allquantoren(always)
E U, A U – Bedingte Allquantifizierungen (until)
Modellprüfung – Beispiele CTL
M, 0 |= f ∧ g: Im Zustand 0 sind f und g gültig.
M, 0 |= ¬f : f ist im Zustand 0 falsch.
M, 3 |= f → g: Ist f im Zustand 3 gültig, dann gilt
dort auch g.
M, 5 |= E ○ f: Im nächsten Zustand eines Pfades ab
5 gilt f.
M, 2 |= A ◊ f: Auf allen Pfaden ab 2 gilt
irgendwann f.
M, 1 |= E □ f: Auf einem Pfad ab 1 gilt stets f.
M, 3 |= f E U g: Auf einem Pfad ab 3 gilt f so lange
bis g gilt.
Modellprüfung
Einsatzgebiet funktionale Systemeigenschaften:
Gefahrlosigkeitseigenschaften
es tritt niemals ein
Absturz ein
Sicherheitseigenschaften Transaktionssicherheit
Lebendigkeitseigeneschaften es wird das
gewünschte Ergebnis irgendwann geliefert
Geringe Ausdrucksstärke ermöglicht
Automatisierung. Dadurch in sicherheitskritischen
Nischenprojekten Anwendung.
Abstrakte Interpretation
Generalisierung des Datenbereichs
Dadurch dynamische Eigenschaften nachweisbar
ohne konkrete Wertebelegung der
Eingangsvariablen
Jeder Programmbefehl wird als Gleichung
aufgefasst und ein Zustand ist die konkrete
Belegung aller vorhandenen Variablen
Jeder Programmzustand ist Element eines ndimensionalen Vektorraumes
Abstrakte Interpretation
Fixpunkt: Punkt im Definitionsbereich, der von der
Funktion auf sich selbst abbildet
F(x)
= 5x x=0
Fixpunktiteration:
Menge Ergebnis A
A Ergebnis B
B Ergebnis B also Fixpunkt
leere
Abgleich mit Fehlermenge. Wenn Schnittpunkt leer,
dann Fehlerfreiheit garantiert
Mathematisch gesehen unberechenbar
Abstrakte Interpretation
Zustandsmengen werden nicht exakt bestimmt,
sondern angenähert
Bedarf
an Speicher und Rechenkapazität wird
verringert
Ganze Zahlen ersetzen Fließkommazahlen
Jedes Element des abstrahierten Bereichs repräsentiert
mehrere Elemente des Originalbereichs
Falschheit kann bewiesen werden, Korrektheit nicht
Volle Automatisierung möglich
Anforderungen an Beweis-Tools
Funktionale Anforderung
Verifikation
von Code
Nicht-funktionale Anforderungen
Einfache
Installation
Intuitive Oberfläche
Gute Performance
Korrektheit / Korrektes Verhalten
Anforderungen an Beweis-Tools:
Korrektes Verhalten
Einfache Anweisungen
Boolean-Werte
Schleifen
Exception-Handling
Überladene Methoden
Syntax
Beweis-Tools
KeY
Ein
gemeinschaftliches Projekt der Universitäten
Karlsruhe, Chalmers, Gothenburg und Darmstadt
Krakatoa
Ergebnis
eines Projekt-Teams des Inria
Forschungszentrums in Frankreich
ESC/Java2
KindSoftware
Forschungsgruppe
Auswahl eines Beweis-Tools
KeY
Krakatoa
ESC/Java2
Installation
++
--
++
Intuitive Oberfläche
-
?
++
Performance
++
?
+
Ergebnis
3
-2
5
ESC/Java2
Extended Static Checking
Static
Checking: Überprüfung anhand des Quellcodes
Extended: Finden von mehr Fehlern als bei
herkömmlichen statischen Checks
Vorgänger entwickelt am System Research Center
von DEC
Integration von Java 1.4 Features
Annotationssprache: JML
Java Modeling Language
Behavioral Interface Specification Language (BISL)
Design by Contract
Spezielle Java-Annotation
Einzeilig:
//*
Mehrzeilig: Zwischen /*@ und @*/
Weitere Zeilen beginnen mit einem @
Mit Standard-Tools kompilierbar und auswertbar
durch JML-Tools
Schlüsselwörter der JML
Vorbedingung {P}: \requires
Nachbedingung {Q}: \ensures
Exceptions: \signals_only
Rückgabewert: \result
Initialwert: \old(E)
Quantoren: \forall, \exists, \no_of, \sum, \product
Funktionsweise von ESC/Java2
Verifikation mit ESC/Java2 (1)
Erstellen eines Java-Projektes
Wechseln in die „Verification“-Ansicht
Java-Projekt einen ESC/Java Builder hinzufügen
Verifikation mit ESC/Java2 (2)
Schreiben des Codes
Annotieren mittels JML
Speichern Builder ausführen
Schwächen von ESC/Java2
Ist nicht „Complete“
Vollständig
Es
können Warnungen ausgegeben werden, wenn in der
gegeben Zeit kein Beweis gefunden wurde
Ist nicht „Sound“
Logisch
korrekt
Schleifen werden nicht bis zum Ende durchlaufen
Fazit
Einfache Überprüfung von Code mittels formaler
Methoden (Prädikatenlogik)
Schnelle Unterstützung des Softwareentwicklungsprozesses
Wünschenswert: Completeness und Soundness
Vielen Dank für Ihre Aufmerksamkeit!