SlideShare a Scribd company logo
1 of 60
sdominick – Copyright 2013 – www.istockphoto.com/photos/3303439
sdominick – Copyright 2013 – www.istockphoto.com/photos/8369823
sdominick – Copyright 2013 – www.istockphoto.com/photos/8357715
sdominick – Copyright 2013 – www.istockphoto.com/photos/3354516
Quelle: https://github.com/nick8325/quickcheck/blob/master/examples/Simple.hs
Tomwang112 – Copyright 2013 – www.istockphoto.com/photos/15897460
ArrayList
BigDecimal Date
String
Enum
double
boolean
sdominick – Copyright 2013 – www.istockphoto.com/photos/8322938
♂ <20
♂<20
<20
adriano7492 - Public Domain CC0 - pixabay.com/de/würfel-spiel-rollenspiel-2788986/
gregepperson – Copyright 2013 – www.istockphoto.com/photos/20009058
Alexas_Fotos – Public Domain CC0 – pixabay.com/de/minions-lustig-doppelt-banane-spaß-1398001/
http://soa.rocks
anwendungsentwickler
podcast.de
@StefanMacke

More Related Content

Similar to Property-based Testing mit JUnit-Quickcheck

[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
masashi takehara
 

Similar to Property-based Testing mit JUnit-Quickcheck (10)

Telling Photo Tales v2
Telling Photo Tales v2Telling Photo Tales v2
Telling Photo Tales v2
 
Mobile Learning v3.8 @ Glenbrook South
Mobile Learning v3.8 @ Glenbrook SouthMobile Learning v3.8 @ Glenbrook South
Mobile Learning v3.8 @ Glenbrook South
 
Barcamp du Clair2013
Barcamp du Clair2013Barcamp du Clair2013
Barcamp du Clair2013
 
Simple ideas for powerful stories
Simple ideas for powerful stories Simple ideas for powerful stories
Simple ideas for powerful stories
 
Telling Photo Tales v4
Telling Photo Tales v4Telling Photo Tales v4
Telling Photo Tales v4
 
Robot moodboard
Robot moodboardRobot moodboard
Robot moodboard
 
Don't Just Shoot
Don't Just ShootDon't Just Shoot
Don't Just Shoot
 
Design Commons
Design CommonsDesign Commons
Design Commons
 
I increased women's engagement in computer science!
I increased women's engagement in computer science!I increased women's engagement in computer science!
I increased women's engagement in computer science!
 
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
 

More from Stefan Macke

Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7
Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7
Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7
Stefan Macke
 

More from Stefan Macke (8)

Railway Oriented Programming - Funktionaler programmieren ohne Exceptions
Railway Oriented Programming - Funktionaler programmieren ohne ExceptionsRailway Oriented Programming - Funktionaler programmieren ohne Exceptions
Railway Oriented Programming - Funktionaler programmieren ohne Exceptions
 
100% Code Coverage - TDD mit Java EE
100% Code Coverage - TDD mit Java EE100% Code Coverage - TDD mit Java EE
100% Code Coverage - TDD mit Java EE
 
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
 
Railway Oriented Programming - Java funktional und ohne Exceptions
Railway Oriented Programming - Java funktional und ohne ExceptionsRailway Oriented Programming - Java funktional und ohne Exceptions
Railway Oriented Programming - Java funktional und ohne Exceptions
 
Sketch Notes
Sketch NotesSketch Notes
Sketch Notes
 
Steuerung für automatische Verbuchungsprozesse im SAP ERP
Steuerung für automatische Verbuchungsprozesse im SAP ERPSteuerung für automatische Verbuchungsprozesse im SAP ERP
Steuerung für automatische Verbuchungsprozesse im SAP ERP
 
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
 
Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7
Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7
Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7
 

Recently uploaded

CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 

Property-based Testing mit JUnit-Quickcheck

Editor's Notes

  1. Ich möchte heute etwas über Property-based Testing erzählen. Beginnen wir mit einer kleinen Geschichte.
  2. Das ist Stefan. Stefan freut sich.
  3. Denn Stefan mag Unit-Tests. Er schreibt seine Software sogar testgestrieben.
  4. Für Stefan gibt es nichts Schöneres als einen grünen Balken in Eclipse.
  5. Aber bei einigen Aufgaben ist Stefan auch mal genervt von den ganzen Tests, die er schreiben muss. Neulich musste Stefan z.B. einen Algorithmus zum Ermitteln der Primfaktoren einer Zahl programmieren.
  6. Dabei werden Zahlen in ihre Primfaktoren zerlegt. Jede natürliche Zahl kann als eindeutiges Produkt aus Primzahlen dargestellt werden.
  7. Der Algorithmus selbst ist nicht allzu komplex.
  8. Aber Stefan musste dafür mehrere Tests schreiben, die alle sehr ähnlich aussahen.
  9. Und trotzdem beschlich Stefan das ungute Gefühl, dass er vielleicht noch einen wichtigen Test vergessen haben könnte.
  10. Außerdem mag Stefan keinen doppelten Code.
  11. Aber die Assertions in eine einzige Methode zu packen, gefällt ihm auch nicht…
  12. …da beim ersten Fehler die übrigen Assertions nicht mehr durchgeführt werden.
  13. Parametrisierte Tests wären dafür zwar eine gute Lösung…
  14. …aber die Beispiele muss Stefan sich trotzdem noch selbst ausdenken.
  15. 5min Warum kann man sich die Testfälle nicht einfach generieren lassen? Das muss doch möglich sein!
  16. Zufallszahlen zu generieren ist tatsächlich kein Problem. Aber woher soll der Test jetzt wissen, was das erwartete Ergebnis ist? Vielleicht müssen die Tests einfach komplett anders entwickelt werden, um zufällige Eingangswerte nutzen zu können.
  17. Und genau darum soll es heute gehen: Wie ersetze ich meine manuellen Example-based Tests durch generierte Property-based Tests?
  18. Example-based Testfälle mit erwartetem Ergebnis ausdenken Testet nur die definierten Werte Testet konkrete Ergebnisse des Algorithmus Property-based Testfälle werden generiert Testet potentiell alle möglichen Eingangswerte Testet allgemeine Eigenschaften des Algorithmus
  19. PBT kommt ursprünglich aus der funktionalen Programmierung. Eines der ersten Frameworks war Quickcheck für Haskell.
  20. Aber keine Angst, PBT kann inzwischen auch mit „normalen“ Sprachen verwendet werden.
  21. Ich verwende im Folgenden JUnit-Quickcheck für Java, aber es gibt auch Frameworks für viele andere Sprachen.
  22. Schauen wir uns ein Beispiel in JUnit-Quickcheck an. Der simple zu testende Code ist ein Alterscheck.
  23. Ein (nicht so sinnvoller) Test mit JUnit-Quickcheck könnte so aussehen.
  24. 10min Das Ergebnis ist entsprechend… Aber für die Fehlersuche ist der Wert jetzt nicht allzu hilfreich.
  25. Was hier helfen kann ist „Shrinking“.
  26. Das Framework versucht nun, den Eingangswert auf den „kleinsten“ Wert zu reduzieren, der einen Fehlschlag produziert.
  27. Und tatsächlich wird die magische Grenze von 130 schnell gefunden.
  28. Man kann dem Framework aber auch gleich sagen, welche Werte verwendet werden sollen.
  29. Die Frameworks haben aber auch noch weitere interessante Funktionen. Weitere Einschränkungen für die generierten Werte Seeds für reproduzierbare Tests Generatoren für Basistypen Generatoren für eigene Typen sind möglich
  30. 10min Ok, die Frameworks sind ganz toll. Aber kann ich PBT jetzt wirklich einfach so einsetzen? Komm zum Punkt!
  31. Es eignen sich nicht alle Algorithmen für PBT, da es allgemeine Eigenschaften geben muss, gegen die man testen kann. Die Primfaktorzerlegung ist ein gutes Beispiel für einen mit PBT testbaren Algorithmus, da ziemlich einfach für jede Eingangszahl geprüft werden kann, ob das Ergebnis korrekt ist.
  32. Um zu prüfen, ob die Zerlegung korrekt ist, kann man einfach das Produkt der Faktoren bilden und es mit der Eingangszahl vergleichen.
  33. Um zu prüfen, ob die Zerlegung korrekt ist, kann man einfach das Produkt der Faktoren bilden und es mit der Eingangszahl vergleichen.
  34. So könnte das Ganze dann als Test aussehen.
  35. Zusätzlich könnte man noch testen, dass die Primfaktoren selbst nicht weiter zerlegbar sind.
  36. So könnte das Ganze dann als Test aussehen.
  37. Die Primfaktorzerlegung lässt sich also anscheinend gut mit PBT testen. Aber für welche Algorithmen gilt das denn nun ganz allgemein?
  38. Wenn es zum zu testenden Algorithmus eine Umkehroperation gibt, kann man diese nutzen, um allgemeingültige Tests zu schreiben.
  39. Hier ist ein Beispiel für eine Serialisierung zu JSON und die Prüfung gegen die Deserialisierung des Ergebnisses.
  40. 15min Wenn man Operationen verketten kann, sollten unterschiedliche Reihenfolgen in vielen Fällen zum gleichen Ergebnis führen.
  41. Wenn man z.B. eine Liste aus Personen nach Geschlecht und Alter filtert, sollte die Reihenfolge der Filter egal sein.
  42. So könnte ein entsprechender Test aussehen.
  43. 15min Bestimmte Eigenschaften von Ergebnissen sind bei einigen Algorithmen immer gleich, unabhängig vom konkreten Ergebnis.
  44. Hashes eines bestimmten Algorithmus haben z.B. immer die gleiche Länge, unabhängig vom Eingangswert.
  45. SHA256-Hashes haben gewisse Eigenschaften, die immer gelten müssen.
  46. Bestimmte Operationen sollten idempotent sein, also bei mehrfachem Aufruf immer das gleiche Ergebnis liefern.
  47. Eine bereits sortierte Liste sollte auch nach erneutem Sortieren sortiert bleiben.
  48. So könnte ein Test für die Sortierung aussehen.
  49. Manchmal hat man vielleicht eine Referenzimplementierung, gegen die man seinen eigenen Algorithmus prüfen kann.
  50. Zur Ermittlung des größten gemeinsamen Teilers zweier Zahlen kann man z.B. die Primfaktorzerlegung nutzen oder den Algorithmus von Euklid.
  51. So könnte dann ein Test aussehen.
  52. 20min Damit sind wir schon beim Fazit angelangt.
  53. Schon bei wenigen möglichen Parametern explodieren die Kombinationsmöglichkeiten für automatisierte Tests. Um nichts zu vergessen, ist eine Generierung möglicher Werte und Kombinationen hilfreich.
  54. Man spart sich mühsame Tests von Edge Cases und kann nichts vergessen.
  55. Trotzdem enthalten die Tests keinen doppelten Code mehr und sind sogar allgemeingültiger.
  56. Das macht sich auch in einer entsprechenden Code Coverage bemerkbar.
  57. Sinnvoll ist also vielleicht eine Mischung aus Example- und Property-based Tests. Beim TDD erstellt man wahrscheinlich eher EBTs und im Anschluss dann PBTs zur Absicherung.
  58. Stefan kann sich also wieder über seine Arbeit freuen und das beste aus beiden Welten nutzen!
  59. Danke für die Aufmerksamkeit.