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