Spec# est un populaire projet de recherche microsoft qui permet de réaliser certaines constructions DBC, comme la vérification des conditions post et pre. Par exemple, une recherche binaire peut être implémentée avec des pré et post conditions ainsi que des invariants de boucle. Cet exemple et bien d'autres encore :
public static int BinarySearch(int[]! a, int key)
requires forall{int i in (0: a.Length), int j in (i: a.Length); a[i] <= a[j]};
ensures 0 <= result ==> a[result] == key;
ensures result < 0 ==> forall{int i in (0: a.Length); a[i] != key};
{
int low = 0;
int high = a.Length - 1;
while (low <= high)
invariant high+1 <= a.Length;
invariant forall{int i in (0: low); a[i] != key};
invariant forall{int i in (high+1: a.Length); a[i] != key};
{
int mid = (low + high) / 2;
int midVal = a[mid];
if (midVal < key) {
low = mid + 1;
} else if (key < midVal) {
high = mid - 1;
} else {
return mid; // key found
}
}
return -(low + 1); // key not found.
}
Notez qu'en utilisant le langage Spec#, on obtient vérification au moment de la compilation pour les constructions DBC, ce qui, à mon avis, est la meilleure façon de tirer parti de DBC. Souvent, s'appuyer sur les assertions d'exécution devient un casse-tête en production et les gens choisissent en général de exceptions d'utilisation à la place.
Hay autres langues qui considèrent les concepts DBC comme des constructions de première classe, à savoir Eiffel qui est également disponible pour la plate-forme .NET.