TDD with Contracts - ein Erfahrungsbericht
Raum Kraichgau
Der Einsatz von Softwareverträgen (Contracts) in der Agilen Software-Entwicklung mit Java ist ein noch junger Ansatz, obwohl die zugrunde liegenden Kernkonzepte aus den Anfängen der Objektorientierten Programmierung (OOP) stammen.
Die Verbindung von Test Driven Development (TDD) mit Softwareverträgen zu "TDD with Contracts" verspricht die Verfeinerung des aus Testfällen bestehenden Sicherheitsnetzes von TDD durch Vertragsklauseln.
Dieses verfeinerte Sicherheitsnetz sollte - so die erste These der Referenten - auch subtile Fehlerkonstellationen schon in der Entwicklung des Systems durch Verletzungen von Post-Conditions und Klassen-Invarianten aufdecken können.
Die zweite These besagt, dass durch die explizite Anzeige der Vertragsklauseln in der Entwicklungsumgebung (Eclipse JDT) eine der Hauptursachen von Softwarefehlern adressiert wird: Fehlerhafte Annahmen über die Semantik der öffentlichen Schnittstelle einer Klasse.
Erfahrungen in Schweden zeigen, dass 80% aller Fehler in Softwaresystemen auf die Verletzung von Pre-Conditions und Klassen-Invarianten zurückzuführen sind. Ursache sind fehlerhafte Annahmen über die Bedingungen, die erfüllt sein müssen, damit eine Methode korrekt ausgeführt werden kann. Und dies gilt nicht nur für Klassen, die von dritter Seite erstellt wurden, sondern ebenso für selbsterstellte Klassen.
Die zugrunde liegenden impliziten Annahmen für die Nutzung der öffentlichen Schnittstelle der Klassen explizit zu formulieren und zur Entwicklungszeit in Erinnerung zu rufen und die Einhaltung dieser Verträge zur Laufzeit zu überwachen, das ist das Ziel von Softwareverträgen.
Prof. Dr. Roland Küstermann und Hagen Buchwald stellen erste Erfahrungen mit TDD with Contracts in einem Pilotprojekt mit Java und C4J (Contracts for Java) an der DHBW Karlsruhe vor.