Programmation par contrat
La programmation par contrat est applicable d'une façon ou d'une autre à tous les langages.
L'idée est d'établir des règles, appelées assertions qui contrôlent la cohérence des données à certains points clé de l’exécution du programme.
Le principe est de préciser ce qui doit être vrai à un moment donné, en therme informatique :
- Précondition : La condition qui doit être vérifiée par le client avant le lancement d'un traitement donné. Cette condition doit garantir que l'exécution du traitement est possible sans erreur.
- Postcondition : La condition qui doit être garantie par le fournisseur après le déroulement d'un traitement donné. Cette condition doit garantir que le traitement a bien réalisé son travail.
- Invariant : Il s'agit d'une condition qui est toujours vraie.
Après quelque temps, si l'on utilise à nouveau cette même fonction, il se peut que nous ne l'utilisions pas comme attendu à l'époque, causant un dysfonctionnement par mégarde.
Plutôt que de déboguer le programme afin de rechercher la source d'une anomalie, un contrat permet de prévenir les erreurs, la fonction n'essaiera donc pas de s'exécuter mais indiquera directement que ce qui lui a été demandé n'était pas correct avec ce qui avait été spécifié.
Certains langages intègrent ces contrats dans la définition des méthodes, d’autres permettent l’ajout d’assertions au sein du code (Debug.Assert en .NET).
En .NET, les assertions sont évaluées seulement en mode debug, une exception est levée à chaque assertion non validée.
Il est également fréquent de voir en début de procédure un contrôle susceptible de lever des exceptions de type ArgumentException, ArgumentNullException ou ArgumentOutOfRangeException.
C'est généralement une bonne pratique.
Dans la pratique, ce paradigme a été remplacé par l’utilisation des tests unitaires.
Pour plus de détail, consultez :
Wikipedia - Programmation par contrat
Wikipedia - Tests unitaires.
Windev - Gestion des assertions
.NET - Assertions dans du code managé
Rubriques connexes :