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