Jed Rothwell wrote:
> Stephen A. Lawrence wrote:
> 
>> > The number of bugs in a software package decreases at first
>> > and then increases, inexorably, to the point where the software becomes
>> > unusable.
>>
>> Can you name an example where this has happened?
> 
> It has happened to every software package I ever wrote which remained in
> use.

At the risk of sounding offensive, I would like to observe that the
fundamental design of any package limits the degree to which it can be
modified before the modifications become unmaintainable.

This could be called the "design life", and it doesn't have to do with
the number of fixes applied; rather, it has to do with how much you want
to *change* it from its original purpose, and it has to do with the
flexibility of the original design.

Adequate software design makes a huge difference in the design life of a
product.

> 
> Naturally if you perform no maintenance and fix no bugs, and you leave
> the program exactly as it is for 5 or 10 years, it will work as well as
> it ever did. The driver and software for my Hewlett-Packard scanner
> hasn't been changed or updated in years, but it still functions....

Emacs, Linux, Mac OS, Solaris, OpenOffice, MS Word -- would you claim
that any of these have simply been left to sit on a shelf, and that's
why they haven't become so buggy they can't be used?


> Brooks, by the way, refers to the book Frederick P. Brooks, "The
> Mythical Man Month," (Addison-Wesley, 1975).

Yeah, we've learned some things about software design since 1975.

In 1975, how old was an "old" software package?  A few years?  Ten
years, at the outside?  Things have changed.

Nowadays there are products on the shelf based on code which dates back
20 or 30 years.  I have named a bunch of them, all of which have
undergone extensive maintenance over the years, and none of which have
shown a user-visible "bug explosion" effect as a result of "too much
maintenance".

1975 ... that was before strong typing, OO design, 'programming in the
large', or a host of other methodologies which enable a good designer to
produce a more flexible, maintainable product.

1975 was nearly two decades before ANSI C.  Between "="/"==" confusion,
lack of unclosed-comment detection, lack of strong typing, and lack of
subroutine argument declarations, anything written in pre-ANSI C was
necessarily so fragile that it would not be surprising if every new fix
introduced new (really horrible) bugs.  All external names were limited
to 6 characters in length in those days, too, IIRC, which meant "self
documenting code" was an unrealizable dream, and would remain so for
many, many years.  "Lint" was, at best, an awkward crutch which allowed
one to limp forward a little faster with the tools available at the time.

But as I said, things have changed.

Reply via email to