• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 14 vom 08.07.19

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 14 vom 08.07.19"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 14 vom 08.07.19

Rückblick & Ausblick

Serge Autexier, Christoph Lüth

Universität Bremen Sommersemester 2019

17:10:58 2019-07-10 1 [25]

Fahrplan

IEinführung

IOperationale Semantik IDenotationale Semantik

IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül

IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen

IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung

ISpezifikation von Funktionen IReferenzen und Speichermodelle

IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick

Korrekte Software 2 [25]

Was gibt’s heute?

IRückblick

IAusblick

IFeedback

Korrekte Software 3 [25]

Rückblick

Korrekte Software 4 [25]

Semantik

IOperational — Auswertungsrelationhc, σi →σ0

IDenotational — Partielle Funktion [[c]] : Σ*Σ

IAxiomatisch — Floyd-Hoare-Logik

IWelche Semantik wofür?

IBeweis: Äquivalenz von operationaler und denotationaler Semantik

Korrekte Software 5 [25]

Floyd-Hoare-Logik

IFloyd-Hoare-Logik: partiell und total

I` {P}c{Q}vs.|={P}c{Q}: Vollständigkeit, Korrektheit

IDie sechs Basisregeln

IZuweisungsregel: vorwärts (Floyd) vs. rückwärts (Hoare)

IVCG: Schwächste Vorbedingung und stärkste Nachbedingung

IBeweis: Korrektheit und Vollständigkeit der Floyd-Hoare-Logik

Korrekte Software 6 [25]

Erweiterungen der Programmiersprache

IFür jede Erweiterung:

IWie modellieren wir semantisch?

IWie ändern sich die Regeln der Logik?

Korrekte Software 7 [25]

1. Erweiterung der Programmiersprache

IStrukturen und Felder

ILokationen: strukturierte WerteLexp

IErweiterte Substitution in Zuweisungsregel

ISonstige Regeln bleiben

Korrekte Software 8 [25]

(2)

2. Erweiterung der Programmiersprache

IProzeduren und Funktionen

IModellierung vonreturn: Erweiterung zu Σ*Σ + Σ×VU

ISpezifikation von Funktionen durch Vor-/Nachbedingungen

ISpezifikation der Funktionen muss im Kontext stehen

IUnterscheidung zwischen zwei Nachbedingungen

IRegeln für den Funktionsaufruf

Korrekte Software 9 [25]

3. Erweiterung der Programmiersprache

IReferenzen

IKonversion zwischenLexpundAexp

ILokationen nicht mehr symbolisch (Variablennamen), sondern abstrakt Σ =Loc*V,V=Z+Loc

IZustand alsabstrakter Datentypmit Operationenreadundupd IZuweisung nicht mehr mit Substitution, sondern explizit durchupd ISpezifikationen sindexplizite Zustandsprädikate, Konversion (−),(−)#

Korrekte Software 10 [25]

Ausblick

Korrekte Software 11 [25]

Was geht noch?

IDie Sprache C

IAndere Programmiersprachen

ILogik und Spezifikation

ISuccess Stories

Korrekte Software 12 [25]

Die Sprache C: Was haben wir ausgelassen?

Semantik:

INichtdeterministische Semantik: Seiteneffekte, Sequence Points

−→Umständlich zu modellieren, Effekt zweitrangig

IImplementationsabhängiges, unspezifiziertes und undefiniertes Verhalten

−→Genauere Unterscheidung in der Semantik Kontrollstrukturen:

Iswitch −→Ist im allgemeinen Fall eingoto

Igoto, setjmp/longjmp

−→Allgemeinfall: tiefe Änderung der Semantik (continuations)

Korrekte Software 13 [25]

Die Sprache C: Was haben wir ausgelassen?

Typen:

IFunktionszeiger −→Für “saubere” Benutzung gut zu modellieren

IWeitere Typen:short/long int,double/float, wchar_t, und

Typkonversionen −→Fleißarbeit

IFließkommazahlen −→Spezifikation nicht einfach

Iunion −→Kompliziert das Speichermodell

I volatile −→Bricht read/update-Gleichungen

Itypedef −→Ärgernis für Lexer/Parser, sonst harmlos

Korrekte Software 14 [25]

Die Sprache C: Was haben wir ausgelassen?

Fürrealistische C-Programme:

ICompiler-Erweiterungen (gcc,clang)

IBüchereien (Standardbücherei, Posix, . . . )

INebenläufigkeit

Korrekte Software 15 [25]

Andere Sprachen: Wie modelliert man Java?

IDieKernspracheist ähnlich zu C0.

IJava hat erschwerend:

Idynamische Bindung,

IKlassen mit gekapselten Zustand und Invarianten, INebenläufigkeit, und

IReflektion.

IJava hat dafür aber

Iein einfacheres Speichermodell, und

Ieine wohldefinierte Ausführungsumgebung (die JVM).

Korrekte Software 16 [25]

(3)

Andere Sprachen: Wie modelliert man C++?

ISehrvorsichtig(konservativ)

IViele Features, fehlende formale Semantik, . . .

IMehrfachvererbung theoretisch anspruchsvoll

IEs gibtkeineFormalismen/Werkzeuge, die C++ voll unterstützen

IAnsätze: Übersetzung nach C/LLVM, Behandlung dort

Korrekte Software 17 [25]

Andere Sprachen: Wie modelliert man PHP?

Gar nicht.

Korrekte Software 18 [25]

Logik und Spezifikation

IWirgenerierenVerifikationsbedingungen, wie kann man sie beweisen?

IAutomatische Beweiser:

ISAT-Checkerlösen Erfüllbarkeitsproblem der Aussagenlogik (MiniSAT, Chaff)

ISMT-Beweiserbeweisen Aussagen der Prädikatenlogik mit linearer Arithmetik, Funktionen und Induktion (Z3, Yices, CVC)

IInteraktive Beweiser:

IBeweisführung durch Benutzer,Überprüfungdurch Beweiser ISehrmächtigeLogiken, aber nicht vollautomatisch (Isabelle, Coq)

Korrekte Software 19 [25]

Beispiel: Z3

ISMT-Beweiser versuchen Gegenbeweis zu konstruieren IDaher: umφzu beweisen, versuchen wir6Φ zu widerlegen Beweis einer VC:

x≥0∧y>0 =⇒x= 0∗y+x Input Z3:

(declare-const x Int) (declare-const y Int) (assert

(not (=> (and (>= x 0) (> y 0)) (= x (+ (* 0 y) x)))) )

(check-sat)

Antwort:

unsat

Unerfüllbare VC:

x≥0∧y>0 =⇒xy Input Z3:

(declare-const x Int) (declare-const y Int) (assert

(not (=> (and (>= x 0) (> y 0)) (>= x y)))

) (check-sat)

Antwort:

sat

Korrekte Software 20 [25]

Beispiel: Isabelle

Korrekte Software 21 [25]

Korrekte Software in der Industrie

IMeist in speziellen Anwendungsgebieten: Luft-/Raumfahrt, Automotive, sicherheitskritische Systeme, Betriebssysteme IAnsätze:

1 Vollautomatisch:statische Analyse(Abstrakte Interpretation) für spezielle Aspekte: Freiheit von Ausnahmen und Unter/Überläufen, Programmsicherheit, Laufzeitverhalten (WCET) (nicht immer korrekt, meist vollständig)

IWerkzeuge:absint

2 Halbautomatisch:Korrektheitsannotationen, Überprüfung automatisch IWerkzeuge: Spark (ADA), Frama-C (C), JML (ESC/Java, Krakatao; Java),

Boogie und Why (generisches VCG), VCC (C)

3 Interaktiv: Einbettung der Sprache in interaktiven Theorembeweiser (Isabelle, Coq)

IBeispiele: L4.verified, CompCert, SAMS

Korrekte Software 22 [25]

Feedback

Korrekte Software 23 [25]

Deine Meinung zählt

IWas war gut, was nicht?

IArbeitsaufwand?

IMehrTheorieoder mehrPraxis?

IProgrammieraufgaben?

ILeichtgewichtiger Übungsbetrieb — mehr oder weniger?

IBitte auch dieEvaluationauf stud.ip beantworten!

Korrekte Software 24 [25]

(4)

Tschüß!

Korrekte Software 25 [25]

Referenzen

ÄHNLICHE DOKUMENTE

I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung von Werten an Adressen

Zu zeigen ist, dass sowohl w also auch if (b) {c; w} else { } zu dem selben Programmzustand auswerten oder beide zu

Korrekte Software: Grundlagen und Methoden Vorlesung 3 vom 17.04.18: Denotationale Semantik.. Serge Autexier,

[r]

sie die gleichen

Korrekte Software: Grundlagen und Methoden Vorlesung 4 vom 24.04.17: Denotationale Semantik.. Serge Autexier,

[r]

Vorlesung 5 vom 04.05.17: Äquivalenz der Operationalen und Denotationalen Semantik. Serge Autexier,