Ich habe kürzlich Design by Contract (DbC) entdeckt und finde es eine äußerst interessante Art, Code zu schreiben. Unter anderem scheint es folgendes zu bieten:
- Bessere Dokumentation. Da der Vertrag die Dokumentation ist, ist es unmöglich, dass einer nicht mehr aktuell ist. Da im Vertrag genau angegeben ist, was eine Routine tut, kann die Wiederverwendung unterstützt werden.
- Einfacheres Debuggen. Da die Programmausführung in dem Moment stoppt, in dem ein Vertrag fehlschlägt, können sich Fehler nicht verbreiten, und die bestimmte verletzte Behauptung wird vermutlich hervorgehoben. Dies bietet Unterstützung bei der Entwicklung und bei der Wartung.
- Bessere statische Analyse. DbC ist im Grunde genommen nur eine Implementierung der Hoare-Logik, und die gleichen Prinzipien sollten gelten.
Die Kosten scheinen im Vergleich eher gering zu sein:
- Extra Fingertippen. Da müssen die Verträge präzisiert werden.
- Benötigt einige Schulungen, um sich mit dem Schreiben von Verträgen vertraut zu machen.
Jetzt, da ich in erster Linie mit Python vertraut bin, ist mir klar, dass es tatsächlich möglich ist, Vorbedingungen aufzuschreiben (nur Ausnahmen für unangemessene Eingaben auszulösen), und es ist sogar möglich, Assertions zu verwenden, um bestimmte Nachbedingungen erneut zu testen. Es ist jedoch nicht möglich, bestimmte Funktionen wie "alt" oder "Ergebnis" ohne zusätzliche Magie zu simulieren, die letztendlich als unpythonisch angesehen werden würde. (Außerdem gibt es einige Bibliotheken, die Unterstützung bieten, aber letztendlich ist es falsch, sie zu verwenden, da die meisten Entwickler dies nicht tun.) Ich gehe davon aus, dass dies ein ähnliches Problem für alle anderen Sprachen ist (außer natürlich) , Eiffel).
Meine Intuition sagt mir, dass der Mangel an Unterstützung auf eine Art Ablehnung der Praxis zurückzuführen sein muss, aber die Online-Suche war nicht fruchtbar. Ich frage mich, ob jemand erklären kann, warum die meisten modernen Sprachen so wenig Unterstützung bieten? Ist DbC fehlerhaft oder zu teuer? Oder ist es aufgrund von Extreme Programming und anderen Methoden einfach veraltet?