Soy un programador algo defensivo y un gran admirador de los Contratos de Código de Microsofts.
Ahora no siempre puedo usar C # y en la mayoría de los lenguajes, la única herramienta que tengo son las aserciones. Por lo general, termino con un código como este:
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
Sin embargo, este paradigma (o como quiera llamarlo) conduce a una gran cantidad de desorden de código.
He comenzado a preguntarme si realmente vale la pena el esfuerzo y si la prueba de unidad adecuada ya cubriría esto.