Sono un programmatore un po 'difensivo e un grande fan dei contratti di codice di Microsoft.
Ora non posso sempre usare C # e nella maggior parte delle lingue l'unico strumento che ho sono le 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) porta a un sacco di ingombri di codice.
Ho iniziato a chiedermi se ne sia valsa davvero la pena e se un corretto test unitario lo coprisse già?