Vortragsfolien - bei der Forschungsgruppe Logik und Formale

Werbung
Das KeY-Projekt:
Integration objekt-orientierter Modellierung
und formaler Methoden
W. Ahrendt
M. Giese
T. Baar
R. Hähnle
A. Roth
B. Beckert
W. Menzel
S. Schlager
Chalmers University
R. Bubel
W. Mostowski
P. H. Schmitt
Universität Karlsruhe
FoMSESS Jahrestagung, Karlsruhe, Mai 2003
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.1
Beobachtung
Kein verbreiteter Einsatz
Formaler Methoden in der
Software-Industrie
???
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.2
Gründe für Zurückhaltung
Keine Unterstützung „echter“ Programmiersprachen
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.3
Gründe für Zurückhaltung
Keine Unterstützung „echter“ Programmiersprachen
Verifikation erfordert Beherrschung Logik höherer Stufe,
Taktiksprachen usw.
Verifikation ist nicht in CASE-Werkzeuge und
Softwareentwicklungsprozesse integriert
Verifikation in frühen Phasen der Entwicklung
ist nicht möglich
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.3
Gründe für Zurückhaltung
Keine Unterstützung „echter“ Programmiersprachen
Verifikation erfordert Beherrschung Logik höherer Stufe,
Taktiksprachen usw.
Verifikation ist nicht in CASE-Werkzeuge und
Softwareentwicklungsprozesse integriert
Verifikation in frühen Phasen der Entwicklung
ist nicht möglich
Keine Unterstützung bei der Erstellung formaler Spezifikationen
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.3
Gründe für Zurückhaltung
Keine Unterstützung „echter“ Programmiersprachen
Verifikation erfordert Beherrschung Logik höherer Stufe,
Taktiksprachen usw.
Verifikation ist nicht in CASE-Werkzeuge und
Softwareentwicklungsprozesse integriert
Verifikation in frühen Phasen der Entwicklung
ist nicht möglich
Keine Unterstützung bei der Erstellung formaler Spezifikationen
Formale-Methoden-Entwickler
und Software-Ingenieure
leben in verschiedenen Welten!
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.3
Günstige Entwicklungen
Modellierung und Spezifikation
Unified Modeling Language – UML
Graphische Sprache für objektorientierte Modellierung
Standard der Object Management Group (OMG)
Object Constraint Language – OCL
Formale textuelle Sprache für Anforderungsspezifikation
Teil des UML-Standards
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.4
Günstige Entwicklungen
Modellierung und Spezifikation
Unified Modeling Language – UML
Graphische Sprache für objektorientierte Modellierung
Standard der Object Management Group (OMG)
Object Constraint Language – OCL
Formale textuelle Sprache für Anforderungsspezifikation
Teil des UML-Standards
Konsolidierung und Dokumentation von Entwurfswissen
Muster, Idiome, Architekturen, Frameworks usw.
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.4
Günstige Entwicklungen
Modellierung und Spezifikation
Unified Modeling Language – UML
Graphische Sprache für objektorientierte Modellierung
Standard der Object Management Group (OMG)
Object Constraint Language – OCL
Formale textuelle Sprache für Anforderungsspezifikation
Teil des UML-Standards
Konsolidierung und Dokumentation von Entwurfswissen
Muster, Idiome, Architekturen, Frameworks usw.
Programmiersprachen
Java, C#
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.4
Günstige Entwicklungen: Fazit
Konzepte und Sprachen,
die Formalen Methoden zugänglich sind,
finden heute in der Praxis breite Verwendung
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.5
Das Kredo des KeY-Projektes
Formale Methoden müssen – und können – mit
kommerziellen Methoden, Werkzeugen, und Sprachen
der Software-Entwicklung integriert werden
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.6
Das Kredo des KeY-Projektes
Formale Methoden müssen – und können – mit
kommerziellen Methoden, Werkzeugen, und Sprachen
der Software-Entwicklung integriert werden
Integriertes Werkzeug für die
Modellierung
Entwicklung
formale Spezifikation
formale Verifikation
objektorientierter Programme
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.6
Das KeY-System
Erweiterung
für formale
Spezifikation
CASE-Werkzeug
UML
Java
OCL
Verifikationskomponente
Dynamische Logik
Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.7
Das KeY-System — Entwurf mit UML
Erweiterung
für formale
Spezifikation
CASE-Werkzeug
UML
Java
OCL
Verifikationskomponente
Dynamische Logik
Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.7
Das KeY-System
Die Benutzeroberfläche
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.8
Das KeY-System
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.8
Das KeY-System
Erweiterung
für formale
Spezifikation
CASE-Werkzeug
UML
Java
OCL
Verifikationskomponente
Dynamische Logik
Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.9
Das KeY-System — Verifikation
Erweiterung
für formale
Spezifikation
CASE-Werkzeug
UML
Java
OCL
Verifikationskomponente
Dynamische Logik
Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.9
Verifikationskomponente
Übersetzung von OCL in Dynamische Logik
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.10
Verifikationskomponente
Übersetzung von OCL in Dynamische Logik
Erzeugung prädikatenlogischer Beweisziele
z. B. Invariante der Unterklasse impliziert Invariante der Oberklasse
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.10
Verifikationskomponente
Übersetzung von OCL in Dynamische Logik
Erzeugung prädikatenlogischer Beweisziele
z. B. Invariante der Unterklasse impliziert Invariante der Oberklasse
Erzeugung von Beweiszielen in Dynamischer Logik
z. B. Implementierung erhält Invariante
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.10
Verifikationskomponente
Übersetzung von OCL in Dynamische Logik
Erzeugung prädikatenlogischer Beweisziele
z. B. Invariante der Unterklasse impliziert Invariante der Oberklasse
Erzeugung von Beweiszielen in Dynamischer Logik
z. B. Implementierung erhält Invariante
Korrektheitsmanagement
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.10
Übersetzung von OCL in Logik
OCL
context PayCard inv:
PayCard.allInstances - forAll(c1, c2 | c1.id = c2.id
implies c1 = c2
)
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.11
Übersetzung von OCL in Logik
OCL
context PayCard inv:
PayCard.allInstances - forAll(c1, c2 | c1.id = c2.id
implies c1 = c2
)
Getypte Prädikatenlogik erster Stufe
(OO-Syntax)
(∀ c1, c2: PayCard)
.
.
=
=
c2.id → c1 c2)
(c1.id
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.11
Das KeY-System
Erweiterung
für formale
Spezifikation
CASE-Werkzeug
UML
Java
OCL
Verifikationskomponente
Dynamische Logik
Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.12
Das KeY-System — Deduktion
Erweiterung
für formale
Spezifikation
CASE-Werkzeug
UML
Java
OCL
Verifikationskomponente
Dynamische Logik
Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.12
Deduktionskomponente
Logik
Dynamische Logik für Java
Kalkül
Sequenzenkalkül für diese Logik
Beweissuchprozedur
Automatische/interaktive Beweiskonstruktion
Erzeugung von Gegenbeispielen
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.13
Dynamische Logik: Vorteile
Verständlichkeit von Regeln und Beweisen
Formeln enthalten Programme
(Keine Kodierung)
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.14
Dynamische Logik: Vorteile
Verständlichkeit von Regeln und Beweisen
Formeln enthalten Programme
(Keine Kodierung)
Basisregel für jedes Programmkonstrukt
Regelanwendungen entsprechen
– symbolischer Ausführung
und/oder
– einfacher (lokaler) Programmtransformation
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.14
Dynamische Logik: Syntax und Semantik
Syntax
Basis: Getypte Prädikatenlogik erster Stufe
Modale Operatoren [ p]] und h pi für jedes (Java-)Programm p
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.15
Dynamische Logik: Syntax und Semantik
Syntax
Basis: Getypte Prädikatenlogik erster Stufe
Modale Operatoren [ p]] und h pi für jedes (Java-)Programm p
Semantik
Operatoren beziehen sich auf den Endzustand von p
[ p]] F :
h pi F :
Falls p terminiert, dann gilt F im Endzustand
(partielle Korrektheit)
p terminiert und F gilt im Endzustand
(totale Korrektheit)
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.15
Dynamische Logik
card.balance > 1, i > 0 ` h
Einfaches Beispiel
icard.balance > 1
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.16
Kalkül: Regel für if-else
Prämissen
q iF
p
b
PRE ` h
.
PRE, b = false ` h qi F
.
PRE, b = true ` h pi F
Konklusion
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.17
Kalkül: Regel für if-else
Prämissen
neues Beweisziel
Konklusion
q iF
p
b
PRE ` h
.
PRE, b = false ` h qi F
.
PRE, b = true ` h pi F
altes Beweisziel
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.17
Das KeY-System
Die Deduktionskomponente
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.18
Das KeY-System
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.19
Java/OO-Features
Ziel ist die Unterstützung aller
Konstrukte und Eigenschaften
einer realen Programmiersprache
(hier: erfordert ca. 150 Regeln)
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.20
Java/OO-Features
Zustandsänderung
Assignment
„Aliasing“
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.21
Java/OO-Features
Zustandsänderung
Assignment
„Aliasing“
Attribute und Methoden
Attribute
Behandelt als nicht-rigide Funktionen
Dereferenzieren von Attributen und Methoden
Kalkül muß Javas Regeln zum Binden implementieren
(hängt ab von Kontext, Sichtbarkeit etc.)
Dynamisches Binden
Polymorphismus
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.21
Java/OO-Features
Objekte
Erzeugen von Objekten
Initialisieren von Objekten
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.22
Java/OO-Features
Objekte
Erzeugen von Objekten
Initialisieren von Objekten
-
-
-Pointer)
,
,
Ausnahmen der Laufzeitumgebung (z. B.
Ausnahmebehandlung, abrupte Terminierung
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.22
Java/OO-Features
Objekte
Erzeugen von Objekten
Initialisieren von Objekten
-
-
-Pointer)
,
,
Ausnahmen der Laufzeitumgebung (z. B.
Ausnahmebehandlung, abrupte Terminierung
Eingebaute Datentypen
(zyklische Integers)
Komplexe Ausdrücke mit Seiteneffekten
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.22
Java und Java Card
Eigenschaften von Java (nicht von Java Card),
die nicht ohne weiteres handhabbar sind (langfristige Ziele)
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.23
Java und Java Card
Eigenschaften von Java (nicht von Java Card),
die nicht ohne weiteres handhabbar sind (langfristige Ziele)
Threads
(uneingeschränkte Nebenläufigkeit)
Fließkomma-Arithmetik
Dynamisches Nachladen von Klassen
Graphische Benutzerschnittstellen
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.23
Stand des KeY-Projektes
Start:
Nov. 1998
Aktueller Stand:
Erste Version des System fertiggestellt
Zweite Projektphase begonnen
Finanzierung:
DFG (drei Stellen)
Vinnova, STINT
Die KeY-Gruppe:
Projektleiter:
B. Beckert, P. H. Schmitt
R. Hähnle (Göteborg)
Mitarbeiter:
(1 KA + 2 GB)
3 Postdocs
7 Doktoranden (3 KA + 4 GB)
10 wiss. Hilfskräfte und Diplomanden
Web-Seite:
(KA)
i12www.ira.uka.de/ ˜key
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.24
Fallstudien
Berechnung von Bremswegen und Höchstgeschwindigkeiten
DB Systems (Deutsche Bahn)
Role Based Access Control
SAP
Java Collections Framework
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.25
Ausblick
Mittelfristige Ziele / Weitere Themen
Modellierungs- und Spezifikations-Methodologie,
die die Verifikation objektorientierter Programme unterstützt
Integration der Verifikation in Prozesse der
objektorientierten Software-Entwicklung
Verifikation von Java mit Threads (Nebenläufigkeit)
Integration anderer formaler Methoden
(insbesondere Modellprüfungsverfahren, Statische Analyse,
Entscheidungsverfahren, Testfall-Generierung)
Andere Arten von UML-Diagrammen
(insbesondere State Charts)
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.26
Regel für Ausnahme-Behandlung
r
r ωii F
T e q
p
exc
exc
ω iF
PRE ` U h π
r
e exc q
T
exc
PRE ` U hπ
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.27
Regel für while-Schleifen
p iF
p iF
b
b
PRE ` h
b p
PRE ` h
Symbolische Ausführung einer Schleifen-Iteration
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.28
Regel für while-Schleifen
p iF
p iF
Ziel für
b
b
p
PRE ` h
l2
b l1
PRE ` h
Ziel für
Symbolische Ausführung einer Schleifen-Iteration
→
→
Konstruktion von p’:
l1
l2
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.28
Beispiel
Beweisziel
= 10, wenn gestartet mit 0 ≤ ≤ 10
p






terminiert mit







Formal
0≤ ,
.
≤ 10 ` h pi = 10
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.29
.
= 10 `
Beispiel
.
= 10
Induktionsannahme
.
n ≤ 9, = 10 − n
.
` h pi = 10
leeres Prog.
break
break
if
if
while
while
if
if
n= 0
n → n+1
Induktion
.
.
` (∀ n)((n ≤ 10 ∧ = 10 − n) → h pi = 10)
Wahl der Induktionsannahme
0≤ ,
.
≤ 10 ` h pi = 10
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.30
Noch einmal: Regel für if-else
„Simple“ Version
q iF
p
b
PRE ` h
.
PRE, b = false ` h qi F
.
PRE, b = true ` h pi F
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.31
Noch einmal: Regel für if-else
„Simple“ Version
q iF
p
b
PRE ` h
.
PRE, b = false ` h qi F
.
PRE, b = true ` h pi F
Java-Version
U:
π:
ω:
q ωii F
p
b
PRE ` U h π
.
PRE, U (b = false) ` U h π q ωii F
.
PRE, U (b = true) ` U h π p ωii F
Updates
Präfix
„Rest“ des Programms
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.31
Java-Problematik: Abrupte Terminierung
Problem
,
,
,
ändern den Kontrollfluß abrupt
Transformation h p; qi F
h pih qi F nicht möglich
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.32
Java-Problematik: Abrupte Terminierung
Problem
,
,
,
ändern den Kontrollfluß abrupt
Transformation h p; qi F
h pih qi F nicht möglich
Lösung
.
i =2
.
i =2
...
...
“
` h
` h
Beispiel:
der „Rest“ des Programms
“, „
Postfix ω :
Folge von „ “, „
Präfix π :
Regelanwendung auf „erstes aktives Statement“ p in h π p ωii F
FoMSESS Jahrestreffen, Karlsruhe, Mai 2003 – p.32
Herunterladen