Extraigo de los apuntos de la asignatura de “Calidad del Software” que estoy cursando actualmente (Itinerario de Adaptación a Grado de Informática para Ingenieros Técnicos), los siguientes conceptos asociados a Calidad Interna/Externa del Software.
Mucho ánimo a todos.
1.2.3 View 3: Internal vs. External Quality
External Quality is the fitness for purpose of the software, i.e. does the software what it is supposed to
do?. The typical way to measure external quality is through functional tests and bugs measurement.
Some of the properties that determine the external quality of software are:
- Conformance to the product specifications and user expectations.
- Reliability: Is the software working with the same level performance under different conditions
and during all the time.
- Accuracy: Does the software do exactly what is supposed to do.
- Ease of use and comfort: Is the software easy to use and responds in an amount time according
to user expectations?
- Robustness: Does the software adapt to unforeseen situations, e.g. invalid input parameters,
- Openness: Can the software be extended/adapted for future use cases.
Internal Quality 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.
Internal quality is related with the design of the software and it is purely in the interest of development.
If Internal quality starts falling, the system will be less amenable to change in the future. Due to that,
code reviews, refactoring and testing are essential as otherwise the internal quality will slip. An
interesting analogy with debts and bad code design was developed by Ward [REF3].
Some of the properties that enable the process of product with good internal quality are:
- Concision: The code does not suffer from duplication.
- Cohesion: Each [module|class|routine] serves a particular purpose (e.g. it does one thing) and
does it well
- Low coupling: Minimal inter-dependencies and interrelation between objects and modules.
- Simplicity: The software is always designed in the simplest possible manner so that errors are
less likely to be introduced.
- Generality: Specific solutions are only used if they are really needed.
- Clarity: the code enjoys a good autodocumentation level so that it is easy to be maintained.
The external quality is sometimes compared with “Doing the right things” as opposed to “Doing the
things right” which should define what internal quality is.
External quality is checked through validation (usually through functional tests) while Internal quality is
checked through verification.