Motivation und Einführung

Ähnliche Dokumente
Formale Verifikation von Software. 10. Juli 2013

Formale Verifikation von Software. 8. Juli 2015

Software Engineering Praktikum

Model Checking I. Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg

Verifikation in der Realität. In der Industrie wird der Begriff Verifikation häufig im Zusammenhang mit nicht formalen Methoden verwendet:

Software Engineering in der Praxis

MODEL CHECKING 3 TEMPORALE LOGIKEN

1. Motivation. Modelchecking. NuSMV. NuSMV und SMV. 2. Modellierung. Erinnerung (Kapitel II)

1.1 Transitionssysteme Produkte von Transitionssystemen Kripkestrukturen Verifikation und Model-Checking...

Werkzeuggestützte Softwareprüfungen: Model Checking I - CTL. Vortrag von Florian Heyer

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2012

Sequenzgenerierung aus Klassifikationsbäumen

Research Collection. Bounded Model Checking was kommt danach? Other Conference Item. ETH Library. Author(s): Biere, Armin. Publication Date: 2000

Electronic Design Automation (EDA) Spezifikation

MODEL CHECKING 2 - AUTOMATEN

Zeitlogik. Hardware Verifikation. Zeitlogik und Verifikation. Helmut Veith,

Model Checking. H. Peter Gumm. Philipps-Universität Marburg Sommersemester 2007

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Abschlusseigenschaften. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Abschlusseigenschaften

1 Algorithmische Grundlagen

Model Checking. H. Peter Gumm. Philipps-Universität Marburg Sommersemester 2008

Bounded Model Checking mit SystemC

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Angewandte Mathematik und Programmierung

LTL und Spin. Stefan Radomski

Beispiel. p,q. q,r. v.henke: Maschinelles Beweisen 7 27

Intensivübung zu Algorithmen und Datenstrukturen

1. Einführung in Temporallogik CTL

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Kurzeinführung in SAL

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Beispiel zum Schaltungsentwurf mithilfe endlicher Automaten Ein Zähler modulo 3 mit Reset

if ( Logischer Operator ) { } else { Anweisungen false

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Algorithmen zur Datenanalyse in C++

Grundlagen der Informatik 4. Kontrollstrukturen I

Grundlagen der Programmierung in C++ Kontrollstrukturen

An Overview of the Signal Clock Calculus

Modellierung und Programmierung 1

Grundlagen der Programmierung in C++ Kontrollstrukturen

Model Checking mit SPIN

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Modul 7: Automatische Validierung von Sicherheitsprotokollen - Einführung Model-Checking. Prof. Dr. Martin Leischner Netzwerksysteme und TK

Verilog/VHDL. Mehdi Khayati Sarkandi Uni Siegen

Einführung: Zustandsdiagramme Stand:

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

Automaten, Spiele und Logik

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 2. Blatt Für die Woche vom 3.5. bis zum 7.5.

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Grundlagen der Informatik 2. Typen

Formalisierung von Requirements. durch Nutzung von Templates

Übung 1: Vorspann Ein physikalisches System

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf

Modellierung verteilter Systeme

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

1.4 Spezifikation. Inhalte einer. Spezifikation

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn. Testen. Tutorial im Rahmen des Software(technik)praktikums SS 2012

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

2.1 Lineare Temporallogiken: LTL

Algorithmen und Datenstrukturen (für ET/IT)

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

KV Software Engineering Übungsaufgaben SS 2005

6 SYMBOLIC MODEL CHECKING

Übungsstunde: Informatik 1 D-MAVT

5. Aufgabenblatt mit Lösungsvorschlag

Generating Deterministic ω-automata for most LTL formulas by the Breakpoint Construction

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

Grundlagen der Programmierung 2. Operationale Semantik

Einführung in die Programmierung

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Einführung in die Programmierung Wintersemester 2011/12

Qualitätssicherung in der Softwareentwicklung

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

4. Alternative Temporallogiken

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

124 Kompetenzorientierte Aufgaben im Informatikunterricht

~10 RESET 3.3V 5V GND GND VIN

Welche Informatik-Kenntnisse bringen Sie mit?

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Informatik I Übung, Woche 40

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Informatik I (D-ITET)

Automaten und das State Pattern

Beispiel zum Schaltungsentwurf mithilfe endlicher Automaten Ein Zähler modulo 3 mit Reset

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

Transkript:

Motivation und Einführung H. Peter Gumm Philipps-Universität Marburg Sommersemester 2007

hat nichts zu tun mit... n... Schiffsmodellen n Modelleisenbahnen n solchen Modellen

Beim Model checking geht es um Spezifikation und automatische Verifikation von Hardware Software Pokollen Steuerungen to oi go In dieser Vorlesung behandeln wir W Anwendungen von Viele Beispiele Funktionsweise von Model Checkern Insbesondere SMV Effiziente Implementierungstechniken request ti T oo gi ack Theoretische Hintergründe Transitionssysteme Temporale Logiken

Software Qualitätssicherung Testen Unit tests Inspektionen Reviews Es bleiben aber Fehler übrig Sonderfälle, an die niemand gedacht hat Durch Testen kann man die Anwesenheit, nicht die Abwesenheit von Fehlern feststellen

Neulich in der Karibik wandelte ein Rechner irgendwo in Südamerika eine 64-Bit Integer in eine 16-Bit Integer um es war keine exception programmiert, um den Fehler zu behandeln. der Rechner stürzt ab.... aber zum Glück gibt es einen backup rechner der Backup Rechner führt den gleichen Code aus der gleiche Fehler tritt auf noch ein Absturz... davon gibt es Bilder:

nicht nur ein Rechner stürzt ab ein Feuerwerk für 4 Milliarden DM wegen eines dummen Softwarefehlers...

Nichtdeterministische Systeme Verteilte Systeme sind sind nichtdeterministisch. Unklar, in in welcher Reihenfolge Signale Messages Interrupts ankommen. Testen führt nicht zum Ziel. Es bleiben Fehler übrig, man sagt dann: Verkettung unglücklicher Umstände, oder Murphy s Law what can go wrong will go wrong

Ein Produzent und zwei Konsumenten lange getestet, ging auch immer gut, doch eines Tages, durch unglückliche Verkettung von Umständen Konto in den Miesen

Fehler in Software und Hardware aus J.P.Katooen

Software Qualitätssicherung Am besten: Verifikation aber... Programmverifikation geht nicht vollautomatisch Rechnerunterstützung notwendig Verifikation ist mühsam und daher teuer Daher: Allgemeine Programmverifikation nur nur anwendbar bei bei überschaubaren und und gut gut verstandenen Softwaresystemen oder punktuell bei bei kritischen Routinen.

Endliche Systeme Viele Systeme der der Praxis haben nur nur endlich viele Zustände Boolesche Schaltungen kombinatorische Schaltungen (mit speichernden Gliedern) Programme mit endlichen Zustandsmengen Pokolle Kann man solche Systeme vollständig testen?

Die Bank - modelliert in NuSMV Entspräche in PseudoAssembler: 0 : cmp konto 100 jge 0 1 : add konto 10 jmp 0 0 : cmp konto 10 jb 0 1 : sub konto 10 jmp 0

Überprüfung in NuSMV Wir nehmen drei Prozesse an. Wir been, dass das Konto immer < 100 sei NuSMV liefert minimales Gegenbeispiel

Eine Ampelsteuerung Nichtdeterminismus Hauptstraße Man weiß nicht, wann und von wo ein Auto kommt Gewünschte Eigenschaften Sicherheit Die Ampeln von Hauptund Nebenstraße dürfen nie gleichzeitig grün sein Lebendigkeit Wenn ein Auto in der Nebenstraße wartet, wird irgendwann seine Ampel grün. Nebenstraße Induktions- Sensor

Steuerung durch ein C-Programm typedef typedef enum{,,,rot enum{,,,rot ampel ampel extern extern bool bool sensor sensor extern extern bool bool timeout( timeout( ) ) extern extern void void set_lights( set_lights( ) ) ampel ampel,, main(){ main(){ while(1){ while(1){ /* /* main main loop loop */ */ set_lights(,) set_lights(,) if if (timeout()) (timeout()) { { switch switch () () { { case case : : Rot Rot break break case case Rot Rot : : break break case case : : if if ( ( sensor sensor ) ) { { Rot Rot break break case case : : /*endswitch /*endswitch */ */ /* /* endif endif */ */ /* /* endwhile endwhile */ */ Wie testen wir dieses Programm? Können wir es verifizieren?

Modellierung als Automat sensor timeout :: :: sensor timeout :: :: Rot Rot timeout timeout timeout timeout :: Rot Rot :: timeout :: :: timeout Zu bestimmten Zeitpunkten kommt ein timeout-signal. Dann wird überprüft ob und wie die Ampeln geschaltet werden müssen.

Übersetzung in ein SMV-Programm Beginn der Datei Ampel_timeout.smv -- : Kommentar bis Zeilenende MODULE Komponente Variablendeklarationen: IVAR : input variables VAR : variables Aufzählungstyp ASSIGN : Beschreibung der Dynamik init(<variable>) : <expr> setzt Anfangswerte -- -- Die Die einfache einfache Ampelsteuerung Ampelsteuerung in in NuSMV NuSMV MODULE MODULE main main -- -- Die Die Hauptkomponente Hauptkomponente IVAR IVAR -- -- Unabhängige Unabhängige Variable Variable Signale Signale sensor sensor : boolean boolean timeout timeout : boolean boolean VAR VAR -- -- Zustandsvariable : {,,,Rot : {,,,Rot ASSIGN ASSIGN -- -- die die Dynamik Dynamik des des Systems Systems -- -- Anfangswerte: Anfangswerte: init() init() : : init() init() : :

Fortsetzung der SMV-Modellierung next beschreibt neuen Wert der Variablen Fallunterscheidung: case - esac: TRUE ( 1) : default-fall Fehlt dieser: Wert 1!!! -- -- Zustandsübergänge: next() next() : : case case timeout timeout & : Rot Rot timeout timeout & Rot Rot : timeout timeout & & sensor sensor : timeout timeout & : TRUE TRUE : esac esac -- -- endcase endcase next() next() : : case case timeout timeout & : timeout timeout & Rot Rot : timeout timeout & & sensor sensor : Rot Rot timeout timeout & : TRUE TRUE : esac esac -- -- endcase endcase

Temporale Eigenschaften Temporale Eigenschaften drücken wir mit den "Modalitäten" G always (immer) F sometimes (irgendwann) aus. G (( ) ( )) )) G (( sensor F ( )) )) Sicherheit Lebendigkeit Statt G und F verwendet man häufig auch [ ] box und diamond.

Rolle eines Model checkers Ampelspezifikation (als (als Datei Datei Ampel.smv) Ampel.smv) G ( ) SMV

Spezifikation in NuSMV LTLSPEC: Spezifikation einer zeitlichen Aussage in LTL: Lineare Temporale Logik Zeitliche Operatoren: G : Immer F : Irgendwann -- -- Nie Nie beide beide Ampeln Ampeln gleichzeitig gleichzeitig auf auf LTLSPEC LTLSPEC -- -- Immer: Immer: Nicht Nicht beide beide Ampeln Ampeln G!(!( & ) )

In NuSMV Aufruf aus UltraEdit: Temporale Spezifikation: Ergebnis von NuSMV:

Rolle eines Model checkers Ampelspezifikation (als (als Datei Datei Ampel.smv) Ampel.smv) G (( sensor -> -> F ) SMV Gegenbeispiel Signalfolge sensor sensor :: true true true true true true true true true true true true...... timeout timeout :: true true false false false false false false false false false false......

Rolle eines Model checkers Ampelspezifikation (als (als Datei Datei Ampel.smv) Ampel.smv) G (( sensor -> -> F ) SMV Gegenbeispiel Signalfolge bewirkt sensor sensor :: true true true true true true true true true true true true...... timeout timeout :: true true false false false false false false false false false false...... :: grün grün...... ::......

In NuSMV -- -- Immer: Immer: Wenn Wenn der der Sensor Sensor ein ein Auto Auto meldet, meldet, -- -- dann dann wird wird irgendwann irgendwann die die Ampel Ampel grün grün LTLSPEC LTLSPEC G (sensor (sensor -> -> F ) ) -- -- G ( sensor sensor -> -> F ) ) is is false false -- -- as as demonstrated demonstrated by by the the execution execution sequence: sequence: -> -> State State 1.1 1.1 <- <- sensor sensor 1 timeout timeout 1 Gegenbeispiel sensor -- -- loop loop starts starts here here -- sensor :: true true true true true true... Signalfolge... -- timeout timeout :true :true false false false false...... -> -> State State 1.2 1.2 <- <- timeout timeout 0 bewirkt :: grün grün...... :: Rot Rot Rot Rot...... Rot Rot -> -> State State 1.3 1.3 <- <-

Analyse sensor timeout sensor timeout h: h: h: h: s: s: s: s: Rot Rot timeout timeout timeout G (( sensor sensor F ( ( )) )) timeout h: h: Rot Rot s: s: timeout h: h: s: s: timeout Input : bewirkt Gegenbeispiel sensor sensor :: true true true true true true true true true true true true...... timeout timeout :: true true false false false false false false false false false false...... :: grün grün...... :: Rot Rot Rot Rot Rot Rot Rot Rot Rot Rot......

Der nervöse Autofahrer LTLSPEC LTLSPEC -- -- Wir Wir setzen setzen voraus, voraus, dass dass immer immer wieder wieder ( ( unendlich unendlich oft oft ) ) -- -- ein ein timeout timeout kommt kommt G G F F timeout timeout -> -> G G ( ( sensor sensor -> -> F F ) ) Gegenbeispiel von NuSMV:... -- loop starts here -> State 1.5 <- timeout 0 -> State 1.6 <- sensor 0 timeout 1 -> State 1.7 <- sensor 1 timeout 0 Es handelt sich um einen hypernervösen Autofahrer, der immer vor- und zurückfährt. Beim timeout ist er immer gerade nicht auf dem sensor.

Baldrian für den Fahrer Es gibt zwei Möglichkeiten, mit dem hypernervösen Autofahrer umzugehen Wir garantieren nur dem ruhigen Autofahrer, dass er auch irgendwann grün bekommt G F timeout -> G (sensor & Auto wartet -> F grün) Wir modifizieren die Ampelsteuerung, so dass auch hypernervöse Autofahrer mal grün bekommen Wir speichern das Sensorsignal in einer Variablen request und löschen es erst bei grün wieder

Temporaler Operator: Until G( G( sensor sensor (( sensor sensoruntil untilsensor & timeout timeout ))) ) Zusätzliche Annahme Definition : p until q : p wahr bis q eintritt Beispiel p :: true true true true false false false false true true false false false false...... q :: false false false false true true true true true true false false true true...... p wird von q abgelöst Im Beispiel gilt : p until q, aber : G ( p until q )

Versuch einer Verbesserung LTLSPEC LTLSPEC -- -- sensor sensor wartet wartet auf auf timeout timeout G( G( sensor sensor -> -> sensor sensor U sensor sensor & timeout) timeout) -> -> G(sensor G(sensor -> -> F ( ( )) )) Ergebnis von NuSMV: -- -- specification specification -- -- G( G( sensor sensor -> -> sensor sensor U sensor sensor & timeout) timeout) -> -> G(sensor G(sensor -> -> F ()) ()) -- -- is is false false as as demonstrated demonstrated by by the the following following execution execution sequence sequence -- --...... Die Analyse ergibt... sensor müsste nach dem timeout noch einen Takt warten...

Analyse G( sensor -> sensor U sensor & timeout) -> G(sensor -> F ( )) Input : bewirkt Gegenbeispiel von von NuSMV sensor sensor :: true true true true true true true true true true false false false false...... timeout timeout :: true true true true true true true true true true true true true true...... :: grün grün Ro Ro grün grün grün grün grün grün...... :: Rot Rot...... sensor timeout sensor timeout h: h: h: h: s: s: s: s: Rot Rot timeout timeout timeout Einige Autos kommen. wird grün, dann, danach kommt noch ein Auto. Es löst den sensor aus und setzt sofort wieder zurück. timeout h: h: Rot Rot s: s: timeout h: h: s: s: timeout Zunächst wird die Hauptampel grün. Wenn jetzt der sensor zurückgesetzt wird und bleibt, so bleibt das System im Zustand ( h:grün, s: )

Temporaler Operator X - next time Definition : X p ist jetzt wahr : p ist zum nächsten Zeitpunkt wahr Beispiel p :: false false true true false false false false true true false false false false...... Hier ist X p wahr Hier ist X p falsch Zusätzliche Annahme LTLSPEC -- -- sensor wartet noch 1 Takt nach timeout G( G( sensor -> -> sensor U (timeout & X sensor )) )) -> -> G(sensor -> -> F ( ))

Versuch einer Verbesserung LTLSPEC -- -- sensor wartet auf auf timeout G( G( sensor -> -> sensor U timeout & X sensor ) -> -> G(sensor -> -> F ( )) Ergebnis von NuSMV: -- -- specification ( G (sensor -> -> ((sensor U timeout) & X sensor)) -> -> G (sensor -> -> F )) is is true true

C-Programm für Ampel mit timer typedef typedef enum enum {,,,Rot {,,,Rot ampel ampel extern extern bool bool sensor sensor extern extern void void settimer( settimer( ) ) extern extern void void set_lights( set_lights( ) ) ampel ampel,, main(){ main(){ settimer(10) settimer(10) while(1){ while(1){ /* /* main main loop loop */ */ set_lights(,) set_lights(,) if if (timeout()) (timeout()) { { switch switch () () { { case case : : Rot Rot settimer(1) settimer(1) break break case case Rot Rot : : settimer(10) settimer(10) break break case case : : if if (sensor (sensor ) ) { { Rot Rot settimer(1) settimer(1) break break case case : : settimer(6) settimer(6) /*endswitch /*endswitch */ */ /* /* endif endif */ */ /* /* endwhile endwhile */ */

Zusammenfassung: Modell Modell endl. endl. Automat Automat Formel Formel temp. temp. Logik Logik Model Checker Evtl. Evtl. noch noch Simulator Simulator Beweis Beweis oder oder Gegenbeispiel Gegenbeispiel Wichtig: Beweis, bzw. Gegenbeispiel entstehen auf Knopfdruck

Hausaufgaben 1. Installieren Sie sich NuSMV und bringen Sie die Beispiele der Vorlesung zum Laufen 2. Modifizieren Sie das Ampel-Beispiel, indem Sie eine Variable request einführen Es soll neben der Sicherheitseigenschaft, u.a. auch gelten (mit served : ) : ( G F timeout ) -> G ( sensor -> F served) 3. Führen Sie einen timer ein, der das timeout generiert. Jede neue Ampelphase stellt den timer, um zu garantieren, dass die Phase eine bestimmte Zeitdauer erhalten bleibt. Die Grünphase mind. 10 ticks, die Rotphase mindestens 6 ticks, und Rot je 1 tick. Der timer wird in jedem Schritt erniedrigt. Definieren Sie timeout als timer0. Es sollen u.a. gelten: Die Sicherheitseigenschaft, G F timeout, G (sensor -> F served). 4. Ersetzen Sie request durch eine numerische Variable. Ziel ist es, einfacher bestimmen zu können, wie lange ein Auto schon wartet. Versuchen Sie folgende oder ähnliche Eigenschaften zu garantieren G ( request < 20) -- Ein Auto wartet nicht länger als 20 ticks G ( request > 15 -> served X served ) -- Wartet es 15 ticks, so bekommt es spätestens zum nächsten tick. G ( request 0 -> ( request0 U sensor) G ( request >0 -> ( request >0 U served)