Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

28
Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck

Transcript of Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

Page 1: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Zufallsbasiertes Testen mit QuickCheck

Page 2: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

2

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 3: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

6

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 7: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

11

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 12: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff 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 Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

13

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Konzept

Page 14: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

14

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Beispiel

Haskell-Interpreter:

Falsches Definition:

Page 15: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

15

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Komplexeres Problem

Page 16: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

22

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Agenda

Einführung

Haskell

QuickCheck

Zusammenfassung

Page 23: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff 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 Christian Binkhoff 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 Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

25

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup

Page 26: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

26

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup

Page 27: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

27

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup

Page 28: Zufallsbasiertes Testen mit QuickCheck Christian Binkhoff Zufallsbasiertes Testen mit QuickCheck.

28

Zufallsbasiertes Testen mit QuickCheck

Christian Binkhoff

Backup