Я несколько оборонительный программист и большой поклонник контрактов Microsoft.
Теперь я не всегда могу использовать C #, и в большинстве языков единственный инструмент, который у меня есть, это утверждения. Поэтому я обычно получаю такой код:
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
Однако эта парадигма (или как бы вы ее ни называли) приводит к большому количеству помех в коде.
Я начал задаваться вопросом, действительно ли это стоит усилий и охватит ли это надлежащий модульный тест?