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

Mobile Learning v3.8 @ Glenbrook South
Mobile Learning v3.8 @ Glenbrook SouthMobile Learning v3.8 @ Glenbrook South
Mobile Learning v3.8 @ Glenbrook SouthDarren Kuropatwa
 
Simple ideas for powerful stories
Simple ideas for powerful stories Simple ideas for powerful stories
Simple ideas for powerful stories Dean Shareski
 
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)
[DevLOVE]HangerTalksLT「禁断のパズルボックスを解いたギークはデザインがもたらす希望の光をメガネ越しに見た!?」(公開用)masashi takehara
 

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

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

More from Stefan Macke

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 ExceptionsStefan Macke
 
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 EEStefan Macke
 
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)Stefan Macke
 
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 ExceptionsStefan Macke
 
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 ERPStefan Macke
 
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...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 7Stefan 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

OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 

Recently uploaded (20)

OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 

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.