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