Quickcheck – Spezifikationsbasiertes Testen von Haskellprogrammen Koen Claessen, John Hughes.

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Kapitel 9: Graphdurchlauf
Quickcheck – Spezifikationsbasiertes Testen von Haskellprogrammen Koen Claessen, John Hughes.
PL/SQL - Kurze Einführung -.
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Zusammenfassung der Vorwoche
Kapitel 5. Stacks und Queues
Finale Semantik und beobachtbares Verhalten
Verteilte Software - Java - Prozedurale Programmierung 1
Design by Contract with JML - Teil 2
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding.
1 Computergestützte Verifikation Probleme bei der Softwareverifikation 1.komplexe Datentypen und Expressions 2.Pointer und dynamische Datenstrukturen.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
Prinzipien des Algorithmenentwurfs Backtracking Prof. Dr. Th. Ottmann
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.
KB-Tris - Ein Tetris Derivat Kai Hermann & Benjamin Halbrock.
Imperative Programmierung
Datentyp  Zusammenfassung von Mengen von "Werten" mit auf
Eine (Gleichungs-)Spezifikation ist ein Paar SPEC = (, E),
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Modulare Programmierung
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Kapitel 2: Datenstrukturen
Kapitel 10: Graphalgorithmen
Grundkonzepte Java - Klassendefinition
Persistente Domänenmodelle mit JPA 2.0 und Bean Validation
Wieder und wieder und wieder …. Nicht vor Pilz? ja Schritt vorwärts.
Informatik 1 Übung 2.
Tutorial im Rahmen des Software(technik)praktikums
Guten Nachmittag!.
Wir haben gesehen Das Gerüst ist bei JavaKara fix vorgegeben
Automated Software Testing
Proseminar an der TU München Martin Levihn
C# Einheitliches Typsystem
Grundlagen der Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Software-Technik: (fortgeschrittene) Klassendiagramme
Einführung in JavaKara
Primär(x)f(x)a[x]new typeof sizeof checked unchecked Unär+-~!++x--x x++ x-- (T)x Multip./Divis.*/% Addition/Subtr.+- shift > kleiner/größer = is gleich/ungleich==!=
REBOL. Was ist REBOL frei verfügbar plattformübergreifend highly reflective flexibel kompakt interpretiert.
Programmiersprachen Proseminar Grundlagen wissenschaftlichen Arbeitens
Purga - Scriptengine Ein Einblick.
Algorithmen und Datenstrukturen SS 2005
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Programmiervorkurs WS 2014/15 Schleifen
1 VeranstaltungThemaTeilnehmerBetreuer AINF-Lehrgang PROGRAMMIEREN Martina GREILER Wolfgang KATOLNIG Peter RENDL Helfried TUISEL Peter ZYCH Heinz STEGBAUER.
Was macht er? Wie funktioniert er? Wie sieht er aus?
Variablen und Datentypen
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Datentypen: integer, char, string, boolean
Der Dijkstra-Algorithmus
Sicheres Verhalten # 2 Be Secure Awareness Quiz
 Präsentation transkript:

Quickcheck – Spezifikationsbasiertes Testen von Haskellprogrammen Koen Claessen, John Hughes

Motivation Dijkstra: Testen kann nie das Fehlen von Fehlern zeigen, sondern lediglich vorhandene Fehler aufdecken. Quickcheck erlaubt systematisches Testen von Haskellprogrammen liefert keine Korrektheitsnachweise erhöht nur das Vertrauen in Programme

Quickcheck definiert eine formale Spezifikationssprache um zu testende Eigenschaften direkt im Source- Code auszudrücken definiert eine Testdaten-Generierungssprache um große Testmengen kompakt zu beschreiben umfasst ein Werkzeug um die spezifizierten Eigenschaften zu testen und eventuell entdeckte Fehler zu melden wird mit Hugs und GHC ausgeliefert

Einfache Beispiele Eigenschaften sind monomorphe Boolesche Funktionen. einfach: prop_PlusAssociative :: Int -> Int -> Int -> Bool prop_PlusAssociative x y z = (x+y)+z == x+(y+z) bedingt: prop_InsertOrdered :: Int -> [Int] -> Property prop_InsertOrdered x xs = ordered xs ==> ordered (insert x xs)

Fallstudie: Warteschlangen emptyQueue :: Queue a enqueue :: Queue a -> a -> Queue a dequeue :: Queue a -> Queue a firstQueue :: Queue a -> a isEmptyQueue :: Queue a -> Bool Gleichungsspezifikation: dequeue (enqueue emptyQueue x) = emptyQueue isEmptyQueue q = False -> dequeue (enqueue q x) = enqueue (dequeue q) x firstQueue (enqueue emptyQueue x) = x isEmptyQueue q = False -> firstQueue (enqueue q x) = firstQueue q isEmptyQueue emptyQueue = True isEmptyQueue (enqueue q x) = False

Testfunktionen zu Gleichungen -- dequeue (enqueue emptyQueue x) = emptyQueue prop_1 :: Int -> Bool prop_1 x = dequeue (enqueue emptyQueue x) == emptyQueue -- isEmptyQueue q = False -> --dequeue (enqueue q x) = enqueue (dequeue q) x prop_2 :: Queue Int -> Int -> Property prop_2 q x = isEmptyQueue q == False ==> dequeue (enqueue q x) == enqueue (dequeue q) x -- firstQueue (enqueue emptyQueue x) = x prop_3 :: Int -> Bool prop_3 x = firstQueue (enqueue emptyQueue x) == x

Testfunktionen zu Gleichungen 2 -- isEmptyQueue q = False -> -- firstQueue (enqueue q x) = firstQueue q prop_4 :: Queue Int -> Int -> Property prop_4 q x = isEmptyQueue q == False ==> firstQueue (enqueue q x) == firstQueue q -- isEmptyQueue emptyQueue = True -- isEmptyQueue (enqueue q x) = False prop_5 :: Queue Int -> Int -> Bool prop_5 q x = (isEmptyQueue emptyQueue == True) && (isEmptyQueue (enqueue q x) == False)

Testkontrolle Klassifikation von Testfällen: trivial :: Bool -> Property –> Property Beispiel: prop_InsertOrdered x xs = ordered xs => (trivial (length xs <= 2) (ordered (insert x xs))) classify :: Property -> String -> Property Beispiel: prop_InsertOrdered x xs = ordered xs => (classify (null xs) empty (classify (length xs == 1) unit (ordered(insert x xs))))

Fazit leichte Überprüfung von Spezifikationen und Implementierungen durch systematisches Testen kein Korrektheitsnachweis, aber viele Fehler oder Inkonsistenzen werden aufgedeckt flexibel durch Möglichkeit der Testgenerierung und -kontrolle