J'ai récemment découvert Design by Contract (DbC) et je trouve que c'est un moyen extrêmement intéressant d'écrire du code. Entre autres choses, il semblerait offrir:
- Meilleure documentation. Étant donné que le contrat est la documentation, il est impossible qu’une personne soit périmée. De plus, comme le contrat spécifie exactement ce que fait une routine, il facilite la réutilisation.
- Débogage plus simple. Étant donné que l'exécution du programme s'arrête en cas d'échec d'un contrat, les erreurs ne peuvent pas se propager et l'assertion spécifique violée sera probablement mise en évidence. Ceci offre un support lors du développement et de la maintenance.
- Meilleure analyse statique. DbC est fondamentalement juste une implémentation de la logique de Hoare, et les mêmes principes devraient s'appliquer.
Les coûts, en comparaison, semblent plutôt minimes:
- Dactylographie supplémentaire. Depuis les contrats doivent être précisés.
- Prend un peu de formation pour se familiariser avec la rédaction de contrats.
Maintenant, connaissant principalement Python, je me rends compte qu’il est en fait possible d’écrire des conditions préalables (en lançant juste des exceptions pour des entrées inappropriées) et qu’il est même possible d’utiliser des assertions pour tester à nouveau certaines post-conditions. Mais il n'est pas possible de simuler certaines fonctionnalités telles que "ancien" ou "résultat" sans une magie supplémentaire qui serait finalement considérée comme non pythonique. (En outre, quelques bibliothèques offrent un support, mais au final, j'ai l'impression qu'il serait erroné de les utiliser, contrairement à la plupart des développeurs.) Je suppose que c'est un problème similaire pour tous les autres langages (sauf bien sûr , Eiffel).
Mon intuition me dit que le manque de soutien doit être le résultat d’une sorte de rejet de la pratique, mais la recherche en ligne n’a pas été fructueuse. Je me demande si quelqu'un peut expliquer pourquoi la plupart des langues modernes semblent offrir si peu d'assistance? DbC est-il défectueux ou trop cher? Ou est-ce simplement obsolète en raison de la programmation extrême et d'autres méthodologies?