Verifikation von Programmen in Java 5

Ähnliche Dokumente
Formale Spezifikation mit Java Modeling Language

Neuere Sprachelemente in Java

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Proseminar: C# und.net. 6. Vortag Generische Klassen. Sebastian Wolf

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Einstieg in die Informatik mit Java

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

Universität Karlsruhe (TH)

Design by Contract with JML

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Programmieren 2 16 Java Collections und Generizität

Deductive Software Verification The KeY Book Haupt- und Proseminar in SoSe 2017

Typisierung. Prüfungen zur Übersetzungszeit Type Test und Type Cast Bedingte Zuweisung Nil Übergangsparameter Grade der Typisierung. 3.

Javakurs für Anfänger

9. Kapitel GENERICS. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Java I Vorlesung Generics und Packages

Einführung in die Programmierung

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 2: Einstieg in die OOP

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Properties und Proxies

Programmieren in Java

Generisches Programmieren. Generisches Programmieren

SmallTalk - Eine kurze Einführung

JUnit 4 Tutorial. Wolfgang Stöttinger

Methoden und Wrapperklassen

Programmierung im Grossen

Java-Grundkurs für Wirtschaftsinformatiker

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

II.1.1. Erste Schritte - 1 -

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

Theorie zu Übung 8 Implementierung in Java

ADT: Java Collections und ArrayList

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Gebundene Typparameter

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Einstieg in die Informatik mit Java

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Informatik II Übung 5

Vererbung, Polymorphie

Objektorientierte Programmierung Studiengang Medieninformatik

II.4.5 Generische Datentypen - 1 -

Computeranwendung und Programmierung (CuP)

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Systematisches Testen

A(T1) A(T2) A(T1) A(T2)

Einstieg in die Informatik mit Java

4. Vererbung Die Klasse Object. Die Klasse Object

Vererbung. Martin Wirsing. Ziele. Vererbung

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Überblick. Java 5. Java 6. Java 7. Referenzen. neue Sprachfeatures Erweiterungen Klassenbibliothek. Erweiterungen Klassenbibliothek

Programmieren in Java

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

Inhaltsverzeichnis 1 Der objektorientierte Ansatz 2 Elementare Objekte und Ausdrücke

Wiederholung aus SWE2

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Transkript:

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