Jestem nieco defensywnym programistą i wielkim fanem kontraktów Microsofts Code.
Teraz nie zawsze mogę używać C # iw większości języków jedynym narzędziem, jakie mam, jest twierdzenie. Więc zwykle kończę na takim kodzie:
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
Jednak ten paradygmat (lub jakkolwiek byś go nazwał) prowadzi do zaśmiecenia kodu.
Zacząłem się zastanawiać, czy to naprawdę jest warte wysiłku i czy odpowiedni test jednostkowy już to obejmie?