How to Improve Software Quality
In an increasingly globalized world, one of the most effective ways for a software development organization to stay competitive and enhance its service delivery is by focusing on software quality—both in terms of products and processes.
As software evolves, more requirements and features are demanded. The key challenge is maintaining high software quality, as new features are inevitable in systems that are already in use. Additionally, it’s very common for requirements to change over time (Hamid & Hasan, 2010).
Frequent changes, often under tight deadlines, can cause side effects in the code, leading to the deterioration of the system’s internal structure. This negatively impacts the software’s readability, understandability, and testability (Besker et al., 2020).
Although it is a critical factor in determining the success of a project, software quality is a complex concept to define, describe, understand, and measure (Kitchenham & Walker, 1989). It is not a singular idea; rather, it involves multiple concepts with varying levels of abstraction, making the concept broader or more specific depending on the context. Since the term “quality” is commonly used in everyday language, its meaning can be interpreted differently compared to technical or professional terms (Kan, 2003).
What is Software Quality?
A more straightforward definition states that software quality is the degree to which a system, component, or process meets specified requirements and satisfies the user’s needs or expectations (IEEE et al., 1990).
Given this, different ways to categorize software quality have emerged to help organizations identify areas for improvement and develop more effective strategies for enhancing the quality of their software products.
Software Quality Categories
Software quality can be categorized and achieved through three key aspects: design quality, process quality, and product quality (Santos, 2015).
Design quality is ensured when a project is completed by meeting the requirements, specifications, and suitability for use as defined by the stakeholders involved (PMI, 2013). This type of quality assesses how well the project was planned and executed.
Process quality, on the other hand, refers to ensuring the quality of each phase in the Software Engineering process (Bartié, 2002). Besker et al. (2020) highlight this as one of the most overlooked aspects in companies working with software production or supply. In many cases, companies lack a formal and consistently applied process, hindering the ability to ensure quality at this level.
Product quality is characterized by two distinct but complementary attributes: internal quality and external quality, both of which contribute to overall software quality. External quality attributes ensure that the product meets the user’s needs, while internal quality focuses on the quality of the code, including its organization and complexity (ISO/IEC 25010, 2011). The ISO/IEC 25000 standard (2014), which aims to assess software system quality, will be discussed in the next section.
Internal and External Quality Measures
To evaluate internal and external quality, it’s necessary to define which artifacts will be considered during the assessment. External quality attributes represent factors that cannot be directly measured through knowledge of the software artifacts (Fenton & Bieman, 2014). On the other hand, internal attributes can be measured through the software artifacts, making them easier to assess. Examples of internal quality include complexity, inheritance, coupling, cohesion, size, and quantitative characteristics after system development (Lee & Chang, 2000).
Internal quality is closely related to the software structure, while external quality focuses more on how well the software behaves when used. Briand, Morasca, and Basili (1996) argue that, even though software structure isn’t visible to the end user, it significantly affects their perception, as internal attributes heavily influence external quality (Briand, Morasca, & Basili, 1996).
These quality aspects can be evaluated using metrics defined and applied based on the company’s scope and priorities. There are various software measurement techniques aimed at helping with tracking, monitoring, and decision-making to improve software quality. This can be observed through the internal and external quality metrics of the software.
External Quality Measures
According to ISO/IEC 25000 (2014), external quality refers to how well a system or software product behaves in meeting the explicit and implicit needs of the system, under specified conditions. External behavior attributes can be verified or validated during software execution, such as during testing. An example of an external quality metric is the number of defects found during testing compared to the total number of defects present in the system (ISO/IEC 25000, 2014).
Internal Quality Measures
Conversely, internal quality is measured by assessing how well a set of static software attributes meet the declared and implicit needs under specified conditions (ISO/IEC 25000, 2014). These static attributes include the software’s architecture, structure, and components, and they can be verified through reviews, inspections, simulations, or automated tools. Examples include complexity measurements, lines of code, and the severity and frequency of defects found during a code review (ISO/IEC 25000, 2014).