Property-based Testing mit JUnit QuickCheck

Fazit

Beim Property-based Testing generiert nicht der Entwickler, sondern ein Framework die Testfälle. Durch die zufälligen Werte fallen auch Sonderfälle und Grenzwerte nicht unter den Tisch, die Entwickler eventuell vergessen würden. Außerdem reduziert das Vorgehen den Aufwand für das Programmieren der Tests deutlich, da insbesondere bei Kombinationen aus mehreren Parametern die Anzahl möglicher Testfälle exponentiell steigt, deren Definition bei PBT automatisch erfolgt. Die Methoden müssen allerdings so programmiert sein, dass nicht mehr konkrete Ergebnisse, sondern allgemeine Eigenschaften der zu testenden Algorithmen überprüft werden. Frameworks für PBT existieren für viele Programmiersprachen und Plattformen, und sie sind mit wenig Aufwand direkt einsetzbar.

Das bedeutet jedoch nicht, dass PBT die traditionellen Unit-Tests ersetzen soll. Stattdessen bietet PBT eine gute Möglichkeit, existierende Tests zu ergänzen. Das etablierte Vorgehen beim TDD ändert sich zunächst nicht, aber sobald der Algorithmus nach Meinung der Entwickler fertig implementiert und mit Basistests abgesichert ist, können einige Property-based Tests ergänzend zum Einsatz kommen, um sicherzugehen, dass keine Kombinationen übersehen wurden. Im Beispiel der Primfaktorzerlegung können alleine die zwei gezeigten Property-based Tests sicherstellen, dass der Algorithmus für zufällig gewählte Eingangswerte allgemeingültig funktioniert. Damit bekommen Entwickler mit relativ wenig Aufwand ein zusätzliches Sicherheitsnetz. Das klärt eventuell die ständige Frage, ob Tester noch einige Fälle übersehen haben. (rme)

Stefan Macke
ist Softwareentwickler und -architekt bei der ALTE OLDENBURGER Krankenversicherung AG aus Vechta. Seine Erfahrungen in der Ausbildung teilt er in seinem Anwendungsentwickler-Podcast. In seinen aktuellen Projekten beschäftigt er sich mit der Modernisierung von Altanwendungen auf Basis einer serviceorientierten Architektur mithilfe von Java.