Verifizierende Testverfahren

Ähnliche Dokumente
VBA-Programmierung: Zusammenfassung

Teil 2 - Softwaretechnik. Modul: Programmierung B-PRG Grundlagen der Programmierung 1 Teil 2. Übersicht. Softwaretechnik

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

Entwurf von Algorithmen - Kontrollstrukturen

Assertions (Zusicherungen)

5. Spezifikation und Verifikation von Programmen. Hier: Spezifikation einfacher Programme

Kapitel 4: Dynamische Analyse mit FUSION. SoPra 2008 Kap. 4: Dynamische Analyse mit FUSION (1/30)

Java-Programmierung mit NetBeans

Die Spezifikationssprachen Z und VDM. Michael Hildebrandt

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Grundlagen der Programmierung (Vorlesung 14)

Softwareentwicklung Allgemeines und prozedurale Konstrukte

Das Briefträgerproblem

Spezifikation der zulässigen Parameter. Bemerkungen: Bemerkungen: (2) Design by Contract:

Programmierkurs: Delphi: Einstieg

Schritt 1. Schritt 1. Schritt 3. - Analysieren des Problems und Spezifizierung einer Lösung.

Grenzwertanalyse. Domain-Testing. Ronny Schwierzinski, Bernd Rabe, Anna Bartwicki

Client-Server-Beziehungen

Verträge für die funktionale Programmierung Design und Implementierung

Einführung in die Java- Programmierung

1. LPC - Lehmanns Programmier Contest - Lehmanns Logo

SOI Die Schweizer Informatikolympiade

Algorithmen & Programmierung. Aspekte von Algorithmen

Steueranweisungen. Eike Schallehn Grundlagen der Informatik für Ingenieure Wintersemester 08/

6 Systematisches Testen von Programmen

ISTQB Certified Tester Foundation Level Exam Übungsprüfung

Softwaretechnikpraktikum SS Qualitätsmanagement I. 1. Überblick. Qualität. Qualitätsmerkmal

Whitebox-Tests: Allgemeines

Qualitätsmanagement. Grundlagen

2. Lernen von Entscheidungsbäumen


Informationssystemanalyse Use Cases 11 1

3: Systematisches Testen

Programmierung, Algorithmen und Techniken. von Thomas Ohlhauser

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

T1 - Fundamentaler Testprozess

4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Softwaretechnik. Fomuso Ekellem WS 2011/12

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von.

Aufgabe 6. Gedichtinterpretation worte sind schatten

Algorithmen II Vorlesung am

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

The B Method. B ist eine Methode zur Spezifikation zum Entwurf zur Implementierung von Software Systemen. Bücher zur B-Methode

Test-Strategien. Grundsätzliches Blackbox-Testen Whitebox-Testen Graybox-Testen Ablauf von Tests Zusammenfassung. HS Mannheim

2. Vorlesung. Slide 40

Extreme Programming ACM/GI Regionalgruppe Bremen,

Semantik von Formeln und Sequenzen

Kontrollstrukturen - Universität Köln

2.4.3 Polymorphie (Wiederholung von Alp2)

Lineare Programmierung

Einführung in die Programmierung WS 2014/ Algorithmus, Berechenbarkeit und Programmiersprachen 2-1

Binäre lineare Optimierung mit K*BMDs p.1/42

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Softwarequalitätssicherung

Tutorium 06: Klausurvorbereitung

Formale Methoden: Ein Überblick

Kapitel 7: Formaler Datenbankentwurf

Übungen zur Softwaretechnik

Klausur zu den Teilgebieten Software-Management und Software-Qualitätsmanagement

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

MINT-Circle-Schülerakademie

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

"Alles, was einen Wert zurueckliefert, ist ein Ausdruck." Konstanten, Variablen, "Formeln" oder auch Methoden koennen Werte zurueckgeben.

22. Algorithmus der Woche Partnerschaftsvermittlung Drum prüfe, wer sich ewig bindet

Abschnitt: Algorithmendesign und Laufzeitanalyse

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Sin-Funktion vgl. Cos-Funktion

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Unit Testing mit JUnit. Dr. Andreas Schroeder

5. Tutorium zu Programmieren

Tagesprogramm

Einführung in die Informatik I

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

Ersetzbarkeit, Client-Server Beziehungen

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Programmiertechnik II

Einfache Rechenstrukturen und Kontrollfluss II

Software Engineering I

8 Diskrete Optimierung

Erster Bug: eine Motte

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Lineare Gleichungssysteme

Einführung in die Theoretische Informatik

Software-Engineering

Grundlagen der Künstlichen Intelligenz

Formaler Entwurf mit Event-B Die Eventbank

Prolog basiert auf Prädikatenlogik

KREDITVERZEICHNIS Konfiguration Ausgabe: /13. Dokumentation KREDITVERZEICHNIS. Teil 2. Konfiguration

Übung zur Vorlesung Einführung in die Computerlinguistik und Sprachtechnologie

Vorkurs Mathematik Übungen zu Polynomgleichungen

Shell-Programmierung

Propädeutikum zur Programmierung

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

Mächtigkeit von WHILE-Programmen

Testen. SEPR Referat: Testen - Oliver Herbst

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Kontrollstrukturen, Strukturierte Programmierung

Übungsaufgaben zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 8

Transkript:

Spezifikation Um einen Algorithmus zu schreiben, muss das zu lösende Problem genau beschrieben sein. Eine Spezifikation ist Verifizierende Testverfahren vollständig, wenn alle Anforderungen/alle relevanten Rahmenbedingungen angegeben wurden. detailliert, wenn klar definiert ist, welche Hilfsmittel/ Operationen zur Lösung zugelassen sind. unzweideutig, wenn klar angegeben ist, wann eine vorgeschlagene Lösung akzeptabel ist. 186 187 Spezifikation (2) Beispiel: Eine Lok soll die in Abschnitt A stehenden Wagen 1, 2, 3 in der Reihenfolge 3, 1, 2 auf Gleis C abstellen. B 1 2 3 C Vollständigkeit: Wieviele Wagen kann die Lok auf einmal ziehen? Wieviele Wagen passen auf Gleisstück B? Detailliertheit: Was kann die Lok? (fahren, koppeln, entkoppeln) Unzweideutigkeit: Darf die Lok am Ende zwischen den Wagen stehen? A 188 Spezifikation (3) Warum Spezifikation? Spezifikation ist Teil des Feinentwurfs für jede Funktion beschreiben, was sie tut letzte Phase vor Implementierung Problemstellung präzisieren Entwicklung unterstützen Überprüfbarkeit verbessern Wiederverwendbarkeit erhöhen Ziel: Erst denken, dann den Algorithmus entwerfen. 189

informale Spezifikation beschreibe kurz für jede Funktion, was sie tut enthält mindestens die Rolle der Parameter/Rückgabewerte und ggf. die Seiteneffekte weit verbreitet, gut für die Dokumentation geeignet nicht exakt genug, um die Einhaltung der Spezifikation nachzuweisen Beispiel: reactor.iscooking() liefert true, wenn Temperatur des Reaktors 100 Grad Celsius erreicht. exemplarische Spezifikation Testfälle beschreiben Beispiele für das Zusammenspiel der Funktionen samt erwarteter Ergebnisse formales Verfahren, trotzdem leicht verständlich nach der Implementierung dienen die Testfälle zur Validierung durch extreme programming populär geworden Beispiel: Probleme: was bedeutet erreicht? was passiert bei Temperaturen unter 100 Grad? 190 reactor.settemperature(99); assert(!reactor.iscooking()); reactor.settemperature(100); assert(reactor.iscooking()); 191 formale Spezifikation formale Spezifikation (2) mittels formaler Beschreibungssprache die Semantik der Funktionen exakt festlegen eine ausführbare Spezifikationssprache kann als Prototyp dienen Möglichkeit des Programmbeweises aber: aufwändig, erhöhte Anforderungen an Verwender eigenschaftsorientiert: axiomatisch: Objekte werden aus Typen konstruiert und durch logische Zusicherungen spezifiziert algebraisch: definiert Algebren über Objekte und deren Funktionalität modellorientiert: Modellbeschreibung durch reiche, formale Sprache Beispiele: VDM, Z automatenorientiert: beschreibt Zustände und Übergänge des Systems Beispiele: Petri-Netze, State Charts 192 193

Bestandteile der formalen Spezifikation formale Spezifikation: Beispiele 1. Ein Algorithmus berechnet eine Funktion, daher: (a) festlegen der gültigen Eingaben (Definitionsbereich) (b) festlegen der gültigen Ausgaben (Wertebereich) 2. Funktionaler Zusammenhang zwischen Ein-/Ausgabe: (a) Welche Eigenschaften hat die Ausgabe? (b) Wie sehen die Beziehungen der Ausgabe zur Eingabe aus? 3. Festlegen der erlaubten Operationen. Euklidischer Algorithmus gegeben: n, m N gesucht: g N funktionaler Zusammenhang: g = ggt (n, m) Jüngste Person gegeben: (a 1,..., a n ) R n, n > 0 gesucht: p {1,..., n} funktionaler Zusammenhang: i {1,..., n} gilt a p a i oder alternativ: j {1,..., n} gilt: a j a p a j > a p. 194 195 Verifikation Ziel: Beweise, dass der Algorithmus korrekt ist. Wechselspiel zwischen: statische Aussagen über den Algorithmus ohne ihn auszuführen nicht vollständig möglich, zu komplex und umfangreich dynamisches Testen des Algorithmus zeigt nur die Anwesenheit von Fehlern, nicht deren Abwesenheit Die Programmverifikation versucht zu zeigen, dass der Algorithmus die funktionale Spezifikation erfüllt: Der Algorithmus liefert zu jeder Eingabe eine Ausgabe. Die Ausgabe ist die gewünschte Ausgabe. 196 Prädikatenkalkül Floyd/Hoare die Wirkung eines Programms ist spezifiziert durch zwei Zusicherungen: Anfangsbedingung (Vorbedingung, precondition) legt vor dem Ablauf des Programms zulässige Werte der Variablen fest Endebedingung (Nachbedingung, postcondition) legt gewünschte Werte der Variablen und Beziehungen zwischen Variablen nach Programmlauf fest Notation: {P } spezifiziertes Programm {Q} kann eine Spezifikation nicht durch ein Programm erfüllt werden, so nennt man sie widersprüchlich 197

Prädikatenkalkül Floyd/Hoare (2) Verifikationsregeln Programme bestehen aus linearen Kontrollstrukturen die Korrektheit des gesamten Programms ergibt sich aus der Korrektheit der Teilstrukturen komplexes Programm durch schrittweises Zusammensetzen einfacher Strukturen verifizieren Notation: {P } Schritt {Q} P = Vorbedingung Q = Nachbedingung Semantik: falls vor Ausführung des Schrittes P gilt, dann gilt nachher Q 198 Prädikatenkalkül Floyd/Hoare (3) Sequenz-Regel {P } S 1 {Q} {Q} S 2 {R} {P } S 1 ; S 2 {R} Semantik: zwei Programmteile S 1 und S 2 können genau dann zusammengesetzt werden, wenn die Nachbedingung von S 1 gleich der Vorbedingung von S 2 ist abgekürzte Schreibweise {P 0 } Schritt 1 {P 1 } Schritt 2 {P 2 }... {P n 1 } Schritt n {P n } oder alternativ: {P 0 } Algorithmus {P n } Semantik: falls vor Ausführung des Algorithmus P 0 gilt, dann gilt nachher P n 199 Prädikatenkalkül Floyd/Hoare (4) Prädikatenkalkül Floyd/Hoare (5) Zuweisungs-Regel {P (v)} v := t {P (t)} Semantik: was vorher für t gilt, gilt nachher für v Beispiele: * {t > 0} v := t {t > 0 v > 0} * {x = 2} x := x + 1 {x = 3} * {x = 3} v := 2x + 1 {v = 7 x = 3} symbolische Ausführung: Der in der Vorbedingung gegebene, anfängliche Wert ist in den zugewiesenen Ausdruck einzusetzen. im Beispiel: Vorbed. x = 2 Nachbed. x + 1 = 3 Vorbed. x = 3 Nachbed. 2x + 1 = 7 200 Anmerkungen: auch andere Richtung möglich: Nachbedingung zugehörige Vorbedingung in Nachbedingung alle Vorkommen der zugewiesenen Variablen durch zuweisenden Ausdruck ersetzen: * Nachbed. x + 1 = 3 Vorbed. x = 2 * Nachbed. 2x + 1 = 7 Vorbed. x = 3 welche Richtung man wählt, hängt davon ab, ob man die Vor- oder die Nachbedingung kennt 201

Prädikatenkalkül Floyd/Hoare (6) Prädikatenkalkül Floyd/Hoare (7) Konsequenz-Regel {P } S {Q } {P } S {Q} Vorbedingung P ist stärker/schärfer als P Nachbedingung Q ist schwächer als Q Beispiel: {x > 40} x := x 3 x := x 30 {x > 90} {x > 45} {x > 40} x := x 3 x := x 30 {x > 90} {x > 80} 202 Konsequenz-Regel (Fortsetzung) Bedingungen abschwächen bei Vorwärts-Durchlauf: * hinzufügen eines Terms mit ODER-Verknüpfung * weglassen eines UND-verknüpften Terms Bedingungen verschärfen bei Rückwärts-Durchlauf: * hinzufügen eines Terms mit UND-Verknüpfung * weglassen eines ODER-verknüpften Terms Beispiel: {x < y x = y} S {x = y + 2} {x < y} {x < y x = y} S {x = y + 2} {y x} 203 Prädikatenkalkül Floyd/Hoare (8) Prädikatenkalkül Floyd/Hoare (9) die Sequenz-Regel kann mit Hilfe der Konsequenz-Regel verallgemeinert werden: zwei Programmteile S 1 und S 2 können zusammengesetzt werden, wenn die Nachbedingung von S 1 schärfer als die Vorbedingung von S 2 ist {Q} S 1 {P } {P } {P } {P } S 2 {R} {Q} S 1 ; S 2 {R} Wiederholung {P } solange B wiederhole Schritt {P B} Semantik: P gilt vor und nach jeder Ausführung von Schritt Schleifeninvariante Beispiel: x := y k := 0 {y = k a + x} solange x 0 wiederhole x := x a k := k + 1 {y = k a + x x < 0} 204 205

Prädikatenkalkül Floyd/Hoare (10) Verifikation: Beispiel Anmerkungen: die Invariante gilt nicht an allen Stellen des Schleifenrumpfs, nur am Anfang und am Ende ähnliche Regeln existieren für Zählschleifen und fußgesteuerte Schleifen wie do... while (); (werden hier nicht vorgestellt) Algorithmus: s := 0 j := n while j > 0 do s := s + j j := j 1 Werte für n = 4: Runde j s 0 4 0 1 3 4 2 2 4 + 3 = 7 3 1 4 + 3 + 2 = 9 4 0 4 + 3 + 2 + 1 = 10 if-regel {Q B} S 1 {P } {Q B} S 2 {P } {Q} if B then S 1 else S 2 {P } Invariante? s = n i=j+1 i 206 207 Verifikation: Beispiel (2) {n N 0 } s := 0 j := n {n N 0 s = 0 j = n j N 0 s = n i=j+1 i} while j > 0 do {n N 0 j > 0 j N 0 s = n i=j+1 i = n i=j i j} alternativ: {n N 0 j > 0 j N 0 s + j = n i=j i} s := s + j {n N 0 j > 0 j N 0 s = n i=j i = n i=j 1+1 i} j := j 1 {n N 0 j > 0 j N 0 s = n i=j+1 i} {n N 0 j 0 j N 0 s = n i=j+1 i = n i=1 i} 208