zufallsbasiertes testen mit quickcheck

28
Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck

Upload: zorion

Post on 20-Jan-2016

116 views

Category:

Documents


0 download

DESCRIPTION

Zufallsbasiertes Testen mit QuickCheck. Agenda. Einführung Haskell QuickCheck Zusammenfassung. Einführung. Testen als essenzieller Bestandteil gewährleistet Robustheit und Qualität von Software Kosten in Höhe von 50% der Entwicklungskosten Forderung nach Effizienz von Testmethodiken - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Zufallsbasiertes Testen  mit QuickCheck

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Zufallsbasiertes Testen mit QuickCheck

Page 2: Zufallsbasiertes Testen  mit QuickCheck

2

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 3: Zufallsbasiertes Testen  mit QuickCheck

3

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Einführung

Testen als essenzieller Bestandteilgewährleistet Robustheit und Qualität von Software

Kosten in Höhe von 50% der Entwicklungskosten Forderung nach Effizienz von Testmethodiken

Zufallsbasiertes Testen als effiziente MethodikKein Starres Definieren von Testfällen

Generierung von Zufallsdaten für Input automatisch

Grundlage ist eine Verteilung

Überprüfung eines Moduls mit Zufallsdaten

vorwiegend Black-Box-Testing

Page 4: Zufallsbasiertes Testen  mit QuickCheck

4

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Black-Box-Testing

Implementierung bleibt verborgen

Lediglich Spezifikation der Funktionalität erforderlich

Paarweise Erzeugung von Input/Output-Daten

Vergleich von Soll- und erzeugtem Output

Erzeugung der Inputdaten willkürlich oder kalkuliert

Prädestiniert für zufallsbasierte bzw. automatisierte Methodik Wahl der Verteilung relevant für Qualität eines Tests Relevanz von deklarativen Programmiersprachen

CodeInputparameter Vergleich d. Outputs mit Soll

Page 5: Zufallsbasiertes Testen  mit QuickCheck

5

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

White-Box-Testing

Benutzung, falls Spezifikation schwierig

Code wird herangezogen

Control-Flow-TestingPfadabdeckung

Jeder Pfad mindestens 1-fach abgedeckt

Data-Flow-TestingBildung von Chains mit 3 Informationen (Var, Wert, Nutzung)

Ansätze zur Anwendung auch im deklarativen Umfeld

Page 6: Zufallsbasiertes Testen  mit QuickCheck

6

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 7: Zufallsbasiertes Testen  mit QuickCheck

7

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Haskell

Haskell als deklarative ProgrammierspracheFormulierung eines Problems durch Funktionen/Definitionen

Keine Explizite Konzeption

Haskell evaluiert Funktionen auf Grundlage eines Inputs

Zustandslos

Beispiel:

Page 8: Zufallsbasiertes Testen  mit QuickCheck

8

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Haskell

Zufallsbasierter KontextGenerierung verschiedener ‚n‘

Aufruf von ‚aufsummieren‘ mit jeweiligem ‚n‘

Vergleich des Ergebnisses mit Referenz/Spezifikation

Falls alle Durchläufe korrekt, ist ‚aufsummieren‘ „korrekt“

Page 9: Zufallsbasiertes Testen  mit QuickCheck

9

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Haskell

Generierung von einfachen Typen trivial

Zustandlosigkeit von Haskell vorteilhaft (Seiteneffekte)

Zustandlosigkeit wirkt sich auf Generierung aus

Generierung von komplexen Datenstrukturen (Bäume) nicht möglich

Abhilfe: Monaden

5

101

Page 10: Zufallsbasiertes Testen  mit QuickCheck

10

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Monaden

Begriff der Mathematik

Umsetzung von imperativen Prinzipien (Zustand)

Ursprünglich für Input/Output von dekl. Programmen

Hilft bei der Generierung komplexer Datenstrukturen

Page 11: Zufallsbasiertes Testen  mit QuickCheck

11

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 12: Zufallsbasiertes Testen  mit QuickCheck

12

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

QuickCheck

In Haskell geschriebenes Modul

In Haskell als solches einsetzbar

Umfasst rund 300 Zeilen (lightweight) Testmethodik im Rahmen dekl. Programmiersprache

Black-Box-Testing

Zufallsbasiert auf Grund von Verteilungen

Page 13: Zufallsbasiertes Testen  mit QuickCheck

13

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Konzept

Page 14: Zufallsbasiertes Testen  mit QuickCheck

14

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Beispiel

Haskell-Interpreter:

Falsches Definition:

Page 15: Zufallsbasiertes Testen  mit QuickCheck

15

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Komplexeres Problem

Page 16: Zufallsbasiertes Testen  mit QuickCheck

16

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Funktionalität

Benutzung bedingter Properties möglich

Generierung erfolgt je Durchlauf solange, bis Property erfüllt

Gefahr: Verzerrung der VerteilungRestriktion der Bedingung verwirft bspw. bestimmte, notwendige Testdaten

Beispiel: sortierte Liste als Bedingung fast nur kurze Listen als Input

Page 17: Zufallsbasiertes Testen  mit QuickCheck

17

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Funktionalität

Überwachung von Inputparametern

Monitoring durch Klassifikation

„classify“

„collect“

Page 18: Zufallsbasiertes Testen  mit QuickCheck

18

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Selbstdefinierte Generatoren

Hohe Qualität eines Tests gefordert Annäherung der Testdaten an die tatsächlichen Versuch der Anlehnung einer Verteilung Berücksichtigung komplexer Typen Forderung zur Konzeption eigener Generatoren

Beispiel Liste:Generator für sortierte Listen

Bedingung entfällt

Listenlängen repräsentativ

Page 19: Zufallsbasiertes Testen  mit QuickCheck

19

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Selbstdefinierte Generatoren

Eigener Typ instanziiert Klasse:

Eigener Generator muss spezifiziert werden

Standardtypen haben bereits Instanzen

Basisgeneratoren können kombiniert werdenBeispiel:

weitere: oneof, frequency, size

Abstraktes ‚Gen‘ ist Instanz der Haskell-Klasse „Monad“ Berücksichtigung der Monadenfunktionalität

Page 20: Zufallsbasiertes Testen  mit QuickCheck

20

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Binärbaum

mit Funktionen ‚suche‘ ‚loesche‘ und ‚einfuegen‘

Demo

Page 21: Zufallsbasiertes Testen  mit QuickCheck

21

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Binärbaum

Der Aufruf erfolgt im Haskell-Interpreter

Die Properties werden getestet

In diesem Beispiel liegt der Anteil der Binärbaumgröße von [1,2,3] bei etwa 20-30%

Page 22: Zufallsbasiertes Testen  mit QuickCheck

22

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 23: Zufallsbasiertes Testen  mit QuickCheck

23

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Zusammenfassung

QuickCheck ist probates Mittel zum TestenSchnell, effektiv, flexibel, einfach im Umgang

Überwachung der Testläufe

Geringe Testkosten

NachteilKeine Garantie bei postulierter Fehlerfreiheit

Konzeption komplexer Properties

Generatorenentwurf kann komplex werden

AusblickWhite-Box-Testing (Data-Flow) mit QuickCheck

White-Box-Testing bei Java

Page 24: Zufallsbasiertes Testen  mit QuickCheck

24

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Ende

Vielen Dank für die Aufmerksamkeit!

Fragen?

Page 25: Zufallsbasiertes Testen  mit QuickCheck

25

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup

Page 26: Zufallsbasiertes Testen  mit QuickCheck

26

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup

Page 27: Zufallsbasiertes Testen  mit QuickCheck

27

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup

Page 28: Zufallsbasiertes Testen  mit QuickCheck

28

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup