Software quality management refers to the oversight, control, and coordination of policies, procedures, activities, and people to achieve quality objectives. Key elements include:
Quality management spans the entire software lifecycle and involves various roles like project managers, quality engineers, developers, testers, and customers. When done effectively, it provides confidence that software meets critical quality characteristics.
Conversely, organizations can also have negative cultural influences:
Organizations that lack a top down commitment to quality often struggle to deliver reliable products, especially over longer periods of time and multiple release cycles.
Software process improvement (SPI) refers to enhancing the processes involved in software development like requirements, design, coding, testing, and project management. The goal is to make these processes more effective, more efficient, and more mature. SPI builds upon the principle that QA processes yield high quality software work products.
Some common SPI approaches include:
Effective SPI requires a long-term commitment, not just temporary initiatives. Software organizations must build quality processes that stand the test of time.
Software quality measurement provides data to help assess current quality levels and drive improvement initiatives. Common measures include:
Measurements are used to monitor trends, compare benchmarks, predict failures, optimize testing, and prioritize improvements. Statistical analysis like Pareto charts helps interpret the data.
Software quality control techniques systematically find issues in work products. Common techniques include:
The data from these techniques helps characterize types of defects and their sources. This enables process changes to prevent recurrence in the future. Quality control provides essential feedback for driving continual improvement.
Software quality assurance (SQA) refers to the set of activities that assess and improve processes and work products to provide confidence that software meets quality requirements and business objectives. Key aspects include:
SQA goes beyond simple testing to provide broad oversight across the entire software lifecycle. It puts practices and controls in place to build quality software.
Software configuration management (SCM) is the discipline of applying administrative and technical direction to:
SCM provides the process backbone for coordinating work between teams and delivering high quality software products.
To perform comprehensive product assurance, software quality characteristics must be specified in requirements. Key characteristics defined in ISO 25010 include:
Product assurance verifies that the software exhibits these qualities through reviews, testing, static analysis, and other SQA activities conducted through the lifecycle. Traceability between requirements and work products ensures alignment. Independent product assurance provides added rigor for high-risk software.
Software verification and validation (V&V) refers to confirmation that software work products meet specifications and satisfy stakeholder needs across the entire lifecycle. V&V encompasses:
V&V provides concrete evidence that requirements are fulfilled. Testing is an essential V&V activity but insufficient alone. V&V is broad, in-depth quality evaluation applied continuously throughout development and maintenance. Independent V&V brings further objectivity for critical software.
The two main classes of software quality tools are:
Static analysis tools and dynamic analysis tools. Static tools analyze software code, documentation, designs without executing the actual code. They operate on the structure and text of software artifacts. Examples include linting, code quality analysis, and architecture evaluation. In contrast, dynamic analysis tools involve some form of software execution or active modeling. They observe running software to collect quality data. Examples include performance testing, security scanning, and fault injection.
The key distinction is that static tools do not execute code while dynamic tools do. But there is overlap – some tools bridge both categories.
Software quality tools serve a variety of valuable purposes including:
Overall, quality tools complement human activities with automation, insight, and efficiency to help teams deliver better software.
Failures in software that controls safety-critical systems like medical devices or autonomous vehicles can lead to hazardous or even life-threatening situations. To thoroughly assess potential software hazards before deployment, techniques like Failure Mode and Effects Analysis (FMEA) and Fault Tree Analysis (FTA) are essential. FMEA systematically analyzes how different ways a system can fail could occur and evaluates the effects on the overall system. Meanwhile, Fault Tree Analysis provides a visual model of the many cascading events and component failures that could ultimately lead to a hazard. While these techniques can be performed manually, specialized safety analysis software tools greatly facilitate consistent, high-quality analysis. The tools provide step-by-step guidance to walk engineers through conducting the analysis correctly.
Comprehensive documentation and reporting features enable teams to produce audit-ready artifacts with details of all failure modes or fault conditions explored. The tools also include data management capabilities for tracking the factors involved in various failure scenarios, enabling traceability back to requirements and system design decisions. Some tools even allow collaborative editing of failure models and trees so that knowledge and expertise from multiple team members can be integrated into a living document. The visual mapping features of the tools also lend clarity to the chains of events leading to hazards. By using these sophisticated tools, organizations can promote rigorous, standardized analysis of how system failures arise and their consequences on safety. Such proactive analysis is invaluable for designing effective mitigations and validating that software controlling critical systems works safely across its expected operating conditions.
Software quality is a multifaceted topic encompassing software products, processes, and people. At its essence, it boils down to building software that meets stakeholder needs and conforms to its requirements. To achieve quality software, organizations must focus both on the end product as well as the means used to get there. Software engineers employ processes, methods, tools and a culture of excellence to build high-quality products. They verify quality via well-rounded evaluations spanning the entire lifecycle. And they continuously improve processes and skills to raise the bar on quality.
The specifics of software quality are complex due to the intricate nature of software itself. Quality practices must be tailored to the domain, technology stack, and software risks involved. But universal foundations like solid requirements, peer reviews, controlled changes, and stakeholder involvement provide a baseline all software teams can build upon. With vigilance and the right mindset, software organizations can make quality a competitive advantage – leading to reduced costs, satisfied users, and minimized risks. The result is software that provides outstanding value and meets the highest standards of excellence.
Read more about software quality in the Software Engineer Book of Knowledge (SWEBOK)
DOWNLOAD SWEBOK