Am 21.11.2012 02:43, schrieb Steven D'Aprano:
On Tue, 20 Nov 2012 20:07:54 +0000, Robert Kern wrote:
The source of bugs is not excessive complexity in a method, just
excessive lines of code.
Taken literally, that cannot possibly the case.
def method(self, a, b, c):
do_this(a)
do_that(b)
do_something_else(c)
def method(self, a, b, c):
do_this(a); do_that(b); do_something_else(c)
It *simply isn't credible* that version 1 is statistically likely to have
twice as many bugs as version 2. Over-reliance on LOC is easily gamed,
especially in semicolon languages.
"Don't indent deeper than 4 levels!" "OK, not indenting at all, $LANG
doesn't need it anyway." Sorry, but if code isn't even structured
halfway reasonably it is unmaintainable, regardless of what CC or LOC say.
Besides, I think you have the cause and effect backwards. I would rather
say:
The source of bugs is not lines of code in a method, but excessive
complexity. It merely happens that counting complexity is hard, counting
lines of code is easy, and the two are strongly correlated, so why count
complexity when you can just count lines of code?
I agree here, and I'd go even further: Measuring complexity is not just
hard, it requires a metric that you need to agree on first. With LOC you
only need to agree on not semicolon-chaining lines and how to treat
comments and empty lines. With CC, you effectively agree that an if
statement has complexity of one (or 2?) while a switch statement has a
complexity according to its number of cases, while it is way easier to
read and comprehend than a similar number produced by if statement.
Also, CC doesn't even consider new-fashioned stuff like exceptions that
introduce yet another control flow path.
LoC is much simpler, easier to understand, and
easier to correct than CC.
Well, sure, but do you really think Perl one-liners are the paragon of
bug-free code we ought to be aiming for? *wink*
Hehehe... ;)
Uli
--
http://mail.python.org/mailman/listinfo/python-list