Differenze tra progettazione per contratto e programmazione difensiva

26

Potrebbe progettare per contratto (DbC) essere un modo di programmare in modo difensivo?

È un modo di programmare meglio in alcuni casi rispetto all'altro?

    
posta Gabriel Fair 15.12.2011 - 15:46
fonte

2 risposte

28

Design by Contract e programmazione difensiva sono in un certo senso opposti l'uno dell'altro: in DbC, si definiscono i contratti tra i collaboratori e si programma in base al presupposto che i collaboratori onorino i loro contratti. Nella programmazione difensiva, programmi in base al presupposto che i tuoi collaboratori violano i loro contratti.

Una vera e propria routine di radice quadrata scritta in stile DbC affermerebbe nel suo contratto che non ti è permesso passare un numero negativo e quindi semplicemente supponi che non possa mai incontrare un numero negativo. Una vera e propria routine di radice quadrata scritta in modo difensivo presumerebbe che sia passato un numero negativo e prendere le precauzioni appropriate.

Nota: è ovviamente possibile che in DbC qualcun altro verifichi il contratto. Ad esempio, ad Eiffel, il sistema contrattuale controllerebbe un numero negativo in fase di esecuzione e genererebbe un'eccezione appropriata. In Spec #, il proverbio del teorema controllerebbe i numeri negativi in fase di compilazione e fallirebbe la compilazione, se non può dimostrare che la routine non riceverà mai un numero negativo. La differenza è che il programmatore non effettua questo controllo.

    
risposta data 15.12.2011 - 16:25
fonte
7

Could Designing by Contract (DbC) be a way to program defensively?

Sì.

"Programmazione difensiva" è spesso una scusa per perdere tempo. Spesso si perde tempo a controllare le cose che causano eccezioni ordinarie. Invece delle eccezioni, vengono scritte istruzioni IF extra invece delle clausole di gestione delle eccezioni.

Definisci il contratto e fallo con esso.

Quando qualcuno viola il contratto, il programma - nel corso normale degli eventi - interromperà e solleverà le normali eccezioni che possono essere normalmente gestite.

"Programmazione difensiva" e "Prevenzione degli errori" possono essere visualizzati per aggiungere errori (perché i controlli di prevenzione degli errori sono essi stessi errati) piuttosto che evitare errori.

La gestione delle eccezioni può mettere a tacere, registrare e gestire un'eccezione molto meglio di "Programmazione difensiva".

    
risposta data 15.12.2011 - 16:59
fonte

Leggi altre domande sui tag