Verifikation von Programmen in Java 5 ObjektForum Karlsruhe Mattias Ulbrich Betreuung: Prof. Dr. P. H. Schmitt Institut für Theoretische Informatik Universität Karlsruhe (TH) 8. Oktober 2007 Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 1 / 13
Überblick 1 Verifikation mit KeY 2 Java 5 3 Generische Klassen 4 Typsichere Aufzählungstypen 5 Zusammenfassung Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 2 / 13
Formale Verifikation von JavaCard-Programmen Anbindung an Eclipse / Together Automatischer und interaktiver Beweiser Spezifikation in OCL / JML / JavaDL Reduktion auf Prädikatenlogik Dynamische Prädikatenlogik Symbolische Ausführung Erstellen von Testfällen Beweisver pflichtungen Symbolisches Debuggen Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 3 / 13
Ein Beispiel Design by Contract class Account { int balance; } /*@ requires amount >= 0; @ ensures balance == \old(balance)-amount; @*/ void debit(int amount) { balance = balance - amount; } Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 4 / 13
Ein Beispiel Design by Contract class Account { int balance; } /*@ requires amount >= 0; @ ensures balance == \old(balance)-amount; @*/ void debit(int amount) { balance = balance - amount; } Daraus entsteht die Beweisverpflichtung amount 0 debit(amount); (balance = balance old amount) Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 4 / 13
1 Schritt halten mit der industriellen Entwicklung 2 Wie flexibel und anpassungsfähig ist KeY? 3 Unterstützen die neuen Sprachelemente die Verifikation? 4 Benötigen sie Verifikation? Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 5 / 13
Spracherweiterungen in Java 5 Typsichere Aufzählungstypen Kovariante Ergebnistypen Iterationsschleifen Annotationen Automatische Typ-Wandlung (Auto-Boxing) Statische Import - Direktiven Generische Klassen Variable Argumentenzahl Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 6 / 13
Spracherweiterungen in Java 5 Typsichere Aufzählungstypen Kovariante Ergebnistypen Iterationsschleifen Annotationen Automatische Typ-Wandlung (Auto-Boxing) Statische Import - Direktiven Generische Klassen Variable Argumentenzahl Irrelevant für die Verifikation Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 6 / 13
Spracherweiterungen in Java 5 Typsichere Aufzählungstypen Kovariante Ergebnistypen Iterationsschleifen Annotationen Automatische Typ-Wandlung (Auto-Boxing) Statische Import - Direktiven Generische Klassen Variable Argumentenzahl Irrelevant für die Verifikation Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 6 / 13
Spracherweiterungen in Java 5 Typsichere Aufzählungstypen Kovariante Ergebnistypen Iterationsschleifen Annotationen Automatische Typ-Wandlung (Auto-Boxing) Statische Import - Direktiven Generische Klassen Variable Argumentenzahl Irrelevant für die Verifikation Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 6 / 13
Generische Klassen wie sie sein sollten Java ohne Generika Stack st = new Stack(); st.push("string"); String s = (String)st.pop(); Java 5 Stack<String> st = new Stack<String>(); st.push("string"); String s = st.pop(); Allgemeinster Typ wird verwendet Typüberprüfung erst zur Laufzeit Typwandel-Ausnahmen möglich! Konkreter Typ als Parameter festgelegt Typüberprüfung bereits durch den Übersetzer Keine Typwandel-Ausnahme möglich Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 7 / 13
Generische Klassen wie sie wirklich sind Type Erasure Typ-Parameter werden vom Übersetzer verworfen. Zur Laufzeit gibt es nur unparametrisierte Klassen (raw types). Stack<String> stack1 = new Stack<String>(); stack1.push("string"); Object object = stack1; Stack<Integer> stack2 = (Stack<Integer>)object; Integer i = stack2.pop(); throws ClassCastException Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 8 / 13
Generische Klassen wie sie wirklich sind Generische Klassen können den,,speicher verschmutzen (heap pollution). Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 9 / 13
Generische Klassen wie sie wirklich sind Generische Klassen können den,,speicher verschmutzen (heap pollution). Abhilfe Formal beweisen, dass keine Speicherverschmutzung vorliegt. KeY mit parametrisierter Typhierarchie kann das KeY benutzen, um Generika wirklich typsicher zu machen. Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 9 / 13
Generische Klassen wie sie wirklich sind Generische Klassen können den,,speicher verschmutzen (heap pollution). Abhilfe Formal beweisen, dass keine Speicherverschmutzung vorliegt. KeY mit parametrisierter Typhierarchie kann das KeY benutzen, um Generika wirklich typsicher zu machen. Herausforderung: Drastische Änderungen der Logik Unendliche Typhierarchie Typen als Objekte in der Logik Typvariablen als Typen Existenzielle und universelle Typen Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 9 / 13
Zusammenfassung Zur Erinnerung: Untersuchungsziele 1 Wie unterstützen die Neuheiten die Verifikation, 2 wie benötigen sie Verifikation und 3 wie flexibel und anpassungsfähig ist KeY als System. Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 10 / 13
Zusammenfassung Zur Erinnerung: Untersuchungsziele 1 Wie unterstützen die Neuheiten die Verifikation, 2 wie benötigen sie Verifikation und 3 wie flexibel und anpassungsfähig ist KeY als System. Feature braucht Verif. unterstützt Verif.,,Passt Aufzählungstypen JA JA JA Neue Schleifen Auto-Boxing Generika Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 10 / 13
Zusammenfassung Zur Erinnerung: Untersuchungsziele 1 Wie unterstützen die Neuheiten die Verifikation, 2 wie benötigen sie Verifikation und 3 wie flexibel und anpassungsfähig ist KeY als System. Feature braucht Verif. unterstützt Verif.,,Passt Aufzählungstypen JA JA JA Neue Schleifen JA JA JA Auto-Boxing Generika Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 10 / 13
Zusammenfassung Zur Erinnerung: Untersuchungsziele 1 Wie unterstützen die Neuheiten die Verifikation, 2 wie benötigen sie Verifikation und 3 wie flexibel und anpassungsfähig ist KeY als System. Feature braucht Verif. unterstützt Verif.,,Passt Aufzählungstypen JA JA JA Neue Schleifen JA JA JA Auto-Boxing JA NEIN NEIN Generika Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 10 / 13
Zusammenfassung Zur Erinnerung: Untersuchungsziele 1 Wie unterstützen die Neuheiten die Verifikation, 2 wie benötigen sie Verifikation und 3 wie flexibel und anpassungsfähig ist KeY als System. Feature braucht Verif. unterstützt Verif.,,Passt Aufzählungstypen JA JA JA Neue Schleifen JA JA JA Auto-Boxing JA NEIN NEIN Generika JA JA NEIN Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 10 / 13
Vielen Dank für Ihre Aufmerksamkeit! www.key-project.org Mattias Ulbrich (ITI) Verifikation von Programmen in Java 5 8. Oktober 2007 11 / 13