Unit Tests als Spezifikation?

Abstract

Ohne automatisierte Tests wäre TDD, das Kernstück von XP, undenkbar. Häufig wird auch behauptet, dass Tests das Verhalten des Codes dokumentieren. Doch ist dies tatsächlich der Fall?

Traditionelle Tests überprüfen das Verhalten beispielhaft anhand einiger (hoffentlich) gut gewählter Eingabewerte oder Szenarien. Doch was ist mit Werten, die man beim Schreiben des Tests vergessen hat? Hier fehlt dann nicht nur der Test, sondern auch die Dokumentation!

Testing Tools für funktionale Sprachen, wie z. B. QuickCheck für Haskell, verwenden seit jeher eine komplett andere Herangehensweise. Statt explizit Eingabewerte anzugeben, spezifiziert man charakteristische Eigenschaften des Codes, die unter bestimmten Voraussetzungen gelten sollen. Bei der Testausführung werden diese Eigenschaften dann anhand automatisch generierter Eingabewerte verifiziert.

JUnit bietet seit einiger Zeit die Möglichkeit, solche Eigenschaften als sog. Theories zu formulieren. Was im Vergleich mit QuickCheck und anderen aber fehlt, ist die automatische Erzeugung von Eingabewerten aus einer wie auch immer gearteten Spezifikation heraus. In dieser Session werden zuerst die theoretischen Hintergründe von Spezifikationstechniken angerissen und betrachtet, welche Eigenschaften ein Test braucht, um als gute Spezifikation dienen zu können. Anschließend werden die beiden oben genannten Techniken anhand praktischer Beispiele verglichen, kombiniert und diskutiert.

Diese Session ist alternativ zur Session 215 zu verstehen. Die Erweiterung auf 60 Minuten erlaubt es uns, stärker in die theoretischen Hintergründe einzusteigen und mehr praktische Beispiele zu präsentieren.

Speaker

Nicole Rauch, Marc Philipp

Folien bei Slideshare

http://www.slideshare.net/mphilipp/unit-tests-als-spezifikation

Code bei GitHub

https://github.com/marcphilipp/xpdays2010/

 

Die Veranstalter der XPDays:


it-agile Logo andrena objects Logo