Automatische Generierung von Testfällen mit Quickcheck von

Werbung
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
Herunterladen