Having a well-considered specification driving development allows for
little argument about bug vs. feature; a system which incorrectly implements the
specification is broken and should be fixed.
I suspect this is so ingrained into most of us that we lose
sight of its power.
A friend of mine who worked for a small software firm east of
Bellevue wondered how Linux applications developers could get OS
changes synchronized with application releases. In that company,
major system-level APIs change frequently to accommodate application
whims and so essential OS functionality must often be released along
with each application.
I described the power held by the specifications and how the
implementation was subservient to them, and then went on to assert
that an application which got an unexpected result from a documented
interface was either broken or had discovered a bug. He found this
concept startling.
Discerning such bugs is a simple matter of verifying the
implementation of the interface against the specification. Of course,
having source for the implementation makes that a bit easier.
|