[Python] Design By Contract in Python

enrico franchi enrico.franchi a gmail.com
Mar 9 Dic 2014 18:37:19 CET


2014-12-09 16:46 GMT+00:00 Marco Ippolito <ippolito.marco a gmail.com>:

> Ciao Enrico,
> ammetto la mia ignoranza.
> non capisco perchè in python dovrebbe essere un controsenso.
>
>

> Se ho capito bene il senso (scusate il gioco di parole) del design by
> contract, l'obiettivo è quello di "dichiarare" in qualche modo
> all'inizio cosa deve produrre un certo pezzo di codice, quali input
> sono accettabili per esso, e le condizioni che devono rimanere vere
> per il chiamante.
>

Non e' solo *dichiararlo*. E' *definirlo*, ma soprattutto *verificarlo*.


> Come dici tu queste idee di fondo mi sembrano essere buone, nel senso
> che aiutano a pensare il codice in termini di "service" fornito
> reciprocamente dai vari componenti, e questo rende il tutto più
> facilmente testabile.
>

Non e' solo questione di essere *testabile*. Essenzialmente si tratta di
roba che e' formalmente dimostrabilmente corretta e che, di conseguenza,
non necessariamente dovrebbe avere bisogno di "test" in senso stretto,
perche' l'ambiente dovrebbe fare i test in modo automatico. Di fatto, un
buon numero di test dovrebbero diventare ridondanti. E tipicamente vuoi che
sia fatto *staticamente*.



>
> Perchè in python dovrebbe essere un controsenso?
>

Perche' e' un linguaggio completamente dinamico che vive praticamente
interamente a runtime.
L'unico punto in cui e' veramente possibile fare le verifiche e' a runtime.
E in generale si tratta di roba relativamente costosa da verificare
(perche' vuoi che i contratti siano sensati, non limitarti a quelli facili
da testare).


> Quello che alla fine vorrei utilizzare in modo pratico e concreto è
> delle modalità meglio se codificate e già in uso, che mi aiutino a
> pensare in anticipo a modi "intelligenti" di scrivere il codice.  Non
> potrebbe servire l'approccio Design by Contract?
>

Boh. "Potrebbe" servire, certo. Metti conto che la metodologia come
definita da manuale non mi risulta usata praticamente da nessuno. Per me e'
una di quelle cose che a volte torna comoda come strumento concettuale, ma
poi la cosa finisce li.

In generale fa bene sapere che c'e', fa bene sapere come funziona. Fa anche
bene saperci ragionare. Ma poi, per me, finisce li. YMMV.


-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20141209/452287b0/attachment-0001.html>


Maggiori informazioni sulla lista Python