Deductive Verification of Object-Oriented Software Dynamic Frames, Dynamic Logic and Predicate Abstraction

Deductive Verification of Object-Oriented Software Dynamic Frames, Dynamic Logic and Predicate Abstraction

Benjamin Weiß Deductive Verification of Object-Oriented Software Dynamic Frames, Dynamic Logic and Predicate Abstraction Deductive Verification of Object-Oriented Software Dynamic Frames, Dynamic Logic and Predicate Abstraction by Benjamin Weiß Dissertation, Karlsruher Institut für Technologie Fakultät für Informatik Tag der mündlichen Prüfung: 1. Dezember 2010 Impressum Karlsruher Institut für Technologie (KIT) KIT Scientific Publishing Straße am Forum 2 D-76131 Karlsruhe www.ksp.kit.edu KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Diese Veröffentlichung ist im Internet unter folgender Creative Commons-Lizenz publiziert: http://creativecommons.org/licenses/by-nc-nd/3.0/de/ KIT Scientific Publishing 2011 Print on Demand ISBN 978-3-86644-623-6 Deductive Verification of Object-Oriented Software Dynamic Frames, Dynamic Logic and Predicate Abstraction zur Erlangung des akademischen Grades eines Doktors der Naturwissenschaften von der Fakult¨atf¨urInformatik des Karlsruher Instituts f¨urTechnologie genehmigte Dissertation von Benjamin Weiß aus Heidelberg Tag der m¨undlichenPr¨ufung:1. Dezember 2010 Erster Gutachter: Prof. Dr. Peter H. Schmitt, Karlsruher Institut f¨urTechnologie Zweiter Gutachter: Prof. Dr. Arnd Poetzsch-Heffter, Technische Universit¨atKaiserslautern Acknowledgements First of all, I would like to express my gratitude to my Doktorvater Prof. Dr. Peter H. Schmitt for giving me the opportunity to undertake this project, for his scien- tific guidance, for his continued support of my work, and for the trust he placed in me. I am thankful to Prof. Dr. Arnd Poetzsch-Heffter for agreeing to be the second reviewer of this thesis, and for fulfilling his role with commitment. Thanks also go to Prof. Dr. Ralf Reussner and to Juniorprof. Dr. Mana Taghdiri for being examiners in the thesis defense. I am highly grateful to my former and current colleagues Dr. Christian Engel, David Farag´o,Mattias Ulbrich and Dr. Frank Werner for the inspiring discus- sions, the teamwork, the excellent working atmosphere, and the joint breaks from computer science. The same applies to our new group member Christoph Scheben, and to the members of the other verification-related research groups at the Institute for Theoretical Computer Science: Thorsten Bormer, Daniel Bruns, Dr. Stephan Falke, Aboubakr Achraf El Ghazi, Christoph Gladisch, Florian Merz, Dr. Hendrik Post, Dr. Carsten Sinz, and Dr. Olga Tveretina. Many thanks also go to our administrators Lilian Beckert, Bernd Giesinger and Elke Sauer. This work is deeply rooted in the KeY project, and it would not have been possible without the great work of many KeY people. I would like to sincerely thank the leaders of KeY|Prof. Dr. Bernhard Beckert, Prof. Dr. Reiner H¨ahnle and Prof. Dr. Peter H. Schmitt|as well as all past and present members of the project, and in particular Dr. Wolfgang Ahrendt, Dr. Richard Bubel, Dr. Vladimir Klebanov, Dr. Wojciech Mostowski, Dr. Andreas Roth, Dr. Philipp R¨ummerand Dr. Steffen Schlager. Special thanks go to my friends and family. I gratefully acknowledge the financial support of my work by the Deutsche Forschungsgemeinschaft (DFG), the Karlsruhe Institute of Technology (KIT), and the European Cooperation in Science and Technology (COST). Karlsruhe, December 2010 Benjamin Weiß ix Zusammenfassung (German Summary) Diese Arbeit entstand im Rahmen des Forschungsprojekts KeY. Kernbereich des KeY-Projekts ist die deduktive Verifikation objektorientierter Software, also die Uberpr¨ ufung¨ der Korrektheit objektorientierter Programme mittels logischen Schließens. Das Ergebnis einer erfolgreichen deduktiven Verifikation ist ein for- maler Beweis fur¨ die Korrektheit des untersuchten Programms. Das im Rahmen des KeY-Projekts entwickelte KeY-System erlaubt die deduktive Verifikation von Programmen, die in einer sequentiellen Teilmenge der Programmiersprache Java geschrieben sind. Die Bedeutung des Begriffs Korrektheit ergibt sich aus einer formalen Spezifika- tion, die das gewunschte¨ Verhalten eines konkreten Programms oder Programm- teils beschreibt. Bei der vertragsbasierten Spezifikation (engl.: design by contract) werden die Methoden des Programms mit sogenannten Vertr¨agen versehen, die mit Hilfe von Vor- und Nachbedingungen das Ein-/Ausgabeverhalten der Metho- den beschreiben. Zus¨atzlich werden Objektinvarianten angegeben, die festlegen, wann sich ein Objekt zur Laufzeit in einem \gultigen"¨ Zustand befindet. Eine Art De-facto-Standard fur¨ die vertragsbasierte Spezifikation von Java-Programmen { und die bevorzugte Eingabesprache des KeY-Systems { ist die Java Modeling Language (JML). Ein zentrales Ziel bei der Verifikation objektorientierter Programme ist die Modularit¨at der Verifikation: Einzelne Programmteile (z.B. Methoden) sollen un- abh¨angig von ihrem Programmkontext verifiziert werden, und eine einmal bewie- sene Korrektheitsaussage soll bei Erweiterung des Programms erhalten bleiben. Hierzu muss bereits die Spezifikation geeignet formuliert werden. Insbesondere verwendet man in ¨offentlich sichtbaren Spezifikationen nicht die internen Daten- strukturen des spezifizierten Programmteils, sondern fuhrt¨ sogenannte abstrakte Variablen ein (die in zwei unterschiedlichen Auspr¨agungen auch als Modell- und Geistervariablen bekannt sind). Abstrakte Variablen existieren nur auf der Ebene der Spezifikation, und ihre Beziehung zu den konkreten Datenstrukturen wird als Implementierungsgeheimnis behandelt. Das Konzept der abstrakten Variablen ist zwar im Prinzip seit den 1970er Jahren bekannt, aber im Detail mit einigen Schwierigkeiten verbunden, deren L¨osung bis heute Forschungsgegenstand ist. Interessant ist insbesondere das Zu- sammenspiel von abstrakten Variablen mit Aussagen uber¨ die Speicherstellen, die von einem Programmteil h¨ochstens ge¨andert werden durfen¨ (engl.: modifies clau- xi ses). Solche Aussagen sind fur¨ die modulare Verifikation unverzichtbar. Auch hier durfen¨ in einer abstrakten Spezifikation nicht direkt die von der Implementierung intern verwendeten Speicherstellen benutzt werden. Umgekehrt h¨angen die Werte abstrakter Variablen von konkreten Speicherstellen ab, die im Allgemeinen eben- falls nicht alle ¨offentlich sind. Das Kernproblem ist letztlich, unerwunschte¨ Alias- Effekte zwischen konkreten und/oder abstrakten Variablen auszuschließen, ohne dabei alle beteiligten Speicherstellen explizit zu kennen. Eine ¨ahnliche Problema- tik ist mit Objektinvarianten verbunden, deren Gultigkeit¨ in einem Programm- zustand typischerweise ebenfalls von nicht-¨offentlichen Speicherstellen abh¨angt. Altere¨ L¨osungsans¨atze fur¨ diesen Problemkreis sind entweder nicht modular, oder sie basieren auf teils drastischen Einschr¨ankungen der erlaubten Program- me. Besitzbasierte Ans¨atze (engl.: ownership) erlauben eine effiziente Behandlung vieler typischer F¨alle, sind aber fur¨ nicht-hierarchische Objektstrukturen weni- ger geeignet. Ein vor wenigen Jahren vorgeschlagener Ansatz ohne derartige Ein- schr¨ankungen ist die Verwendung sogenannter dynamischer Rahmen (engl.: dyna- mic frames): abstrakte Variablen, deren Werte selbst Mengen von Speicherstellen sind. Die fur¨ eine Methode oder eine abstrakte Variable relevanten Speicherberei- che und ihre dynamische Ver¨anderung zur Laufzeit werden hier mit Hilfe von Vor- und Nachbedingungen und mengentheoretischen Operatoren explizit spezifiziert. Trotz ihrer Einfachheit und Allgemeinheit hat diese Technik bisher noch keinen Einzug in verbreitete vertragsbasierte Spezifikationssprachen wie JML gefunden. Dynamische Logik ist ein etablierter Ansatz zur deduktiven Programmveri- fikation. Dynamische Logik erweitert Pr¨adikatenlogik erster Stufe um modale Operatoren, die ausfuhrbare¨ Programmfragmente enthalten. Eine konkrete Vari- ante der dynamischen Logik, bei der die Programmfragmente in Java geschrieben sind, ist die Grundlage der Verifikation im KeY-System. Eine zentrale Neuerung dieser Variante der dynamischen Logik ist das Konzept der expliziten Zustands- aktualisierungen (engl.: updates), mit deren Hilfe Zustandsuberg¨ ¨ange des Pro- gramms syntaktisch in einer programmiersprachenunabh¨angigen Form dargestellt werden. Dies erlaubt es, die deduktive Programmverifikation als eine symbolische Ausfuhrung¨ des Programms zu fassen. Auf dynamischer Logik basierende Verifikationsverfahren bieten bisher keine Unterstutzung¨ fur¨ Ans¨atze wie dynamische Rahmen, und erreichen daher das Ziel der Modularit¨at nur in begrenztem Umfang. In der dynamischen Logik des KeY-Systems ist eine Unterstutzung¨ von dynamischen Rahmen nicht unmittelbar m¨oglich, da die der Logik zugrundeliegende Modellierung des Halden-Speichers mit sogenannten nichtrigiden Funktionssymbolen es zwar erlaubt, in logischen Formeln uber¨ die Werte von Speicherstellen in Programmzust¨anden zu sprechen, nicht aber uber¨ die Speicherstellen als solche. Ein weiteres Ziel bei der deduktiven Verifikation objektorientierter Programme ist die weitestm¨ogliche Automatisierung des Verifikationsvorgangs. Neben Inter- xii aktionen zum Schlussfolgern auf pr¨adikatenlogischer Ebene ist Benutzerinterak- tion in einer Verifikationsumgebung wie dem KeY-System vor allem zur Behand- lung von Schleifen in Programmen erforderlich. Schleifen k¨onnen bei der symbo- lischen Ausfuhrung¨ des Programms im Allgemeinen nicht automatisch behandelt werden, sondern es mussen¨ Schleifeninvarianten angegeben werden, also pr¨adi- katenlogische Formeln uber¨ den Variablen des Programms, die zu Beginn eines jeden Durchlaufs der Schleife gelten. Andererseits

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    294 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us