Ende letzten Jahres war ich auf einer Präsentation zum Thema Scrum und wie man die “Definition of Done” korrekt bestimmt und sauber abgrenzen kann. Dabei ging es jedoch insgesamt gar nicht so sehr um das Thema Scrum selbst, sondern um ein für mich doch neues Stichwort “Design by Contract“.
Generell ist es ja möglich Teile eines Java Programms bereits bei der Ausführung über Assertions zu überprüfen um rechtzeitig Fehlermeldungen zu einer Verletzung der vom Programmierer angenommenen Regeln zu erhalten. Dies ist nichts Neues – es ist aber recht beschwerlich für eine komplette Vererbungslinie dies konsequent zu pflegen und zu überprüfen. Zusätzlich dazu wird auch der eigentlich Code durch Überprüfungen aufgedunsen. Eine Lösung für dieses Problem sieht das Programmierkonzept “Design by Contract” vor, welches von Bertrand Meyer für die Programmiersprache Eifel entwickelt wurde.
Design by Contract kann sehr nützlich sein, Fehler während der Entwicklungszeit abzufangen und direkt an der Quelle den Fehler zu suchen – nicht erst nachdem das eigentliche Problem durch den weiteren Programmablauf verschleiert wurde und an viel späterer Stelle als anderes Symptom zu Tage tritt. Für Java gibt es mittlerweile schon eine übersichtliche Anzahl an Implementierungen die den Entwurf nach Vertrag mehr oder weniger gut umsetzen. Eine im besuchten Vortrag vorgestellte Implementierung kommt von dem Schweden Jonas Bergström und nennt sich schlicht C4J – Contracts for Java.