Softwareverifikation Beweis

Werbung
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!
Herunterladen