Indeed. But like it or not, that's as good as testing often gets in
most software development (professional and amateur).
That results with the piles of low quality software (some professional
and most amateur-made) floating around. I don't know who likes it; all
seem to not like it. Doing wrongly because lot of people do it wrongly
is fallacious logic called "argumentum ad populum". If you want to be
lamb then indeed run with sheep, what can I do?
I don't disagree at all, except that the emphasis is on "should have".
I think a very large proportion of software is released with very little
serious testing - and given that, avoiding different settings for
release and development reduces the risk of some classes of bugs.
I propose that better choice is to not release it. Releases of low quality
software are among best ways to turn away potential users. When you have
too lot of users then better publicly accuse them in stupidity, that is
bit cheaper way to reduce their amounts.
If you do not release then potential user is unhappy that you lied that
you can make it. If you are publicly sorry about it then people may
understand. If you didn't make it but released anyway then user is
additionally unhappy that her time was wasted to find that out by trying
out your broken crap. Sheep who release their sheep droppings give ideas
and users (and so the very piles of money) to wolves like Apple.
I also think that even with good test procedures, having just the one
configuration helps catch bugs earlier - it is always best to find them
in development rather that testing.
How so? You give away all the useful features of debug version (useful
debuggers that can match code and data with binary, instrumented memory
management, buffer overflow checking, asserts, checked iterators etc)
and hope to find problems early? Totally on the contrary I'm afraid.
With majority of issues the difference is that "debug" blows up clearly
indicating the issue why while "release" becomes silently unstable and
crazy.
On very little amount of issues the "debug" fails to detect some simple
problems. Solution to current integer overflow has been proposed in this
very thread: -ftrapv in "debug" and the issue is found clearly with
"debug". So I'm actually happy that Alf started such educating flame
war.
But it's not a major issue - it's a help, but there are far more
important measures to reduce errors (such as enabling good warnings, or
perhaps using something like pc-lint or domain-specific checkers -
enabling warnings would let gcc inform Alf of the risks in his overflow
code).
Static code analysis can't replace testing either. It can reduce length
(and so cost) of test-fix-test-fix work. If there won't be testing then
sorry, better rethink that strategy.
Only full coverage automatic tests (of automatically testable modules)
can reduce human testing. It is paying back in long run. Anyway you
need "debug" version to measure coverage, no profiler I've seen can
measure it accurately by using "release".