Design by Contract

 

Computeranwendungen werden entweder von einer einzelnen Person geschrieben oder entstehen als Gemeinschaftsprojekt. Eine Gruppe von Programmierern kann man sicher mehr erreichen als ein "Einzelkämpfer" - allerdings muß das Programmierprojekt nunmehr zwischen den Beteiligten koordiniert werden. Es gibt Mittel und Wege, die damit aufkommenden Schwierigkeiten zu beherrschen. Ein Beispiel ist das Konzept des Design by Contract.

Bei Gemeinschaftsprojekten könnte die Arbeit so aufgeteilt werden, daß ein Mitarbeiter eine oder mehrere Komponenten bearbeitet. Design by Contract soll helfen, die Zuständigkeit für die Arbeitspakete (Module) und die genaue Funktionsweise der Funktionen, Module, Klassen oder Bibliotheken eindeutig zu definieren.

Je genauer die Funktionsweise festgelegt ist, desto besser ist das Zusammenspiel der Komponenten. Design by Contract kennt drei Gebiete, auf denen das Zusammenwirken genau spezifiziert wird:

1. Vorbedingungen: der Aufrufer einer Funktion muß bestimmte Vorarbeiten geleistet (z.B. Variablen gesetzt oder Vorberechnungen durchgeführt) haben, bevor die Funktion ausgeführt werden kann. Ein Beispiel hierfür ist die Frage, ob Variablen innerhalb ihrer Gültigkeitsbereiche liegen, was mittels einer Assert-Anweisung überprüft werden kann.

Sind diese Voraussetzungen nicht erfüllt, so liegt es in der Verantwortung der aufrufenden Komponente, dies zu sicherzustellen.

2. Nachbedingungen: die aufgerufene Funktion muß das System im gewünschten Zustand hinterlassen. Der Zustand wird durch einen Satz vorab definierter Nachbedingungen gemessen.

Sind die Nachbedingungen nicht erfüllt, so ist dies an der aufgerufenen Komponente zu korrigieren.

3. Als drittes gibt es den Begriff der Invarianz. Hierunter versteht man logische Zustände einer Klasse, die vor und nach dem Aufruf unverändert bleiben müssen.

Das praktische Ergebnis dieses Paradigmas ist, daß mehrere Programmierer veranlaßt werden, zur Klärung von Zuständigkeiten ausgiebig miteinander zu kommunizieren und möglichst viele Teilgebiete des Programmierens abzustecken: Wertebereiche für Variablen, Rückgabewerte, Fehlerbedingungen, Ausnahmebehandlungen, Seiteneffekte, logische Zustände und so weiter.

Design by Contract kommt zwar aus der professionellen Programmierung, aber das Prinzip kann sicher auch bei Gemeinschaftsprojekten im Amateurbereich nützlich sein.

Ein guter Einstiegspunkt ist der englische Wikipediaartikel.