The notion of "quality" is not as simple as it may seem. For any engineered product, many desired qualities are relevant to a particular project. The section explains software quality fundamentals, including the main SQM processes: quality assurance, verification, validation, review, and audit. Software quality refers to the delivered product of a software development project, but that quality depends on the quality of the "upstream" products from which it was derived, including requirements, design, construction, and the software quality activities that support it during the development, namely, validation, verification, testing, and measurement. Software quality terminology is numerous, informal, formal, and often ambiguous, with multiple categorizations (internal, external, operational, and feature quality). All of this makes software quality interesting to study.
From a domain perspective, software quality applies to both the problem application domain and the solution domains. It applies to all software development activities and all software products. It is interdisciplinary in that it is a topic in management, software engineering, mathematics, statistics, measurement, and more. It intersects the generic categories of human, software, and hardware and refers to the evolving relationships of these generic types. This last observation hints at the next stage in the evolution of computing technology.
Software quality is a major driving factor for computing technology evolution, which is increasing our capabilities to solve complex problems better, faster, on a larger scale, and with more automation. Generally, the problem domain gets smaller as the solution domain gets larger. The solution domain gets larger as hardware and software support becomes automated. More automation often begins with new abstractions we make in the problem domain, resulting in new relationships between hardware and software, eventually manifesting as automated support tools. We give names to these tools: "cloud computing", big databases, programming languages (front-end, network, back-end, and so on), and AI (natural language translation, image recognition, and machine learning). Indeed, software quality is very interesting.
Software Quality Measurement
The models of software product quality often include measures to determine the degree of each quality characteristic attained by the product.
If they are selected properly, measures can support software quality (among other aspects of the software life cycle processes) in multiple ways. They can help in the management decision-making process. They can find problematic areas and bottlenecks in the software process; and they can help the software engineers assess the quality of their work for SQA purposes and for longer-term process quality improvement.
With the increasing sophistication of software, questions of quality go beyond whether or not the software works to how well it achieves measurable quality goals.
There are a few more topics where measurement supports SQM directly. These include assistance in deciding when to stop testing. For this, reliability models and benchmarks, both using fault and failure data, are useful.
The cost of SQM processes is an issue which is almost always raised in deciding how a project should be organized. Often, generic models of cost are used, which are based on when a defect is found and how much effort it takes to fix the defect relative to finding the defect earlier in the development process. Project data may give a better picture of cost.
Finally, the SQM reports themselves provide valuable information not only on these processes, but also on how all the software life cycle processes can be improved.
While the measures for quality characteristics and product features may be useful in themselves (for example, the number of defective requirements or the proportion of defective requirements), mathematical and graphical techniques can be applied to aid in the interpretation of the measures. These fit into the following categories:
- Statistically based (for example, Pareto analysis, runcharts, scatter plots, normal distribution)
- Statistical tests (for example, the binomial test, chi-squared test)
- Trend analysis
- Prediction (for example, reliability models)
The statistically based techniques and tests often provide a snapshot of the more troublesome areas of the software product under examination. The resulting charts and graphs are visualization aids which the decision-makers can use to focus resources where they appear most needed. Results from trend analysis may indicate that a schedule has not been respected, such as in testing, or that certain classes of faults will become more intense unless some corrective action is taken in development. The predictive techniques assist in planning test time and in predicting failure.