jContractor - Design By Contract
Design By Contract
Présentation
Qu'est ce que le Design By Contract ? Il s'agit d'un concept de programmation, dont le principe est que tout traitement informatique est régi par des règles. Ces règles sont des expressions booléennes qu'on appelle contrats, elles permettent de préciser la responsabilité entre le client et le fournisseur d'un morceau de programmes.
Au premier abord, ce principe s'apparente à un système de tests unitaires. C'est une fausse idée, le principe est de tester si à un instant donné l'exécution du programme est correcte en vérifiant les contrats. Il ne s'agit pas de vérifier tous les contrats mis en place, mais seulement de s'assurer que pour une exécution donnée, l'utilisation d'un morceau de code ainsi que son traitement, régi par un contrat, s'est bien déroulé.
A l'inverse, les tests unitaires permettent d'exécuter une batterie de tests, pour vérifier que tous les cas d'erreurs et
différentes exécutions possibles sont bien conformes aux spécifications.
De plus les tests unitaires sont généralement couplés avec un système d'intégration continue et s'exécutent en parallèle, ou à la
fin du développement.
Pour la programmation par contrat, la vérification des contrats s'effectue pendant l'exécution du code, en même temps que
le programmeur teste son code.
On distingue 3 types de contrats :
- Précondition : Le contrat doit être vérifié par le client, avant l'exécution d'une méthode. Il spécifie la condition à respecter par le développeur pour que la suite du programme se déroule correctement.
- Postcondition : Le contrat doit être vérifié par le fournisseur du morceau de code, après l'exécution d'une méthode. Il garantit que l'exécution du traitement s'est bien déroulée et que le retour est conforme à ce qui est attendu.
- Invariant : Ce contrat spécifie une condition qui doit être toujours vraie avant et après l'exécution d'une méthode.
Aujourd'hui, Design By Contract a été reconnu comme méthode de développement. Cette technique a prouvé qu'elle améliorait la qualité logicielle, et réduisait le temps de débogage d'un programme.
Historique
Le concept de Design By Contract a été inventé par Bertrand Meyer en 1985. Son objectif : créer un langage informatique qui soit suffisamment verbeux pour être compréhensible par des non informaticiens. Bertrand Meyer invente donc le langage Eiffel, auquel il introduit nativement, le concept de Design By Contract.
En 1999, Murat Karaorman, Urs Hölzle, et John Brunon, proposent jContractor, une implémentation du Design By Contract pour Java. Après que le projet ait dormit pendant quelques années, il est repris par un étudiant de l'université Santa Barbara de Californie, Parker abercrombie.
Grâce à l'efficacité du concept, on trouve aujourd'hui dans la plupart des langages des librairies externes, offrant la possibilité de développer avec Design By Contract.