Automatische Generierung von Testfällen mit Quickcheck von Daniel Daume Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Software Qualitätssicherung wird durch ausführliches Testen erreicht Testen macht 40% - 50% der Entwicklungskosten aus daher automatische Tests wünschenswert Ermöglicht komplette Testläufe in kurzer Zeit Modifikation der Testläufe möglich Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen In Haskell geschriebenes Modul In Haskell einsetzbar Umfasst ~300 Zeilen Code Zufallsbasiert Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Erstellung der Property mit festgelegten Typen Anstoß von Generatoren festlegen Quickcheck Generierung der Inputparameter auf Basis der Generatoren Ausführung der Property False Max Durchläufe? Property? True False True Funktion getestet Funktion fehlerhaft Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen https://github.com/nick8325/quickcheck Quickcheck komplett in Haskell geschrieben Installationsaufwand: lediglich importieren des Moduls Quickcheck Vorteil: keine zusätzliche Sprache notwendig Entwickler muss nur einige vom Modul bereitgestellte Funktionen kennen Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Muss bestimmen können ob Test bestanden Tester muss Kriterien zur automatischen Überprüfung vergeben können Generierung von zufälligen Testfällen Kontrolle anhand der Testfälle ob die Eigenschaften gültig sind Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Quickcheck besonders gut für Haskell geeignet da funktionale Programmiersprache Funktionen nicht von vorherigen Zuständen abhängig Erlaubt präzises Testen C Haskell int i; for (i=3; i<12; i=i+2) { int q = i * i; printf(q); } sequence_ [ print $ i^2 | i <- [3,5..11] ] Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Vorteile Schnell Effektiv Flexibel Einfach im Umgang Überwachung der Testläufe Geringe Testkosten Nachteile Keine Garantie auf Fehlerfreiheit Konzeption komplexer Properties Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen (1) (2) (3) (4) (5) Liste umkehren Gauß'sche Summenformel Classify Collect Größter gemeinsamer Teiler Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen Einfache Art und Weise, Haskell Programme zu testen Fehlerhafte Gedankengänge werden schnell aufgezeigt Liefert bei Fehlern Gegenbeispiele Reduziert den Testaufwand enorm Kann falsches Gefühl von Sicherheit geben Motivation Allgemein Konzept Bibliothek Anforderungen Vergleich mit anderen Programmiersprachen Vor-/Nachteile Beispiele Fazit Quellen QuickCheck: A lightweight tool for random testing of Haskell programms (Autoren: Claessen Koen, Hughes John) Introduction to Functional Programming using Haskell (Autor: Richard Bird) Zufallsbasiertes Testen – QuickCheck (Autor: Christian Binkhoff Zum Property: ◦ http://hackage.haskell.org/packages/archive/Quick Check/2.1.0.2/doc/html/Test-QuickCheckProperty.html