Sono un programmatore un po 'difensivo e un grande fan dei Contratti di codice di Microsofts.
Ora non posso sempre usare C # e nella maggior parte delle lingue l'unico strumento che ho sono asserzioni. Quindi di solito finisco con un codice come questo:
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
Tuttavia, questo paradigma (o come lo chiameresti tu) porta a un sacco di ingombri di codice.
Ho iniziato a chiedermi se valga davvero la pena di uno sforzo e se il test di unità adeguato lo avrebbe già coperto?