Software Quality Factors: Alexandre Bergel Abergel@dcc - Uchile.cl
Software Quality Factors: Alexandre Bergel Abergel@dcc - Uchile.cl
Factors
Alexandre Bergel
[email protected]
Source
Object-Oriented Software Construction, second
edition, Bertrand Meyer
In the end, only external factors matter. If I use a web browser, little do I care whether the source
program is readable or modular. But the key to achieving these external factors is in the internal ones:
for the users to enjoy the visible qualities, the designers and implementers must have applied internatl
techniques that will ensure the hidden qualities
We should not however lose track of the global picture; the internal techniques are not an end in
themselves, but a means to reach external software qualities
application system
base library
kernel library
compiler
operating system
hardware
Conditional correctness
You cannot usefully check that a program in a high-level language X is correct unelss you are able to
assume that a program in a high-level language X is correct unless you are able to assume that the
compiler on hand implements X correctly. This does not necessarily mean that you trust the compiler
blindly, simply that you separate the two components of the problem: compiler correctness, and
correctness of your program relative to the languages semantics.
Note that some attempts to prove the correctness of compilers are being conducted at INRIA with the
OCaml compiler.
Robustness complements
correctness
specification
correctness
Robustness
Scalability problem
We need extendibility because at the basis of all software lies some human phenomenon and hence
fickleness. The obvious case of business software where passage of a law of a companys acquisition
may suddenly invalidate the assumptions on which a system rested.
Language constructs
classes, modules, functions, packages
Design patterns
Common patterns
It should be possible to exploit this commonality and avoid reinventing solutions to problems that have
been encountered before.
By capturing such a pattern, a reusable software element will be applicable to many different
developments.
Language support
classes, modules, functions, packages
Documentation
unit test, textual description, formal description
Structural simplicity
Importance of OO techniques