Poiché è conveniente per lo sviluppatore, lo stesso paradigma viene spesso utilizzato per implementazioni e specifiche, ad es.
- per i test (ad esempio Java per l'implementazione e i test unitari, Scala per l'implementazione e il test delle proprietà)
- per i test basati su modelli (ad esempio C # per l'implementazione e le specifiche utilizzando Spec Explorer o Java per l'implementazione e le specifiche con Conformiq)
- per la verifica (ad es. C per alcuni software e specifiche incorporate nella lingua Promela del linguaggio C per il controllo del modello, o Dafny, che integra l'implementazione e le specifiche).
Sembra che ci sia una tendenza in questa direzione.
Ho sempre pensato che l'utilizzo di paradigmi diversi avrebbe aiutato a pensare a diversi livelli di astrazione e più in generale a strutture diverse, e che i difetti potevano essere rilevati molto meglio in questo modo, controllando l'implementazione rispetto ai test / specifiche (simile all'utilizzo di diversità del design per sistemi fault tolerant).
Quindi è vero che diversi paradigmi per l'implementazione e le specifiche possono evitare più errori? Hai un riferimento citabile?