La metodologia Design-by-Contract rende evidente la separazione delle responsabilità:
- un cliente deve soddisfare una precondizione di un fornitore
- un fornitore deve soddisfare la sua postcondizione non appena viene soddisfatta la condizione preliminare
Come risultato di questa politica
- se la precondizione è violata, è un errore del client (il client è "colpevole", è un bug nel codice del client)
- se viene violata la post-condizione, è un errore nel fornitore (il fornitore è "colpevole", è un bug nel codice del fornitore)
Ecco perché è chiamato "contratto" - è un contratto / un accordo tra due parti - il cliente e il fornitore - per soddisfare queste condizioni.
Dal punto di vista del cliente, deve soddisfare la condizione preliminare, ma poi può contare sulla post-condizione che è un obbligo del fornitore. Non è necessario ricontrollare l'output.
Nella vita reale spetta agli autori del codice fornitore come assicurarsi che l'output sia sempre corretto non appena l'input è corretto, sia che si tratti di debug, test, verifica, revisione del codice o altro. Negli ambienti che supportano DbC in modo nativo, è possibile eseguire il monitoraggio run-time delle precondizioni e delle post-condizioni durante l'esecuzione del programma. La violazione del contratto punta immediatamente alla parte che ha problemi.