What is Software Quality

Software quality is the degree of conformance of a software product to requirements and expectations.

Business requirements are related to end-user functionality, while expectations refer to behavior that affects the general application, like usability, security, and performance.

One often thinks that quality is indicative of the number of bugs in the software. However, it is much more than that. A software product may have zero bugs but may be slow, have lousy usability, or have security holes.

The ISO/IEC 25010 model defines the following software quality dimensions:

Functional suitability
The degreee of completeness, correctness, and appropriateness of the software's functionality.
Reliability
The degree of consistency, availability, fault-tolerance, and recoverability from errors of the software system.
Compatibility
The degree of the software's ability to coexist and be interoperabe with the existing software and hardware.
Performance efficiency
The level of the software's response times, throughput, and utilization of hardware and software resources.
Security
The degree of confidentiality, integrity, non-repudiation, accountability, and authenticity of the software.
Maintainability
The degree of modularity, reusability, analyzability, modifiability, and testability of the application.
Usability
The level of the software's learnability, operability, accessibility, error-protection, aesthetics.
Portability
The software's adaptability, installability, and replaceability of the system.

Achieving Software Quality

A software application that satisfies all aspects of software quality is practically impossible to build if not costly. Applications don't exist in a vacuum, and time-to-market is critical. Instead of maximizing, one has to optimize.

  1. Identify characteristics that decide the quality of a product
  2. Decide how to quantify each of the quality characteristics
  3. Set criteria for each aspect of quality
  4. Implement quality control processes around these criteria
  5. Find factors that obstruct the quality
  6. Make necessary improvements

Software Quality Metrics

Metrics are numbers that help you measure the characteristics of the product or process and the project. Product metrics measure the quality attributes of the product like complexity, defect density, and customer satisfaction. Process metrics appraise the effectiveness of development and testing processes that affect product quality. Project metrics are related to the project, like cost, adherence to timelines, and resource utilization.

Quality metrics are a measure of the health of the product, processes, and project. Right metrics can assist in improving overall quality, customer satisfaction and also optimize the cost of quality. It can help detect unsuitable deviations and verify if process changes have corrected them.

Some of the important metrics are:

Defect Density

Defect density is the number of defects detected per lines of code or per module. The higher the density of bugs, the lower the software's quality. This number is the first rough estimation of the software's quality.

Defect density = Number of Defects / Number of Lines of Code 
Defect Removal Efficiency (DRE)

DRE is an essential metric that measures the efficacy of a testing team. DRE is the number of defects prevented from going into a production environment by the testing team. The ideal value is 100% which means that there are no bugs in the production system.

DRE (%) = A ÷ (A+B)

A - the number of defects identified before production
B - the number of bugs identified during production
Mean Time Between Failures (MTBF)
It is the average time between two faults in a system. The definition of a fault or the threshold MTBF can vary with every software. For example, in the case of a mobile application, a failure can mean an application crash. In contrast, in the case of a web application, it could be the site being unavailable. The higher the MTBF, the better is the software's quality.
Mean Time To Recover (MTTR)
MTTR is the time it takes for developers to discover a critical problem, repair it, and push its fix to production. The lower, the better.
Lead Time
Lead time is an essential Agile metric that measures the duration from the instant the work is added to the queue to the time it is delivered. If changes in processes cause the lead time to increase, they are probably not optimal. Lead times also help in giving better estimates to customers.
Team Velocity
Velocity in Agile is a simple computation that measures the units of work completed in a given timeframe. In Agile Scrum, work is typically user stories or story points, while the time is generally the sprint duration, which is a couple of weeks. There is no ideal velocity number. Changes in velocity are generally a signal for your team to dig deeper into the development process areas to help you achieve efficiency while maintaining quality.

Conclusion

Achieving software quality is a tedious process. But it's indeed achievable through a systematic approach.