Software Quality
What is Software Quality?
What is the meaning of the term ‘quality’? It is very important but difficult to define quality. The Institute of Electrical and Electronics Engineers (IEEE) defines quality as:
- The degree to which a system, component, or process meets specific requirements.
- The degree to which a system, component, or process meets customer or user needs or expectations.
The goal of software quality is to determine:
- How well is the design of the software?
- How well the software conforms to the developed design?
Software Quality Attributes
Software quality can be measured in terms of attributes. The attribute domains that are required to define for a given software are as follows:
- Functionality
- Usability
- Testability
- Reliability
- Maintainability
- Adaptability
These attribute domains can be further divided into attributes that are related to software quality:
1. Functionality
The degree to which the purpose of the software is satisfied.
- Completeness: The degree to which the software is complete.
- Correctness: The degree to which the software is correct.
- Efficiency: The degree to which the software requires resources to perform a software function.
- Traceability: The degree to which requirement is traceable to the software design and source code.
- Security: The degree to which the software is able to prevent unauthorized access to the program data.
2. Usability
The degree to which the software is easy to use.
- Learnability: The degree to which the software is easy to learn.
- Operability: The degree to which the software is easy to operate.
- User-friendliness: The degree to which the interfaces of the software are easy to use and understand.
- Installability: The degree to which the software is easy to install.
- Satisfaction: The degree to which the user feels satisfied with the software.
3. Testability
The ease with which the software can be tested to demonstrate the faults.
-
Verifiability: The degree to which the software deliverable meets the specified standards, procedures and process.
-
Validatable: The ease with which the software can be executed to demonstrate whether the established testing criterion is met.
4. Reliability
The degree to which the software performs failure-free functions.
- Robustness: The degree to which the software performs reasonably under unexpected circumstances.
- Recoverability: The speed with which the software recovers after the occurrence of a failure.
5.Maintainability
The ease with which the faults can be located and fixed, quality of the software can be improved or software can be modified in the maintenance phase.
- Agility: The degree to which the software is quick to change or modify.
- Modifiability: The degree to which the software is easy to implement, modify and test in the maintenance phase.
- Readability: The degree to which the software documents and programs are easy to understand so that the faults can be easily located and fixed in the maintenance phase.
- Flexibility: The ease with which changes can be made in the software in the maintenance phase.
6.Adaptability
The degree to which the software is adaptable to different technologies and platforms.
- Portability: The ease with which the software can be transferred from one platform to another platform.
- Interoperability: The degree to which the system is compatible with other systems.
Elements of a Quality System
The software quality process should start at the beginning of the software development life cycle and should carry out throughout the software development life cycle. In order to produce a quality product, the voice of the customer must be incorporated and then translated into software requirements. These requirements must be properly defined and documented. Hence, the customer’s satisfaction should be the prime concern of the developer. The quality system consists of 10 elements as given below:
- Standards, processes and metrics
- Reviews and audits
- Software testing
- Defect management and trend analysis
- Configuration management
- Risk management activities
- Supplier control
- Training
- Documentation
- Safety and security
The software development life cycle consists of various phases that divide the software development work into various parts. The software development life cycle phases are given below:
- Requirement analysis phase—gathering and documentation of requirements.
- Design phase—preliminary and detailed design of the software.
- Implementation and unit testing phase—development of source code and initial testing of independent units.
- Integration and system testing phase—testing the integrated parts of various units and the system as a whole.
- Operational phase—delivering and installing the software at the customer’s site.
- Maintenance phase—removing defects, accommodating changes and improving the quality of the software after it goes into the operational phase.
Associations between elements of quality system and life cycle phases
Standards, processes and metrics
Identifying and applying standards, processes, and metrics is crucial in software development. Standards, such as those from IEEE, ANSI, or ISO, provide guidelines for every phase of the software development life cycle, from documentation formats to coding practices. Organizations should select and enforce relevant standards to ensure quality.
Effective processes are essential for implementing these standards. A process consists of activities required to produce a high-quality product and must be well-practiced, enforced, documented, and measured.
Metrics are used to assess the effectiveness of these processes and practices. The right metrics help increase customer satisfaction by ensuring the software meets quality standards.
Reviews and audits
Reviews are essential verification activities conducted during early software development phases to detect and correct faults early, minimizing costs. There are two types: informal (in-process) reviews, done continuously, and formal reviews, conducted at the end of development phases. Early detection through reviews is cost-effective compared to fixing issues in later phases.
Formal audits, including physical and functional audits, are part of the review process. Physical audits ensure the final product matches the documentation, while functional audits verify that the software meets all requirements. Effective reviews and audits help ensure software correctness and reduce the overall cost of development.
Software testing
Software testing ensures requirements are met and includes both verification and validation activities. Key components of testing are:
- Test Planning: Begins alongside requirements gathering and includes creating test cases for acceptance testing to verify testability.
- Test Cases: Define inputs, expected results, and pass/fail criteria.
- Test Design and Procedure: Guide the execution of tests.
- Validation Testing: Starts when the source code is ready, documenting results and taking corrective actions for any unexpected outcomes.
- Acceptance Testing: Conducted by the user to confirm the software meets their needs.
Effective testing boosts confidence in the software by systematically verifying and validating it throughout the development process. Phase-wise cost of fixing a fault.
Defect management and trend analysis
Defect management involves detecting and correcting faults, recording all discrepancies in the software. It's part of change management, following a cycle of reporting, fixing, and closing defects. Key elements include:
- Defect Reporting: Using a standardized software defect report to document issues.
- Change Procedure: Managing reported defects through their lifecycle.
- Trend Analysis: Using defect records to identify patterns and improve future processes, reducing defect occurrence. Typical change procedure
Configuration management
Configuration management tracks and controls changes in software to ensure its current state is known at all times during the development life cycle. It involves:
- Identification and Recording: Documenting each software item and its version.
- Version Control: Ensuring the correct version of each item is always known.
- **Change Approval: **Authorizing changes to prevent unauthorized modifications.
This process ensures that necessary changes are implemented systematically, maintaining software integrity throughout development.
Risk management activities
A project may consist of several types of risks. Risk management is an essential activity in any project. The risks can vary from availability of skilled professionals, poor communication among developers to more severe such as identification of incorrect requirements, overrun of budget, unable to meet delivery deadlines, improper construction of design, etc. The risk management activities include risk identification, determining of impact of the risk, prioritization of risk, and taking corrective actions to reduce the risks.
Supplier control
The software that is purchased by a supplier must be assured in terms of quality. The purchased software should meet the software requirements.
Training
Training ensures both developers and users are proficient with the necessary tools and software.
- Developer Training: Educates developers on new technologies, tools (e.g., Rational Rose for design), testing tools, debugging tools, and documentation standards before project commencement.
- User Training: Instructs users on software objectives, interfaces, navigation, installation, data entry, report generation, and system administration.
- System Administrator Training: Covers system environment, hardware requirements, handling exceptions, failure recovery, security, and backup mechanisms.
Continuous training updates are essential for maintaining software quality, and quality professionals should advocate for necessary training sessions.
Documentation
Documentation is a very important part of the quality system. During the software development phases, the SRS document, SDD, test plans and test cases, user manuals and system guides, etc. must be produced. The specified documentation standards must be followed in order to create these documents. The documentation helps strongly in the debugging process and hence the maintenance of the product. The documentation done in the requirement phase guides the design process and the documentation done in the design phase serves as the basis of implementation of the software. The documentation in the source code enhances its readability and understandability and helps in debugging activities.
Recommended documentation for a software
Safety and security
The safety and security of the software is essential for the project. The safety of implication of the software failure after it is installed and the security of the program data are two major concerns for every software project. The safety critical software is that whose failure could have an impact on the lives of the humans or heavy loss in terms of cost or resources. The world has seen many failures due to small faults in the software. For example, Ariane 5 failed due to small conversion/overflow error in the software. Similarly small error in missile causes death of many soldiers in the war. Y2K failure and other financial software failures are also examples of the software failure. The failures that can affect the safety of human or that can have heavy losses or hardware damages are very critical to be identified and removed. Hence, the safety critical software should be adequately planned, assessed, monitored and tested. The security of the data against accidental modifications or unauthorized access is a very critical issue. The place where the software is deployed must also be secure and protected against any damage or destruction. The data of the software should be protected from hackers, attackers and viruses. If the software data becomes inaccurate, it affects the software behaviour and the results obtained will not be correct. The software quality professional must keep the management people aware of the security concerns. There should also be provisions of recovery from a catastrophic failure.
Software Quality Models
McCall’s Software Quality Model
McCall proposed a software quality model in 1997 which included many quality factors (McCall 1977). The aim of this software quality model is to reduce the gap between users and the developers. The model is divided into two levels of quality attributes: quality factors and quality criteria. The model covers quality factors from three levels of perspective: product operation (operation characteristics of the software), product revision (the extent to which the software can be modified), and product transition (the quality of the software to adapt to new environment).
McCall’s software quality factors
Additional software quality factors
McCall software quality management consists of 11 quality factors which are mapped into 23 quality criteria. However, users and developers are concerned with the quality factors only. The quality criteria provide insight into the quality attributes of the system. The quality metrics can be used to capture the aspects of the quality criteria. The subjective assessment of the quality criteria can be made by rating them on a scale from 0 (very bad) to 10 (very good). However, the use of such assessment is difficult as different people may rate the same criterion differently. This makes correct quality assessment almost impossible.
Boehm’s Software Quality Model
The second basic software quality model is given by Barry W. Boehm in 1978 (Boehm, 1978). It is similar to McCall’s software quality model in the sense that it also presents software quality attributes in the form of hierarchy: primitive characteristics, intermediate-level characteristics and high-level characteristics. The high-level characteristics represent primary use of the system. The following primary level factors are addressed by the high-level characteristics:
- As a utility: The ease with which the software can be used in its present form.
- Maintainability: The ease with which the software can be understood, modified and tested.
- Portability: The ease with which the software can be used by changing it from one platform to another platform.
ISO 9000
The International Organization for Standardization (ISO) made different attempts to improve the quality with ISO 9000 series. It is a well-known and widely used series. The ISO 9000 series of standards is not only for software, but it is a series of five related standards that are applicable to a wide range of applications such as industrial tasks including design, production, installation and servicing. ISO 9001 is the standard that is applicable to software quality. The aim of ISO 9001 is to define, understand, document, implement, maintain, monitor, improve and control the following processes:
- Management responsibility
- Quality system
- Contract review
- Design control
- Document control
- Purchasing
- Purchaser-supplied product
- Product identification and traceability
- Process control
- Inspection and testing
- Inspection, measuring and test equipment
- Inspection and test status
- Control of nonconforming product
- Corrective action
- Handling, storage, packaging and delivery
- Quality records
- Internal quality audits
- Training
- Servicing
- Statistical techniques
In order to obtain ISO certification, a formal audit on the above 20 clauses is to be done and the result of the audit should be positive for all the 20 clauses. The failure of software companies during initial audit ranges from 60% to 70%.
ISO 9126
ISO 9126 is an international standard that is guided by ISO/IEC. It consists of six characteristics given below
-
Functionality: It is an essential feature of any software product that achieves the basic purpose for which the software is developed. For example, the LMS should be able to maintain book details, maintain member details, issue book, return book, reserve book, etc. Functionality includes the essential features that a product must have. It includes suitability, accuracy, interoperability and security.
-
Reliability: Once the functionality of the software has been completed, the reliability is defined as the capability of defect-free operation of software for a specified period of time and given conditions. One of the important features of reliability is fault tolerance. For example, if the system crashes, then when it recovers the system should be able to continue its normal functioning. Other features of reliability are maturity and recoverability.
-
Usability: The ease with which the software can be used for each specified function is another attribute of ISO 9126. The ability to learn, understand and operate the system is the sub-characteristics of usability. For example, the ease with which the operation of cash withdrawal function of an ATM system can be learned is a part of usability attribute.
-
Efficiency: This characteristic concerns with performance of the software and resources used by the software under specified conditions. For example, if a system takes 15 minutes to respond, then the system is not efficient. Efficiency includes time behaviour and resource behaviour.
-
Maintainability: The ability to detect and correct faults in the maintenance phase is known as maintainability. Maintainability is affected by the readability, understandability and modifiability of the source code. The ability to diagnose the system for identification of cause of failures (analysability), the effort required to test a software (testability) and the risk of unexpected effect of modifications (stability) are the sub-characteristics of maintainability.
-
Portability: This characteristic refers to the ability to transfer the software from one platform or environment to another platform or environment.
The major difference between ISO 9126 and McCall and Boehm quality models is that ISO 9126 follows a strict hierarchy. Each characteristic is related to one attribute only.
Capability Maturity Model
The initial version of the Capability Maturity Model (CMM) was developed at Software Engineering Institute (SEI), Carnegie Mellon University, USA. The CMM provides a framework which defines the key elements of an effective and efficient software process. The CMM defines the growth path of an organization from an undisciplined, immature approach to a disciplined, mature approach. The CMM covers key practices that help to plan, improve and manage software development life cycle activities. These software development practices, when followed by organizations, improve the resource utilization and quality of the software.
The CMM is categorized into five maturity levels as initial, repeatable, defined, managed and optimizing.
Conclusion
Ensuring software quality is a multifaceted endeavor that requires a comprehensive approach encompassing standards, metrics, reviews, and training. By adhering to established standards, organizations can maintain consistency and reliability throughout the development process. Effective metrics provide insights into performance and areas for improvement, while thorough reviews and audits help identify and correct issues early, reducing costs and enhancing reliability.
Comprehensive testing, defect management, and configuration management are crucial for maintaining software integrity and ensuring that the final product meets user expectations. Training developers and users ensures that everyone involved is equipped with the necessary knowledge and skills to utilize and maintain the software effectively.
In a rapidly evolving technological landscape, maintaining high software quality is not just about meeting current requirements but also about anticipating future needs and continuously improving processes. By adopting these best practices, organizations can deliver exceptional software products that are reliable, efficient, and user-friendly, ultimately leading to higher customer satisfaction and success in the competitive software market.
Want to write a blog?
Unfold your thoughts and let your ideas take flight in the limitless realm of cyberspace. Whether you're a seasoned writer or just starting, our platform offers you the space to share your voice, connect with a creative community and explore new perspectives. Join us and make your mark!