← New search

Other meanings of Software quality

Software Engineering

Software quality

Software quality is the degree to which a software product meets specified requirements and user expectations. It encompasses both functional correctness and non-functional attributes such as reliability, performance, security, and maintainability. Quality is assessed through processes like testing, code review, and adherence to standards, and it is a key factor in user satisfaction and long-term cost efficiency.

ISO/IEC 25010
Primary standard for software quality
Standard
CMMI
Capability Maturity Model Integration
Model
Defect density
Common metric (defects per KLOC)
Metric
Mean time to failure
Reliability metric
Metric
1

Definition and models

Software quality is formally defined in standards such as ISO/IEC 25010, which replaced the earlier ISO/IEC 9126. This standard identifies eight quality characteristics: functional suitability, performance efficiency, compatibility, usability, reliability, security, maintainability, and portability. Each characteristic is further subdivided into sub-characteristics, providing a comprehensive framework for evaluation. For example, reliability includes maturity, fault tolerance, and recoverability. These models help organizations specify quality requirements and measure whether a product meets them.

Another influential model is McCall's Quality Model (1977), which groups quality factors into product operation, revision, and transition. It introduced concepts like correctness, efficiency, integrity, and flexibility. These models are not mutually exclusive; they are often adapted to specific domains, such as safety-critical systems where reliability and security are paramount.

2

Quality attributes and metrics

Quality attributes are measurable properties of software. Common metrics include defect density (defects per thousand lines of code), mean time to failure (MTTF), and code coverage. For maintainability, metrics like cyclomatic complexity and coupling are used. Reliability is often quantified using reliability growth models, such as the Goel-Okumoto model. Security is measured through vulnerability counts and penetration test results.

Performance efficiency is assessed via response time, throughput, and resource utilization. Usability is evaluated through user testing and satisfaction surveys. These metrics are not absolute; they must be interpreted in context. For instance, a high defect density might be acceptable in a prototype but not in a financial system. Standards like ISO/IEC 25023 provide guidance on measuring these attributes.

3

Quality assurance and control

Quality assurance (QA) is a proactive process that ensures quality is built into the software development lifecycle. It involves defining standards, conducting audits, and implementing process improvements. Quality control (QC) is reactive, focusing on detecting defects through testing and inspection. Both are essential; QA prevents defects, while QC identifies them.

Key practices include code reviews, static analysis, and automated testing. Continuous integration and continuous delivery (CI/CD) pipelines incorporate these practices to catch issues early. Standards like ISO 9001 and CMMI provide frameworks for process maturity. For example, CMMI Level 5 emphasizes quantitative process optimization. These practices are critical in regulated industries, such as healthcare and aviation, where software failures can have severe consequences.

4

Quality in agile and DevOps

Agile methodologies shift quality from a separate phase to an integral part of each iteration. Test-driven development (TDD) and behavior-driven development (BDD) are common. In DevOps, quality is automated through continuous testing and monitoring. The concept of 'shift-left' testing emphasizes early involvement of QA in the development process.

However, agile and DevOps also introduce challenges. The fast pace can lead to technical debt, which undermines maintainability. To mitigate, teams use practices like refactoring and definition of done. Research indicates that while agile improves customer satisfaction, it does not automatically guarantee higher quality; it requires disciplined engineering practices. Tools like SonarQube and Jenkins are widely used to automate quality checks.

5

Lesser-known aspects

Beyond the mainstream, there are niche aspects. For instance, the concept of 'software quality' extends to non-functional requirements like accessibility, which is often overlooked. The ISO 25010 standard includes accessibility as a sub-characteristic of usability. Another edge case is the quality of open-source software, which relies on community review rather than formal QA. Studies show that while open-source projects can have high quality, they often lack documentation.

Historically, the term 'software quality' was popularized by the 1968 NATO Software Engineering Conference, which addressed the 'software crisis.' Lesser-known contributors include Barry Boehm, who introduced the COCOMO model, and Tom DeMarco, who emphasized the human aspects of quality. Also, the concept of 'quality debt' is analogous to technical debt, referring to the cost of deferred quality improvements.

Glossary

ISO/IEC 25010
International standard defining software quality characteristics and sub-characteristics.
Defect density
Number of defects per unit of code size, typically per thousand lines of code.
Cyclomatic complexity
A metric measuring the number of linearly independent paths through a program's source code.
Technical debt
The implied cost of additional rework caused by choosing an easy solution now instead of a better approach that would take longer.

This article focuses on the engineering definition of software quality as conformance to requirements and fitness for use.