1 / 28

Zufallsbasiertes Testen mit QuickCheck

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

zorion
Download Presentation

Zufallsbasiertes Testen mit QuickCheck

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Zufallsbasiertes Testen mit QuickCheck

  2. Agenda • Einführung • Haskell • QuickCheck • Zusammenfassung

  3. 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 • Zufallsbasiertes Testen als effiziente Methodik • Kein 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

  4. Black-Box-Testing Inputparameter Code Vergleich d. Outputs mit Soll • 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

  5. White-Box-Testing • Benutzung, falls Spezifikation schwierig • Code wird herangezogen • Control-Flow-Testing • Pfadabdeckung • Jeder Pfad mindestens 1-fach abgedeckt • Data-Flow-Testing • Bildung von Chains mit 3 Informationen (Var, Wert, Nutzung) • Ansätze zur Anwendung auch im deklarativen Umfeld

  6. Agenda • Einführung • Haskell • QuickCheck • Zusammenfassung

  7. Haskell • Haskell als deklarative Programmiersprache • Formulierung eines Problems durch Funktionen/Definitionen • Keine Explizite Konzeption • Haskell evaluiert Funktionen auf Grundlage eines Inputs • Zustandslos • Beispiel:

  8. Haskell • Zufallsbasierter Kontext • Generierung verschiedener ‚n‘ • Aufruf von ‚aufsummieren‘ mit jeweiligem ‚n‘ • Vergleich des Ergebnisses mit Referenz/Spezifikation • Falls alle Durchläufe korrekt, ist ‚aufsummieren‘ „korrekt“

  9. 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 1 10

  10. Monaden • Begriff der Mathematik • Umsetzung von imperativen Prinzipien (Zustand) • Ursprünglich für Input/Output von dekl. Programmen • Hilft bei der Generierung komplexer Datenstrukturen

  11. Agenda • Einführung • Haskell • QuickCheck • Zusammenfassung

  12. 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

  13. Konzept

  14. Beispiel • Haskell-Interpreter: • Falsches Definition:

  15. Komplexeres Problem

  16. Funktionalität • Benutzung bedingter Properties möglich • Generierung erfolgt je Durchlauf solange, bis Property erfüllt • Gefahr: Verzerrung der Verteilung • Restriktion der Bedingung verwirft bspw. bestimmte, notwendige Testdaten • Beispiel: sortierte Liste als Bedingung  fast nur kurze Listen als Input

  17. Funktionalität • Überwachung von Inputparametern • Monitoring durch Klassifikation • „classify“ • „collect“

  18. 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

  19. Selbstdefinierte Generatoren • Eigener Typ instanziiert Klasse: • Eigener Generator muss spezifiziert werden • Standardtypen haben bereits Instanzen • Basisgeneratoren können kombiniert werden • Beispiel: • weitere: oneof, frequency, size • Abstraktes ‚Gen‘ ist Instanz der Haskell-Klasse „Monad“ • Berücksichtigung der Monadenfunktionalität

  20. Binärbaum • mit Funktionen ‚suche‘ ‚loesche‘ und ‚einfuegen‘ Demo

  21. 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%

  22. Agenda • Einführung • Haskell • QuickCheck • Zusammenfassung

  23. Zusammenfassung • QuickCheck ist probates Mittel zum Testen • Schnell, effektiv, flexibel, einfach im Umgang • Überwachung der Testläufe • Geringe Testkosten • Nachteil • Keine Garantie bei postulierter Fehlerfreiheit • Konzeption komplexer Properties • Generatorenentwurf kann komplex werden • Ausblick • White-Box-Testing (Data-Flow) mit QuickCheck • White-Box-Testing bei Java

  24. Ende Vielen Dank für die Aufmerksamkeit! Fragen?

  25. Backup

  26. Backup

  27. Backup

  28. Backup

More Related