Describe the benefits that software quality engineering can have at the organizational level. (Understand)
BODY OF KNOWLEDGE I.A
Quality Defined
S ince this is a book about software quality engineering, it seems appropriate to start with a definition of quality. However, the industry has not, and may never, come to a single definition of the term quality. For example, the ISO/IEC/IEEE Systems and Software Engineering—Vocabulary (ISO/IEC/IEEE 2010) has the following set of definitions for quality:
  1. The degree to which a system, component, or process meets specified requirements
  2. Ability of a product, service, system, component, or process to meet customer or user needs, expectations, or requirements
  3. The totality of characteristics of an entity that bears on its ability to satisfy stated and implied needs
  4. Conformity to user expectations, conformity to user requirements, customer satisfaction, reliability, and level of defects present
  5. The degree to which a set of inherent characteristics fulfills requirements
Based on his studies of how quality is perceived in various domains (for example, philosophy, economics, marketing, operations management), Garvin (1984) concluded, “Quality is a complex and multifaceted concept.” He describes quality from five different perspectives:
Benefits of Software Quality Engineering
Software quality engineering is the study and systematic application of scientific, technological, economic, social, and practical knowledge, and empirically proven methods, to the analysis and continuous improvement of all stages of the software life cycle to maximize the quality of software processes and practices, and the products they produce.
At its most basic, increasing the quality of the software typically means reducing the number of defects in that software and in the processes that are used to develop / maintain that software. Defects in the software can result from mistakes that occurred during the software development (either in house development or development by a third party), release, and maintenance processes, or from defects in the processes themselves. These mistakes introduce defects into the software work products. Mistakes can also lead to missing, ambiguous, or incorrect requirement defects that result in the development of software that does not match the needs of its stakeholders. The most cost-effective way of handling a defect is to prevent it. In this case, software quality is accomplished through continuous process improvement, increasing staff knowledge and skill, and through other defect prevention techniques that keep defects out of the software. Every defect that is prevented eliminates rework to correct that defect and also eliminates the effort associated with that rework.
If a defect does get interjected into the software, the more quickly the defect is identified and corrected, the less rework effort is typically required to correct it. Eliminating the waste of excessive rework allows organizations to use the saved effort to produce additional value-added software. In this case, software quality is accomplished through techniques that improve defect detection and find the defects earlier.
For example, as illustrated in Figure 1.1 , the cost to fix a defect will typically increase exponentially as it is found later and later in the life cycle. In fact, studies show that it can cost 100-plus times more to fix a requirements defect if it is not found until after the software is released into operations than it would have cost to fix that same defect if it was found in the requirements phase (Kan 2003; Pressman 2015). The main point here is that software development involves a series of dependencies, where each subsequent activity potentially builds on and expands the products of previous activities. For example, when using traditional software development methods, a single requirement could result in four design elements that expand into seven source code modules. All of these have supporting documentation and / or tests. Therefore, if a defect in that requirement is not found until the design phase, costs increase because the requirement would have to be fixed, and the four design elements would have to be investigated and potentially fixed. If the defect is not found until the coding phase, the requirement would have to be fixed, and the four design elements and seven source code modules would have to be investigated and potentially fixed. By the coding phase, test cases (system, integration, and unit) and user documentation may also have been written based on the defective requirement, which would need to be investigated and potentially corrected. If the defect is not found until the testing phases, all of the work products based on that requirement would have to be investigated and potentially corrected, retested, and regression tested.
Figure 1.1 Cost of fixing defects.
Agile methods attack these costs by significantly shortening the development cycle using shortened iterative/incremental development cycles, and through other techniques that shorten defect interjection to correction cycle times. At the end of each iteration, the goal is to have working software that can be demonstrated to the stakeholders, who provide feedback on the correctness and quality of the software.
Both studies and empirical evidence demonstrate that improving software quality benefits the development organization by:
Both defect prevention and defect detection help keep software defects from being delivered into operations. If fewer software defects are delivered, there is a higher probability of failure-free operations. Unlike hardware, software does not wear out with time. If a defect is not encountered during operations, the software performs reliably. Reliable software can increase the effectiveness and efficiency of work being done using that software. Reliable software reduces operational, failure, and maintenance costs to the software’s stakeholders and thus reduces the overall cost of ownership of the software product to its customers / users. Reliable software also reduces software corrective maintenance costs to the organization that developed the software.
Taking a broader view, high-quality software is software that has been specified correctly and that meets its specification. If the software meets the stakeholders’ needs and expectations and is value-added, it is more likely to be used instead of ending up as “shelfware.” If the customers and users receive software that has fewer defects, is more reliable, and performs to their needs and expectations, then those customers and users will be more satisfied with the software. This is illustrated in Figure 1.2 , which depicts Kano’s model of the relationship between stakeholder satisfaction and quality. Kano talks about three types of quality, including:
Figure 1.2 Kano Model (Pyzdek 2000).
Increased stakeholder satisfaction can lead to the following benefits for the software development organization:
An increase in the quality of the software can also increase the satisfaction of the software practitioners. For most software engineers, their favorite activity is not burning the midnight oil trying to debug critical problems reported from operations. Producing high-quality products makes the software practitioner’s job easier and less frustrating. Practitioners can also take pride in what they are doing, thus enhancing their feelings of accomplishment and self-worth. Increases in employee satisfaction benefit the organization by increasing productivity/velocity and decreasing employee turnover.