Internal quality is about the design of the software. This is purely the interest of development.
If Internal quality starts falling the system will be less amenable to change in the future. Hence the
need for refactoring, clear coding, relentless testing, and the like. You need to be very careful
about letting internal quality slip. Ward has a wonderful DebtAnalogy?
that discusses it.
External Quality is the fitness for purpose of the software. It's most obvious measure is the
Functional Tests, and some measure of the bugs that are still loose when the product is released.
There is more to it than that, however.
In the FourVariables
the quality variable is external
is everything the software does not do
. It's the implementation, which the customer never directly sees, and often does not want to spend time or money on. Ironically enough, it's often what determines whether projects succeed or not. Take the Web for example - see ImplementationDoesTooMatter
Let's divide software quality topics into two areas :
quality mean all the properties of the software as a product that users can experience and enjoy :
- conformity to their expectations (and evolution thereof)
- ease of use and comfort (including response delay)
- robustness (or adaptability to some unforeseen condition of use)
- openness (or adaptability to future extensions or evolutions)
- ... I'm surely forgetting many more.
quality mean all the properties of the software as seen by the developers
that are desirable in order to facilitate the process of creating a good product :
- concision : code do not suffer from duplication
- cohesion : each [module|class|routine] does one thing and does it well
- low coupling : minimal interdependencies and interrelation between objects
- generality : the problem domain bounds are known and stated
- clarity : the code enjoys a good autodocumentation level
From here, I can't find any other property that a GoodCode
should hold. Surely there are some.
The wiki pages on quality all focus from a developer's perspective on a single project. They need to also focus on architecture quality issues, which affect operations, deployment, adoption, interoperability, etc. Quality of code, Quality of architecture... See RoyFielding
's superb dissertation for a discussion of architectural quality, omitting code quality entirely.
deal with internal quality slip. Don't know whether the latter is the DebtAnalogy?
. -- MichaelFeathers
"Quality With a Name" by James Shore 2006
gives this definition of "good software design" (which is synonymous with "internal quality", right?):
A good software design minimizes the time required to create, modify, and maintain the software while achieving acceptable run-time performance.