Software Quality Definition
Software quality has received significant attention since the advent of software engineering because, without quality, any software will fall short to achieve the intended objectives of customers and users. In simple terms, software quality can be defined as compliance with the needs of customers who request software development from software organizations or practitioners (e.g., architects, developers, designers, and testers) and users who will use the software in real life. On one hand, customers seek to generate profits from software development, so they want the developed software to be of high quality in order to be used continuously and effectively by potential users. On the other hand, users want to use software to perform their tasks easily, without making errors, and in a timely manner.
However, compliance with the needs of customers and users requires rigorous and continuous efforts from all stakeholders who work on software projects. For instance, a requirements engineer who elicits requirements from customers and users needs to take into consideration the limited technical knowledge of customers and users to specify requirements precisely. This limited technical knowledge of customers and users is considered a barrier to achieving the required level of software quality. Therefore, a requirements engineer needs to study the business domain in line with conducting interviews with customers and users to remind them of any missing information. Of course, no requirements document will be complete in the very beginning, but studying the business domain will help to decrease continuous and unnecessary changes in software requirements.
Therefore, software quality can be defined more precisely as compliance with the explicit and implicit needs of customers and users and coping with the common quality practices in the software industry that help to make customers and users satisfied in a sustainable manner. Coping up with the common practices of the software industry is important to overcome any missed quality attribute from the side of customers and users during requirements elicitation. For instance, customers and users rarely mention during the discussion of requirements the required response time of functionalities in software or usability aspects that need to be considered. In real life, customers and users focus primarily on required functions without sufficient and precise details. Moreover, sustainability is of high value because customers and users want the developed software to address their future needs to use software for a long time.
Software Quality Attributes
There are many software quality attributes or factors that collectively help practitioners to develop and deliver high-quality software. These quality attributes include functionality, usability, security, reliability, maintainability, compatibility, portability, and performance (see Figure 1).
Figure 1: The fundamental software quality attributes
Firstly, functionality is an important quality attribute that centers upon addressing all required functions correctly based on the needs of customers and users. Customers and users cannot remember all functions with all sufficient inputs and outputs of every function. From this perspective, a requirements engineer or a business analyst needs to study the business domain (e.g., logistics, human resources, e-commerce) and portray the fundamental functions with their basic inputs and outputs. Also, there is a need to explore similar software in the market to accelerate the determination of required functions. Definitely, studying the business domain and exploring similar software in the market will be in conjunction with discussing requirements with customers and users in multiple interviews and workshops.
Secondly, usability is a quality attribute that is geared towards making software easy to use, easy to learn, and without conducting errors. For instance, usability practices include showing system status, proactive prevention of errors, matching between the system and the real world, providing help and documentation, simplifying the design to enable users to recognize what they can do without mental effort, and helping users diagnose errors and recover from errors easily.
Thirdly, security as a quality attribute has gained continuous attention in the software industry due to the increasing risks of hacking software systems for illegal purposes. Ideally, security needs to be addressed to ensure the privacy of users and the protection of data by enabling authorized users to access information based on their privileges and rely upon encryption to prevent any access to sensitive data. Additionally, it is important to track any transaction or event that happens in the software to ensure the accountability of all stakeholders in a software system.
Fourthly, reliability, as a quality attribute, aims to make software operational for long time without experiencing failure. Accordingly, reliability helps ensure that software is available for users when they need it. There are many practices that support the reliability of software, such as preventing exceptions and errors that may encounter users and providing mechanisms for handling these exceptions without software failure. Furthermore, it is important to create a backup for databases and follow a suitable recovery strategy to ensure that the software will be operational.
Fifthly, maintainability is an important quality factor that refers to the easiness of modifying and updating software over time. In essence, maintainability qualifies the software to adopt any potential needs of users and customers and makes the software sustainable for a long time. Sixthly, software compatibility ensures that different software systems can work together (e.g., exchanging data) without experiencing conflict, problems, or issues. Seventhly, software portability ensures that the software can be easily moved from one environment to another environment or from one platform to another platform without issues or problems.
Lastly, performance as a quality attribute helps ensure that software responds quickly to user requests without experiencing a long time or delay in the pursuit of getting or inserting information into the database. Moreover, performance ensures that a sufficient number of transactions is processed in a unit of time (e.g., second, minute) for meeting the needs of users. In some software systems, performance can be a critical factor that saves a human life, such in the case of health care systems or emergency systems that help to rescue people from any danger or risk.
Significance of Software Quality Attributes
Addressing software quality attributes at the very beginning of software projects helps to reduce time, effort, and cost in software development because the number of required changes will be limited compared to changes that result from ignoring software quality from the very beginning. Moreover, following the practices of software quality guarantees the satisfaction of customers and users, which helps software organizations and practitioners gain a high reputation in the market and gain much profit.
From the preceding exposition, software quality plays an important role in achieving the success of software in the market. In essence, software quality needs much attention from practitioners to avoid any deviation from the required level of software quality based on the exact needs of customers and users and the commonly accepted practices of software quality.