Assertions (Zusicherungen)



Ähnliche Dokumente
SEP 114. Design by Contract

Design by Contract with JML

Client-Server-Beziehungen

Tagesprogramm

Statuten in leichter Sprache

Programmierkurs Java

Ablauf Vorstellungsgespräch

Nathan Burgener. Design by Contract. Modul SWE

Einführung in die Informatik Tools

Grundlagen. Kapitel 1

Grundlagen der Künstlichen Intelligenz

Grundbegriffe der Informatik

Java: Vererbung. Teil 3: super()

Java Kurs für Anfänger Einheit 5 Methoden

Hauptseminar AOSD. Design-by-Contract

Kapiteltests zum Leitprogramm Binäre Suchbäume

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Was ist Logische Programmierung?

Wie kann man Kreativität und Innovation fördern? Psychologische Ansätze zum Ideenmanagement

Grundlagen der Programmierung (Vorlesung 14)

Praktikum Grundlagen der Programmierung. Diverse Grundlagen. Dr. Karsten Tolle

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Widerrufsbelehrung der Free-Linked GmbH. Stand: Juni 2014

Theoretische Grundlagen der Informatik

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

Some Software Engineering Principles

Software Engineering Klassendiagramme Assoziationen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

VBA-Programmierung: Zusammenfassung

Algorithmen und Datenstrukturen

Große Übung Praktische Informatik 1

Einführung in die Programmierung

Leichte-Sprache-Bilder

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Anleitung zum DKM-Computercheck Windows Defender aktivieren

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Erfahrungen mit Hartz IV- Empfängern

1 Vom Problem zum Programm

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Reporting Services und SharePoint 2010 Teil 1

Was ich als Bürgermeister für Lübbecke tun möchte

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 {

Softwarequalität: Zusammenfassung und Ausblick. 17. Juli 2013

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Softwarequalitätssicherung

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

1. Teilklausur. Modul "OOPM Vorlesung/Übung" Gruppe A

Häufig wiederkehrende Fragen zur mündlichen Ergänzungsprüfung im Einzelnen:

Das Pflichtenheft. Dipl.- Ing. Dipl.-Informatiker Dieter Klapproth Ains A-Systemhaus GmbH Berlin

Informatikgrundlagen (WS 2015/2016)

Logische Folgerung. Definition 2.11

Pflegende Angehörige Online Ihre Plattform im Internet

Orientierungstest für angehende Industriemeister. Vorbereitungskurs Mathematik

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Formale Sprachen und Grammatiken

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Excel Funktionen durch eigene Funktionen erweitern.

Informationsblatt Induktionsbeweis

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Benutzerhandbuch - Elterliche Kontrolle

Installation OMNIKEY 3121 USB

Software-Entwicklungsprozesse zertifizieren

Einführung in die Programmierung für Wirtschaftsinformatik

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

Repräsentative Umfrage zur Beratungsqualität im deutschen Einzelhandel (Auszug)

Kurzanleitung MAN E-Learning (WBT)

Grundlagen von Python

Wir machen neue Politik für Baden-Württemberg

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

teischl.com Software Design & Services e.u. office@teischl.com

Einführung in PHP. (mit Aufgaben)

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Kurzleitfaden für Schüler

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Benutzerverwaltung Business- & Company-Paket

Mai Hauptseminar: Nichtrelationale Datenbanken Historisch-Kulturwissenschaftliche Informationsverarbeitung Universität zu Köln

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Arbeiten mit dem Outlook Add-In

Übung - Datensicherung und Wiederherstellung in Windows 7

Übungen Programmieren 1 Felix Rohrer. Übungen

Dokumentation für die software für zahnärzte der procedia GmbH Onlinedokumentation

Übung - Arbeiten mit Android

Objektorientierte Programmierung

Einführung in die Programmierung

Widerrufsrechte des Mieters bei Wohnraum-Mietverträgen:

ENTDECKEN SIE DIE VORTEILE VON SUBSCRIPTION SUBSCRIPTION-VERTRÄGE VERWALTEN

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Warum sich das Management nicht für agile Softwareentwicklung interessieren sollte - aber für Agilität

Berühmt berüchtigte Softwarefehler. Der Pentium Division-Bug. vorgetragen von: Sebastian Knieschewski

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Transkript:

April 10, 2005 Oberseminar Software-Entwicklung

Inhalt 1. Einführung (Motivation, Tony Hoare, Programmverifikation) 2. Design by Contract (Idee, Eiffel) 3. Praxis: Programming by Contract for Python 4. Zusammenfassung und Diskussion Oberseminar Software-Entwicklung 1

Motivation Durch Testen eines Programms kann nicht sichergestellt werden, dass das Programm fehlerfrei ist! Unit-Tests beweisen nur, dass das Programm für vorher definierte Testdaten korrekt arbeitet. Alle bei einem Programm möglichen Eingabedaten zu testen, ist in der Regel unmöglich! Kann man Methoden finden, die die Richtigkeit eines Programmes gewährleisten, ohne sich auf Tests verlassen zu müssen? Oberseminar Software-Entwicklung 2

Korrektheit von Programmen Die Korrektheit eines Programmes lässt sich unter drei Aspekten betrachten: 1. Was bedeutet ein vorgegebenes Programm P? Dass heißt, wie lautet seine Spezifikationn S? 2. Entwickle Programm P, das die vorgegebene Spezifikation S implementiert. 3. Führen Spezifikation S und Programm P die gleiche Funktion aus? Oberseminar Software-Entwicklung 3

Tony Hoare und Programmverfikation Charles Antony Richard Hoare; britischer Informatiker Quicksort-Algorithmus Hoare-Logik zum Nachweis der Korrektheit von Algorithmen An Axiomatic Basis for Computer Programming (1969) Proof of Correctness of Data Representations (1972) Prädikatenkalkül Notation: {P}S{Q} Wenn P vor der Ausführung von S wahr ist, dann ist Q nach der Beendigung von S wahr. Inferenzregeln Oberseminar Software-Entwicklung 4

Programmverifikation (Inferenzregeln) Regel (Axiom) Prämisse Folgerung 1. Konsequenz 1 {P}S{Q},(Q = R) {P}S{R} 2. Konsequenz 2 (R = P), {P}S{Q} {R}S{Q} 3. Komposition {R}S 1 {Q},{Q}S 2 {R} {P}S 1 ;S 2 {R} 4. Zuweisung x := Ausd {P(Ausd) x := Ausd {P(x )} 5. if {P B}S 1 {Q}, {P} if B then S 1 else S 2 {Q} {P B}S 2 {Q} 6. while {P B}S{P} {P} while B do S {P B} kann gezeigt werden, dass die Prämisse jeder Inferenzregel wahr ist, kann die Prämisse durch die Folgerung ersetzt werden axiomatische Verifikation erfolgt rückwärts, d.h. Nachbedingung wird die Vorbedingung abgeleitet aus der bekannten Oberseminar Software-Entwicklung 5

Design by Contract von Bertrand Meyer [1] für die Programmiersprache Eiffel entwickelt Dokumentation und Verständigung von Rechten und Pflichten von Softwaremodulen, um die Korrektheit eines Programmes sicherzustellen Korrektheit? Es tut das, was es behauptet zu tun! Oberseminar Software-Entwicklung 6

Design by Contract (II) Jede Funktion oder Methode in einem Softwaresystem macht etwas. Vorbedingungen beschreiben die Anforderungen, die vor Ausführung erfüllt werden müssen Nachbedingungen garantieren einen bestimmten Zustand nach der Ausführung Klasseninvarianten sind Bedingungen, die aus Sicht des Aufrufers immer gelten. Oberseminar Software-Entwicklung 7

Design by Contract (Beispiel) 1 2 -- Add an item to a doubly linked list, 3 -- and return the newly created node. 4 add_item (item : STRING) : NODE is 5 require 6 item /= Void -- is not equal 7 deferred -- Abstract base class 8 ensure 9 result.next.previous = result -- Check the newly 10 result.previous.next = result -- added node s links. 11 find_item(item) = result -- Should find it. 12 end Oberseminar Software-Entwicklung 8

Design by Contract (III) Wenn alle Vorbedingungen der Methode vom Aufrufer erfüllt werden, wird die Methode die Erfüllung aller Nachbedingungen und Invarianten nach ihrer Ausführung garantieren. Bei Nichterfüllung der Vertragsbedingungen durch eine der Parteien entstehen Konsequenzen! Ausnahmen Jede Verletzung des Vertrages ist ein Fehler! Vorbedingungen dienen nicht der Überprüfung von Benutzereingaben! Oberseminar Software-Entwicklung 9

Design By Contract (IV) als integraler Bestandteil der Programmiersprache Eiffel durch Präprozessoren, die das Einbetten von Verträgen als spezielle Kommentare im Quelltext ermöglichen icontract für Java [3] Nana für C/C++ [2] PyContract für Python [4] Oberseminar Software-Entwicklung 10

Beispiel: Ringpuffer Elemente dürfen nur am Ende eingefügt und am Anfang entwert werden begrenzte Aufnahmemöglichkeit von Elementen Methoden init(leng) - Initialisierung des Ringpuffers mit leng Elementen put(item) - Hinzufügen eines Elementes get(item) - Entfernen eines Elementes is full() - Überprüfung ob Puffer voll ist is empty() - Überprüfung ob Puffer leer ist Oberseminar Software-Entwicklung 11

Beispiel: Konstruktur 1 2 def i n i t ( s e l f, leng ) : 3 " " " Construct an empty c i r c u l a r b u f f e r. 4 5 pre : : 6 leng > 0 7 post [ s e l f ] : : 8 s e l f. is_empty ( ) and len ( s e l f. buf ) = = leng 9 " " " 10 s e l f. buf = [ None for x in range ( leng ) ] 11 s e l f. len = s e l f. g = s e l f. p = 0 Oberseminar Software-Entwicklung 12

Beispiel: get(item) 1 2 def get ( s e l f ) : 3 " " " Retrieves an item from a non empty c i r c u l a r b u f f e r. 4 5 pre : : 6 not s e l f. is_empty ( ) 7 post [ s e l f. len, s e l f. g ] : : 8 s e l f. len = = old. s e l f. len 1 9 return = = s e l f. buf [ old. s e l f. g ] 10 " " " 11 r e s u l t = s e l f. buf [ s e l f. g ] 12 s e l f. g = ( s e l f. g + 1 ) % len ( s e l f. buf ) 13 s e l f. len = 1 14 return r e s u l t Oberseminar Software-Entwicklung 13

Beispiel: Test Test mit ohne Verletzung des Vertrages Test mit Verletzung des Vertrages Test mit einem weniger restriktiven Vertrag Oberseminar Software-Entwicklung 14

Zusammenfassung und Diskussion Design by Contract fördert ein besseres Verständnis der Funktionen, Methoden und Klassen ist ein systematischer Ansatz für die Entwicklung von fehler-freien objektorientierten Systemen ist eine Methode zur Dokumentation von Software ist eine Technik im Umgang mit unerwarteten Fehlerquellen (sicherer Umgang mit Ausnahmen) Oberseminar Software-Entwicklung 15

References [1] Bertrand Meyer: Object-Oriented Software Construction. Prentice Hall, 1988. [2] http://www.gnu.org/software/nana/nana.html [3] http://www.javaworld.com/javaworld/jw-02-2001/jw-0216-cooltools.html [4] http://www.wayforward.net/pycontract/ Oberseminar Software-Entwicklung 16