Writing Correct Programs (Programme korrekt erstellen) Vortrag zum Oberseminar Softwareentwicklung von Jörg Winkler (01IN-PI)

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Rekursion vs. Iteration
Software-Engineering II Eingebettete Systeme, Softwarequalität, Projektmanagement Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt.
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Zusammenfassung der Vorwoche
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Suche in Texten (Stringsuche )
Kapitel 6. Suchverfahren
Synonyme: Stapel, Keller, LIFO-Liste usw.
Lösung 6.3 Denksportaufgabe
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Einführung in Berechenbarkeit und Formale Sprachen
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
ARRAY oder FELD oder VEKTOR
Algorithmentheorie 04 –Hashing
Algorithmentheorie 6 – Greedy-Verfahren
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Prof.Dr.S. Albers Prof. Dr. Th. Ottmann
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Bestimmung des Next-Arrays im KMP-Algorithmus
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Kapitel 5 Stetigkeit.
Kapitel 6 Differenzierbarkeit. Kapitel 6: Differenzierbarkeit © Beutelspacher Juni 2005 Seite 2 Inhalt 6.1 Die Definition 6.2 Die Eigenschaften 6.3 Extremwerte.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Christian Schindelhauer
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Projektplan: m : Anforderungsanalyse Dokument m :
DVG Ablaufsteuerung
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einführung in die Programmierung Datensammlung
INHALT INHALT Inhalt Delphi IDE ObjectPascal Hello World! Delphi IDE
grundlagen der Wirtschafts- informatik
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Sortieralgorithmen Sortieren von Arrays.
Chromatische Zahl.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Polynome und schnelle Fourier-Transformation
Wiederholte Programmausführung
HORIZONT 1 XINFO ® Das IT - Informationssystem HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
HORIZONT 1 XINFO ® Das IT - Informationssystem Assembler HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
PHP: Operatoren und Kontrollstrukturen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
programmieren des casio FX-7400GII
Analyse der Laufzeit von Algorithmen
Das IT - Informationssystem
Agenda für heute, 21. April, 2005 Interaktion mit Pascal-ProgrammenInteraktion mit Pascal-Programmen Dateneingabe Programmsteuerung Debugging Datentypen:
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Writing Correct Programs
 Präsentation transkript:

Writing Correct Programs (Programme korrekt erstellen) Vortrag zum Oberseminar Softwareentwicklung von Jörg Winkler (01IN-PI)

Writing Correct Programs Inhalt des Vortrags Motivation Wiederholung Binäre Suche Herausforderung Binäre Suche Programmskizzierung Verifikation Prinzipien der Verifikation Aufgabe der Verifikation Bemerkungen & Probleme weitere Beispiele Quellen

Writing Correct Programs Motivation Wunsch nach Programmen zur Überprüfung der Richtigkeit anderer Programme in den späten 60iger Jahren Neuer Ansatz: Vermittlung eines grundlegenden Verständnisses der Computerprogrammierung Ziel: Schreiben korrekter Programme Betrachtung nachfolgend am Beispiel der Binärsuche

Writing Correct Programs Wiederholung Binäre Suche Ausgangslage: sortiertes Array x [0.. n-1] mit n 0 und x[0] x[1]... x[n-1] der Datentyp von t und den Elementen von x ist gleich Verfahren (sehr grob) : Suche ob gesuchte Zahl t enthalten ist Ergebnis: Position p von t in x mit p = -1, falls t nicht in x oder x = 0 (leeres Array) enthalten, anderenfalls 0 p n-1

Writing Correct Programs Herausforderung Binäre Suche Jon Bentley: Nur 10% der professionellen Programmierer, konnten nach mehreren Stunden die Binärsuche fehlerfrei in der Sprache ihrer Wahl beschreiben. 1946: erste Veröffentlichung der Binären Suche 1962: erste fehlerfreie Binär-Suche

Writing Correct Programs Programmskizzierung (Verfahren) Idee: wenn t irgendwo in x [0.. n -1] enthalten ist, dann innerhalb der Grenzen (range) von x Kurz: mustbe(range) Betrachtung des mittleren Elementes von x und Vergleich mit t (1)t ist mittleres Element von x... Ende (2)Verkleinerung der Grenzen Wiederholung bis t gefunden oder x leer ist

Writing Correct Programs Programmskizzierung (Pseudocode) 1initialize range to 0..n-1 2loop 3{invariant: mustbe(range)} 4if range is empty, 5break and report that t is not in the array 6compute m, the middle of the range 7use m as probe to shrink the range 8if t is found during the shrinking process, 9break and report its position

Writing Correct Programs Programmskizzierung (Pseudocode) 1l = 0; u = n-1; 2loop 3{invariant: mustbe(l, u)} 4if l > u 5p = -1; break 6m = (l + u) / 2 7use m as probe to shrink the range 8if t is found during the shrinking process, 9break and report its position

Writing Correct Programs Programmskizzierung (Pseudocode) 1l = 0; u = n-1; 2loop 3{mustbe(l, u)} 4if l > u 5p = -1; break 6m = (l + u) / 2 7case 8x[m] < t: action a 9x[m] == t: action b 10x[m] > t: action c 11 12

Writing Correct Programs Programmskizzierung (Pseudocode) 1l = 0; u = n-1; 2loop 3{mustbe(l, u)} 4if l > u 5p = -1; break 6m = (l + u) / 2 7case 8x[m] < t: l = m + 1 9x[m] == t: p = m; break 10x[m] > t: u = m

Writing Correct Programs Verifikation 1{mustbe(0, n-1)} 2l = 0; u = n-1 3{mustbe(l, u)} 4loop 5 {mustbe(l, u)} 6 if l > u 7 {l > u && mustbe(l, u)} 8 {t is not in the array 9 p = -1; break 10 {mustbe(l, u) && l u} 11 m = (l + u) / 2 12 {mustbe(l, u) && l m u} 13 case 14 x[m] < t: 15 {mustbe(l, u) && cantbe(0, m)} 16 {mustbe(m+1, u)} 17 l = m+1 18 {mustbe(l, u)} 19 x[m] == t: 20 {x[m] == t} 21 p = m; break 22 x[m] > t: 23 {mustbe(l, u) && cantbe(m, n)} 24 {mustbe(l, m-1)} 25 u = m-1 26 {mustbe(l, u)} 27 {mustbe(l, u)}

Writing Correct Programs Verifikation Beweis der Richtigkeit für die Schleife (3 Teile): Initialization (Initialisierung) : Invariante ist beim ersten Schleifendurchlauf wahr Preservation (Erhaltung) : gilt die Invariante zu Beginn einer Iteration, dann ist die Invariante immer noch wahr, wenn die Schleife ausgeführt wurde Termination (Abschluss) : die Schleife terminiert und das gewünschte Ergebnis p gilt

Writing Correct Programs Verifikation Teil 1: Invariante ist beim ersten Schleifendurchlauf wahr Teil 2 & 3: Argumentation durch nähere Betrachtung der Zeilen 4 bis 27 durch die break -Anweisungen in Zeile 9 und 21 zeigen wir den Abbruch 3{mustbe(l, u)} 4loop 5 {mustbe(l, u)} 4loop 5 {mustbe(l, u)} … 25 u = m-1 26 {mustbe(l, u)} 27 {mustbe(l, u)} 9 p = -1; break 21 p = m; break

Writing Correct Programs Verifikation l = 0; u = n-1; loop {mustbe(l, u)} if l > u p = -1; break m = (l + u) / 2 case x[m] < t: l = m + 1 x[m] == t: p = m; break x[m] > t: u = m - 1 mustbe(0, n-1) mustbe(l, u) l > u && mustbe(l, u) t is not in the array l > u && mustbe(l, u) t is not in the array mustbe(l, u) && l u mustbe(l, u) && l m u mustbe(l, u) && l m u mustbe(l, u) && cantbe(0, m) mustbe(m+1, u) mustbe(l, u) && cantbe(0, m) mustbe(m+1, u) mustbe(l, u) x[m] == t mustbe(l, u) mustbe(l, u) && cantbe(m, n) mustbe(l, m-1) mustbe(l, u) && cantbe(m, n) mustbe(l, m-1)

Writing Correct Programs Prinzipien der Verifikation Generelle Prinzipien: Assertion (Grundannahmen) : die Beziehungen zwischen Eingabe, Programmvariablen und Ausgabe beschreiben den Zustand state eines Programms Grundannahmen ermöglichen die präzise Beschreibung dieser Beziehungen Sequential Control Structures (Sequenzielle Strukturen zur Ablaufsteuerung) : um do this statement then that statement-Strukturen zu verstehen, setzen wird Grundannahmen dazwischen und analysieren jeden Schritt

Writing Correct Programs Prinzipien der Verifikation Selection Control Structures (Auswahlstrukturen zur Ablaufsteuerung) : verschiedene Formen von if- und case-Anweisungen einzelne Betrachtung der Auswahlmöglichkeiten durch die Auswahl kommen nützliche Annahmen hinzu Iteration Control Structures (Auswahlstrukturen mit Iteration) : dazu müssen zuvor drei weitere Eigenschaften festgelegt werden (siehe Beispiel Binäre Suche) : Initalization (Initialisierung) Preservation (Erhaltung) Termination (Beendigung)

Writing Correct Programs Prinzipien der Verifikation durch Induktion zeigen wir, dass die Invariante vor und nach jeder Schleifeniteration wahr ist weiter ist zu zeigen, dass das Ergebnis am Ende eines jeden Schleifendurchlaufes wahr ist zusammen zeigt dies, dass jedes Anhalten der Schleife korrekt ist Functions (Funktionen) : um eine Funktion zu überprüfen, setzen wir durch zwei Grundannahmen ihren Zweck fest: Precondition (Vorbedingung) Postcondition (Nachbedingung) diese Bedingungen sind eher ein Vertrag als eine Tatsachen- behauptung (Programming by Contract)

Writing Correct Programs Aufgaben der Verifikation Alternative zum normalen Überprüfen mit Testfällen stellt den Programmierern eine Sprache zur Verfügung, in der sie ihr Verstehen ausdrücken können ermöglicht die Skizzierung z.B. von Invarianten in einer Schleife Verletzungen von Anweisungen weisen den Weg zu Fehlern und zeigen wie diese behoben werden können ohne Neue einzuführen hilft dabei Grundannahmen treffen zu können und zu entscheiden, welche davon in die Software (in Form von Kommentaren) aufgenommen werden

Writing Correct Programs Bemerkungen & Probleme die Techniken der Verifikation stellen nur einen kleinen Schritt auf den Weg zu korrekten Programmen dar ein einfacher Code ist meist der richtige Weg zur Korrektheit oft wird beim beim Programmieren von schweren Passagen erfolgreich mit mächtigen Formalismen gearbeitet, jedoch bei den vermeidlichen einfachen Stellen fällt man meist zum alten Programmierstil mit seinen Fehlern zurück

Writing Correct Programs Aufgaben zum Grübeln für Unterwegs Beweisen Sie, dass das folgende Programm endet, wenn seine Eingabe x eine positive ganze Zahl ist. while x != 1 do if even(x) x = x/2 else x = 3 * x + 1 (über 100 Hinweise: Kaffeedosenproblem – Dose mit schwarzen und weißen Bohnen und einem Extrahaufen schwarzer Bohnen Wähle 2 Beliebige bei gleicher Farbe wechseln gegen Schwarze Ansonsten Schwarze entfernen und Weiße zurück in die Dose Beweis der Termination & Aussage über die Farbe der letzten Bohne in Abhängigkeit der Anzahl von weißen und schwarzen

Writing Correct Programs Quellen [1] Jon Bentley: Programming Pearls [Addision-Wesley, 2. Auflage, 2000] [2] Jon Bentley: Perlen der Programmierkunst [Addision-Wesley, 2. Auflage, 2000] [3] Online-Ausgabe: Progamming Pearls [4] David Gries: The Science of Programming [Springer Verlag, 1987]

Writing Correct Programs Danke Vortrag & Ausarbeitung demnächst hier: