SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Ähnlich wie Property-based Testing mit JUnit-Quickcheck

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

Ähnlich wie 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「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Kürzlich hochgeladen (20)

Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
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
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
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
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
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
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
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
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
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
 

Property-based Testing mit JUnit-Quickcheck

Hinweis der Redaktion

  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.