Dans mon expérience, la conception par contrat vaut la peine de faire, même sans le support de la langue. Pour les méthodes qui ne sont pas remplacées assertions, avec docstrings sont suffisante pour à la fois pré - et postconditions. Pour les méthodes qui sont remplacées, nous avons divisé la méthode en deux: une méthode publique qui, vérifiez les pré - et post-conditions, et une méthode protégée qui prévoit la mise en œuvre, et peuvent être remplacées par des sous-classes. Voici un exemple de ce dernier:
class Math:
def square_root(self, number)
"""
Calculate the square-root of C{number}
@precondition: C{number >= 0}
@postcondition: C{abs(result * result - number) < 0.01}
"""
assert number >= 0
result = self._square_root(number)
assert abs(result * result - number) < 0.01
return result
def _square_root(self, number):
"""
Abstract method for implementing L{square_root()}
"""
raise NotImplementedError()
J'ai eu la racine carrée d'exemple général de la conception par contrat à partir d'un épisode sur la conception par contrat du logiciel d'ingénierie radio (http://www.se-radio.net/2007/03/episode-51-design-by-contract/). Ils ont également mentionné le besoin de soutien de la langue parce que les affirmations n'étaient pas utiles pour assurer le Liskov substitution principe, bien que mon exemple ci-dessus vise à démontrer le contraire. Je devrais aussi mentionner que le C++ pimpl (privé la mise en œuvre) de l'idiome comme une source d'inspiration, même si ça a un tout autre but.
Dans mon travail, j'ai récemment refait ce genre de contrat et de vérification dans une classe plus large de la hiérarchie (le contrat a déjà été documentée, mais pas systématiquement testés). Unité existante-des tests ont révélé que le contrat a été violé à de multiples reprises. Je ne peux que conclure de ce qui aurait dû être fait il y a longtemps, et que l'unité de la couverture de test paye même plus d'une fois la conception par contrat est appliqué. J'attends quelqu'un qui essaie de sortir de cette combinaison de techniques pour faire les mêmes observations.
Meilleur outil de soutien peut nous offrir encore plus de puissance à l'avenir, je souhaite la bienvenue à cela.