Topics covered in this snack-sized chapter:
There are many ways to define software quality.
- Software quality may be defined from different views. It may be defined in terms of the attributes or characteristics it should possess.
- Software quality can also be defined as the degree to which a system, component, or process meets customer or user needs or expectations.
It is a planned and systematic set of activities to ensure the quality of software. It consists of:
- Software quality assurance
- Software quality engineering
The problems inherent in attempts to define the quality of a product, almost any product, were stated by the master Walter A. Shewhart.
- “The difficulty in defining quality is to translate future needs of the user into measurable characteristics, so that a product can be designed and turned out to give satisfaction at a price that the user will pay. This is not easy, and as soon as one feels fairly successful in the endeavor, he finds that the needs of the consumer have changed, competitors have moved in, etc."
"Quality is a customer determination, not an engineer's determination, not a marketing determination, nor a general management determination. It is based on upon the customer's actual experience with the product or service, measured against his or her requirements stated or unstated, conscious or merely sensed, technically operational or entirely subjective and always representing a moving target in a competitive market".
The word quality has multiple meanings. Two of these meanings dominate the use of the word “quality”:
- Quality consists of those product features which meet the need of customers and thereby provide product satisfaction.
- Quality consists of freedom from deficiencies. A short definition of the word quality is "fitness for use".
It is function of software quality that assures that reliability, maintainability, and other quality factors are met into the software by:
- Investigations on the requirements, design, code and verification processes
Software Quality Engineering is organized into three major topics:
Different views of quality
Based on different roles, responsibilities and quality expectations there are different views of the quality:
Quality is hard to define or describe in abstract terms, but can be recognized if it is present.
Quality is fitness for purpose or meeting user’s needs.
Quality means conformance to process standards.
Focuses on inherent characteristics in the product itself.
Quality is the customers’ willingness to pay for software.
The quality of software is assessed by a number of variables. These variables can be divided into external and internal quality criteria.
External quality is what a user experiences when running the software in its operational mode.
Internal quality refers to aspects that are code-dependent, and that are not visible to the end-user.
Some software quality criteria:
- Features: Output produced by the software –e.g. a numerical result, a string, a screen shot, a web page, an audio, etc., regardless of the performances (speed, memory).
- Speed: How quickly does the application provide the service?
- Space: How much RAM and disk space is taken by the application?
- Network usage: Bandwidth and Latency.
- Stability: How often does one need to patch the software to fix problems?
- Robustness: How often does the application stale, freeze, or crash?
- Ease-of-use: It includes user documentation, clarity of the error message, management of exceptions, and recovery after failure.
- Determinism: Does the program produce the very same result given the same input?
- Back-compatibility: Can a new version of the application be used with an older version’s data?
- Security: Can the data processed by the application be compromised?
- Power consumption: How does the software manages the device’s power producers and consumers (battery, cores, wireless, and screen, audio).
- Test coverage: What is the proportion of code that is executed by some unit or regression test?
- Testability: The ability to trigger any specific line of code or branching condition.
- Portability: Can the application run on 32 and 64 bits machines? Should it run on a mobile phone? Does it run on multiple OS (e.g., Windows, Linux, Mac OS-X, Solaris, iOS, Android, RIM)?
- Thread-safeness: Is a specific component thread-safe? Can two threads collide on non-atomic operations? Can the application get into a deadlock?
- Conciseness: Is there any dead code, or duplicated code?
- Maintainability: How easy it is to debug the code.
- Documentation: The names of the types, classes, functions and arguments, together with assertions.
- Legibility: How easy it is to read the code.
- Scalability: How easy it is to extend a feature or to add a new one.
Quality benefits of software product lines can be measured in two ways.
- The first is how well each product matches the needs of each customer. The mass customization capabilities of software product lines directly address this measure of quality.
- The second is the rate of defects found in each of the products in the product line, which can also be significantly improved by software product line techniques.
By optimizing the reuse of software assets across the product line and throughout the life of a product line, very high quality assets emerge.
Finding and fixing a single defect in a common software asset will impact all of the products using that asset, even if the defect was only observed in one of the products.