Recentemente ho scoperto Design by Contract (DbC) e trovo un modo estremamente interessante per scrivere codice. Tra l'altro, sembrerebbe offrire:
- Migliore documentazione. Poiché il contratto è la documentazione, è impossibile che uno sia obsoleto. Inoltre, poiché il contratto specifica esattamente cosa fa una routine, aiuta a supportare il riutilizzo.
- Debug più semplice. Dal momento che l'esecuzione del programma si interrompe nel momento in cui un contratto fallisce, gli errori non possono propagarsi, e l'asserzione specifica violata sarà presumibilmente evidenziata. Questo offre supporto durante lo sviluppo e durante la manutenzione.
- Migliore analisi statica. DbC è fondamentalmente solo un'implementazione della logica Hoare, e dovrebbero essere applicati gli stessi principi.
I costi, a confronto, sembrano piuttosto piccoli:
- Dattilografia aggiuntiva. Poiché i contratti devono essere enunciati.
- Prende un po 'di allenamento per sentirsi a proprio agio con i contratti di scrittura.
Ora, avendo familiarità principalmente con Python, mi rendo conto che è in effetti possibile scrivere le precondizioni (solo lanciando eccezioni per input inappropriati) ed è anche possibile usare asserzioni per testare nuovamente alcune postcondizioni. Ma non è possibile simulare certe caratteristiche come "vecchio" o "risultato" senza un po 'di magia in più che alla fine sarebbe considerata non-Pythonic. (Inoltre, ci sono alcune librerie che offrono supporto, ma alla fine ho l'impressione che sarebbe sbagliato usarle, come la maggior parte degli sviluppatori no.) Suppongo che sia un problema simile per tutte le altre lingue (eccetto ovviamente , Eiffel).
La mia intuizione mi dice che la mancanza di supporto deve essere il risultato di un qualche tipo di rifiuto della pratica, ma la ricerca online non è stata fruttuosa. Mi chiedo se qualcuno possa chiarire perché la maggior parte delle lingue moderne sembra offrire così poco supporto? DbC è imperfetto o eccessivamente costoso? O è solo obsoleto a causa di Extreme Programming e altre metodologie?