Re: info/CWS slidecopy : ENSURE_OR_CONTINUE/BREAK

Stephan Bergmann <[email protected]> Fri, 30 Apr 2010 10:45:11 +0200
Newsgroups gmane.comp.openoffice.announce.interface
Message-ID <[email protected]>
On 04/30/10 09:24, Frank Schoenheit, Sun Microsystems Germany wrote:
>> Defensive programming, eh?  Please don't.  (Look up the arguments
>> against it in Bertrand Meyer's OO tome, for example.  "Defensive
>> programming appears [...] to cover up for the lack of a systematic
>> approach by blindly putting in as many checks as possible, furthering
>> the problem of reliability rather than addressing it seriously.")
> 
> Having seen a lot of nasty bugs and crashes which would have been
> prevented by some more defensive programming, I continue to think that
> defensiveness has its justification sometimes. (As always, using your
> brain is a good idea, admittedly.)

Working around errors in the program logic, by continuing in specific 
ways (continue, break, ...) from a point where it is detected that such 
an error manifested itself (assert) may sometimes "happen to work," but 
in the end only masks the latent errors and makes the code unnecessarily 
complex.

("Defensive programming" probably has various connotations.  Note that I 
am not arguing against a programming style that properly takes care of 
all the "unusual" states a program can legitimately get into.  For me, 
that's not "defensive" programming but just plain normal programming.)

If you use those macros not to assert logic errors, but rather to flag 
"unusual program states," I would prefer if you used something more 
appropriate than OSL_ENSURE/OSL_ASSERT for that (say, OSL_TRACE), 
especially in new code.  Remember that 
<http://qa.openoffice.org/issues/show_bug.cgi?id=109142> "Let assertions 
abort" will at one point force use to check all uses of OSL_ASSERT etc. 
to sort out those that assert logic errors vs. those that merely flag 
"unusual program states."

Apart from that, macros that hide control flow are IMO nasty.  Is the 
savings gained by

   ENUSRE_OR_CONTINUE(...)

vs.

   OSL_ENSURE(...);
   continue;

really worth the trouble?

-Stephan