What is quality?

Quality, just like any other measure, requires a frame of reference or standards for us to compare against customer needs. These standards can help us to maintain and promote the consistency of the products developed, minimize the amount of rework required, and produce a customer-oriented product.

Quality can be defined in different ways. According to the International Organization for Standardization (ISO) 13628-2:2006, quality can be defined as conformance to specified requirements.

There are seven main ISO principles (by ISO 9000) that revolve around making a good quality product:

  • Customer focus
  • Leadership
  • Engagement of people
  • Process approach
  • Improvement
  • Evidence-based decision-making
  • Relationship management

The quality model presented by ISO (ISO/IEC 25010:2011) is useful to assess the quality of products. Adoption of this model can guide organizations on how to improve the quality of software. This model describes the quality characteristics and sub-characteristics that software should possess to qualify as production-ready before it can be released to end users. Let's take a closer look at these characteristics and sub-characteristics.

The product quality model relates to the static properties of software and the dynamic properties of a computer system:

As you can see in the preceding diagram, there are eight product quality characteristics, which I will explain to you:

  • FUNCTIONAL SUITABILITY: Characterizes the functional potential and abilities of the software by sub-categorizing it into three different categories:
    • Completeness: The measurement of the set of functions implemented and covered for all the specified requirements to satisfy user goals
    • Correctness: The measurement of deviation from the specified requirements and the measurement of the precision of the generation of end results
    • Appropriateness: The measurement of the generation of suitable and relevant results that can facilitate achieving specified tasks and objectives
  • PERFORMANCE EFFICIENCY: Takes three main factors into consideration:
    • Time-behavior: Measures the response times, processing times, and tolerance of the throughput of an application against the specified load
    • Resource utilization: A measurement of the utilization of the amount and types of resources while performing specified tasks
    • Capacity: Checks maximum tolerance and limitations to meeting the required goal
  • COMPATIBILITY: This checks whether the system can work efficiently in different environments by examining the following two factors:
    • Co-existence: Verifies that software or a product can perform its tasks effectively by sharing common resources and environments with other software/hardware
    • Interoperability: Ensures the exchange of information between two separate products or components is smooth and has no impact on the intended results
  • USABILITY: Examines the ease of use of software by considering the following aspects:
    • Appropriateness recognizability: The verification of the product or service against the user's needs
    • Learnability: The extent to which a product or service facilitates users' learning of its usage effectively and efficiently
    • Operability: Deals with knowing how easy it is to operate, control, and use the system product or service effectively
    • User error protection: Measures the degree to which the system can prevent users from making errors
    • User interface aesthetics: Checks how the user interface of the system can yield user satisfaction and a pleasing experience
    • Accessibility: Makes sure that users can use the system hassle-free, so that users can use it effectively, without compromising its ability to perform a specified set of goals or the purpose that has been set for the system or products
  • RELIABILITY: The extent to which end users can rely on the system or products to perform specific tasks or activities. It consists of four sub-categories:
    • Maturity: The extent to which the system or its components meets customers' needs in terms of reliability when functioning normally
    • Availability: The measurement of the availability and accessibility of the software or product whenever users want to use it
    • Fault-tolerance: The measurement of the deviation of the expected results despite being under undesirable conditions
    • Recoverability: Checks how quickly the system can recover from interruptions or failures without losing information
  • SECURITY: Everyone wants their data to be secure when it comes to using software products or services. Security is needed to control the unauthorized use of data. In order to meet security needs, it has been sub-categorized into the following categories:
    • Confidentiality: Ensures the authorized use of data
    • Integrity: Capability to prevent unauthorized and unofficial access to data by invalid users, products, or other services that could potentially cause harm by modifying data
    • Non-repudiation: Refers to the degree to which the actions and/or events can be ascertained to have occurred so that it cannot be disputed or repudiated late
    • Accountability: Ensures that activities or actions performed by an actor in the system can be traced back uniquely to having been performed by the same actor
    • Authenticity: Ensures that the actor or person is uniquely identifiable in the system, which can be proven to match the identity as claimed
  • MAINTAINABILITY: Deals with the maintenance of the software product or service to fulfill customer needs and to continue to perform efficiently. It has been sub-categorized into the following:
    • Modularity: Measures the effect on the other parts or components of the system when one part undergoes a change. High cohesion and low coupling are what we strive to achieve. Thus, the code for a particular module should be closely related within the module but each module should function independently from other modules.   
    • Reusability: Refers to the degree to which specific parts or components of software can be reused.
    • Analyzability: Deals with checking the ease of analyzing the software or product in order to detect failures, deficiencies, and/or the impact of modifications.
    • Modifiability: A measurement of the extent to which the software product or service is modifiable without affecting its current efficiency and functionality.
    • Testability: Defines the baseline for the test that confirms whether the software product or service meets the specified requirements.
  • PORTABILITY: Defines the resilience of the system to perform efficiently with the changes in software, hardware, or the environment. 
    • Adaptability: A measurement of the extent to which the software system or product can be adopted without affecting its efficiency
    • Installability: A measurement of the capacity of a product or software to be installed or uninstalled in a stipulated environment
    • Replaceability: The ability of software to be replaced with other software to perform the same set of tasks in the same environment

The QUALITY IN USE model is applicable to the complete human-computer interaction and has the following five characteristics:

Let's look at these characteristics in detail:

  • EFFECTIVENESS: A measure of the accuracy and completeness of results generated by the component or functions of the software product or service.
  • EFFICIENCY: A measurement of the utilization of resources needed to produce complete and accurate results.
  • SATISFACTION: These are four ways to test user satisfaction with software:
    • Usefulness: Makes sure that the software satisfies customer needs and functions as expected
    • Trust: Ensures software fulfills customer expectations
    • Pleasure: A measurement of how much the software product or service helps customers meet their needs
    • Comfort: The degree to which the user is satisfied with the software product and feels comfortable using it
  • FREEDOM FROM RISK: There are three main ways to analyze the level to which a system can reduce potential risks, as follows:
    • Economic Risk Mitigation: Analyzes how much the system can mitigate potential risks that could have a severe impact on various levels, such as financial, commercial, reputation, and disrupt the efficiency of the software product or service
    • Health and Safety Risk Mitigation: Identifies the level to which software can mitigate potential risks to end users
    • Environmental Risk Mitigation: Identifies how much software can mitigate the potential risk to property or the environment
  • CONTEXT COVERAGE: The level to which the system meets the specified context can be measured by the following:
    • Context Completeness: Verifies that software meets specified objectives and can be used efficiently without any risk in all specified contexts of use
    • Flexibility: A measurement of the degree to which the software can be used beyond the specified requirements

These characteristics can help us to assess a software product's quality.