Software Engineering: Software Quality Assurance

Software Engineering: Software Quality Assurance
Software Engineering: Software Quality Assurance

Introduction

The engineers worldwide were working around the clock as the economies struggled with a trivial yet powerful software bug. Y2K, also known as the millennium bug, was the computer’s inability to differentiate between the years 1900 and 2000.  Back in the 1960s,  storage and memory were expensive commodities. Hence, programmers use the last two digits of the date to represent the Year.

For example, the Year 1996 was stored as 96. That means the system will store the years 1900 and 2000 both as 00.  The banking industry was in chaos as the y2k problem would calculate the interest rate for a thousand years instead of a single day on December 31. Transportation and power plants would be severely affected as a miscalculated date could disturb the maintenance checkups and put the environment at risk.

You may read more about it.

The purpose of introducing you to the Y2K bug was to make you aware that software engineers are responsible not only for developing software but for maintaining it and looking after potential problems as well. Ensuring good practices in the Software Development Life Cycle and monitoring strict quality checks is essential and is rigorously practiced.

In the traditional model of software development, i.e., the waterfall model, first the software (or for the sake of simplicity, consider that a program) is first developed, and then testing happens. While this may seem appropriate and systematic, the major drawback was the late identification of bugs and potential problems. Corporates now prefer Agile Methodologies for software development, wherein continuous and rigorous testing along with development takes place. A strict check on the overall quality of the process and the final product is done.

To understand the Quality Aspects of a Software Product and Software Quality Assurance, read out the full blog.

Quality Assurance

Quality refers to measurable characteristics such as correctness, reliability, durability, portability, reusability, testability. It’s all about meeting the requirements for the product’s functionality, design, accuracy, and reliability. Assurance is a positive declaration of a product or a service. It can be considered as a sort of guarantee that the product will work well.

Software Quality Assurance(SQA) is defined as the procedure to ensure that the software product or service provided to the customer by an organization meets the standard and is well conformed to the requirements. It is an umbrella activity that is applied throughout the software development life cycle.

IEEE defines SQA as

“A planned and systematic pattern of all actions necessary to provide adequate confidence that an item or product conforms to established technical requirements. A set of activities designed to evaluate the process by which the products are developed or manufactured.”

It may seem that it is all about the evaluation of Software, but it also includes the quality of the process used to develop, test, and release the software. SQA incorporates all software development processes starting from defining requirements to coding until release. Its prime goal is to ensure quality.

It has the following Activities:-

  • Process definition and Implementation
  • Auditing 
  • Training

A process could be a software development methodology, project management, requirements development, software design, software testing, and configuration management.

So now you have a little bit of understanding of Quality Assurance, now let’s look at the Quality Attributes on which a software product is being examined.

AttributeExplanation
ReliabilityThe ability of a system to continue to keep operating overtime under specific conditions is called Reliability.
FunctionalityThe software must provide appropriate functions as per the requirements, and the software should interact effectively with other components of the system.
UsabilityThe quality of the software is also defined by the ease of its use, how easily a user can understand the functions of the software, and the efforts required to follow the features.
EfficiencyFollowing good practices when designing the architecture of the product and writing clean, well-tested code makes an efficient software product.
MaintainabilityIt is defined as the ability of a software application to maintain and support new changes effectively.
PortabilityPortability refers to how quickly a system adapts itself to changing environments and specifications. It is also determined by how easy it is to install the software and how easy it is to replace a component.

Apart from the six components mentioned above, other components such as Scalability,  Testability, Flexibility, Supportability, Interoperability, and Performance are other important attributes on which a software product is being examined.

Components of Software Quality Assurance

An SQA(Software Quality Assurance) system combines a wide range of SQA components. These components are divided into the following six classes:

  1. Pre-Project Plan: Ensuring that the resources required for the project, schedule, and budget are clearly defined well in advance. The development and quality plans have been correctly determined. The components of the Pre-Project Plan are as follows:
  • Required Resources
  • Development Plan
  • Schedule
  • Quality Plan
  • Risk Evaluation
  • Project Methodology
  1. Project Lifecycle Component:  The project life cycle is divided into two stages:
  • Development Stage: The development lifecycle stage detects design and programming-related errors. Its components are divided into the following sub-classes
  • Reviews
  • Expert Opinions
  • Software Testing
  • Operation Maintenance Stage: In this stage, the SQA components includes the components of development lifecycle components along with specialized components wherein the main aim is to improve the maintenance tasks
  1. Infrastructure error prevention and improvement components

The main aim of this component is to eliminate or reduce the rate of errors based on the organization’s accumulated SQA experience. It is applied throughout the entire organization.

The components areas are :

  • Procedure and Work instructions
  • Templates and Checklists
  • Staff Training, Retraining, and certification
  • Preventive and corrective actions
  • Configuration Management
  • Documentation control
  1. Software Quality Management Components: 

These components establish the managerial control of software development projects. This component prevents the project from going over budget and behind schedule.

The components are:

  • Project Progress Control
  • Software Quality Metrics
  • Software Quality Costs
  1. Standardization, Certification, and SQA Assessment components

These components are responsible for implementing international, professional, and managerial standards within the organization. The main objective is to utilize international professional standards and improvement of the coordination of the organizational quality systems with other organizations.

The components include:

  • Quality Management Standards
  • Project Process Standards
  1. Organizing for SQA- the human components

The main aim is to initiate and support the implementation of SQA components, identify and deviations from the predefined standards, methods, and recommend improvements. 

The SQA organizational team includes test managers, testers, SQA unit, SQA committee, and SQA forum members.

PDCA Cycle

Quality Assurance has a defined cycle for doing Quality Assurance. The phases of this cycle are:

  • Plan
  • Do 
  • Check 
  • Act

The cycle is repeated to ensure that the processes followed in the organization are evaluated and improved on a periodic basis.

Plan: Organization should plan and establish the process related objectives and determine the process that is required to deliver a high-quality end product

Do: ‘Do’ the development and testing of the change. Carry out a small-scale study.

Check: Monitor the processes, modify it and check whether it meets the predetermined objectives. 

Act: Implement the actions that are necessary to achieve the improvements in the process. If the change did not work, repeat the cycle again with a different Plan.

There tends to be confusion between Quality Assurance and Quality Control. While Quality Assurance is to explore the processes and ensure the quality which led to the product, Quality  Control is to examine the product or service and check for the result. In simple words, Quality Assurance is Process-Oriented, and Quality Control is Result-Oriented.

qc_vs_qa

Software Quality Assurance Activities

Major Software Quality Assurance activities are enlisted below:

  1. Creating an SQA Management Plan: The foremost step is to make a proper plan regarding how SQA will be implemented in your project. Along with the engineering activities to be followed, it also includes ensuring that you have the right talent mix for your project.
  2. Setting the Checkpoints: Set checkpoints at regular intervals on which the quality of the project is evaluated. This will ensure regular quality inspection and work as per the schedule.
  3. Multi-Testing Strategy: Do not rely on a single testing approach. Multiple types of testing should be performed so that the software can be tested well from all angles to ensure high quality.
  4. Executing Formal Technical Reviews: A Formal Technical Review is done to ensure that the quality and design of the prototype are compliant with the actual quality requirements and design quality. It helps in detecting errors in the early stages of the Software Development Life cycle.
  5. Enforcing Process Adherence:  This activity is a blend of two sub-activities:-
  • Product Evaluation: The activity confirms that the software product meets the requirements discovered in the project management plan.
  • Process Monitoring: The activity verifies that correct steps were taken during the software development by matching the taken steps against the documented steps.
  1. Measure Change Impact: If the Quality Assurance team reports any defect, then the concerned team will fix the defect. The QA team then determines the impact of the change which is brought by the defect fix, i.e., the defect fix should not only fix the defect but also be compatible with the whole project.
  2. Performing SQA Audits: The SQA audit is done to inspect the entire SDLC process and compare it against the established processes. This exposes any non-compliance issues.
  3. Maintaining Records and Reports: It is necessary to maintain the necessary records related to SQA like test results, audit results, review reports, change requests, and documentation and share them with stakeholders. 
  4. Manage Good Relations: Manage good relations with other teams involved in the project development.  Harmony between testers, developers, and the QA team boosts productivity and ensures the product’s high quality.

SQA demands conformance to one or more standards. Some of the most popular standards are ISO 9000, CMMI level, Test Maturity Model Integration(TMMi). Each standard has its own principles.

Software Quality Assurance Elements

There are ten elements of Software Quality Assurance as listed below.

  1. Software Engineering Standards
  2. Technical Reviews and Audits
  3. Software Testing for Quality Control
  4. Error collection and Analysis
  5. Change Management
  6. Educational Programs
  7. Vendor Management
  8. Security Management
  9. Safety
  10. Risk Management

SQA Techniques

Various SQA techniques include:

  • Auditing: It involves inspection of the work products and related information to determine if a set of standard processes were followed or not.
  • Reviewing: Software Product is examined by both the internal and external stakeholders in a meeting to seek comments and suggestions.
  • Code Inspection: Doing static testing to find bugs is done by a trained peer and is based on rules, checklists, entry and exit criteria.
  • Design Inspection: Certain areas of software design, including functional and interface specifications, logic, performance, and extensibility, are inspected using a checklist.
  • Simulation: Simulation is virtually examining the behavior of the system under modeled real-life scenarios
  • Functional Testing: It is based on testing the system based on specifications or features. It verifies what the system does instead of how it does.

Apart from the techniques mentioned above, Standardization, Walkthroughs, Path Testing, Stress Testing, and Static Analysis are some popular SQA techniques.

Benefits of Software Quality Assurance

SQA works parallel to the development of software. It focuses on improving the development process of a software product to prevent problems before they become a major issue. The benefits of SQA are:

  • SQA aids in producing high-quality software.
  • SQA is beneficial in the condition of no-maintenance for a longer duration 
  • It improves the process of creating software and thus the quality too.

Frequently Asked Questions

What are the activities of SQA?

The major SQA activities include:-
1. Creating an SQA Management Plan
2. Setting the Checkpoints
3. Multi-testing strategy
4. Executing Formal Technical Reviews
5. Enforcing Process Adherence
6. Measure Change Impact
7. Performing SQA audits
8. Maintaining Records and Reports
9. Manage Good Relations

What is the role of the SQA group in Software Engineering?

The SQA group is responsible for reviewing selected work products, identifies, documents, and tracks deviations, verifies that corrective actions have been implemented, and periodically reports the results to the project manager.

What is the objective of SQA activities?

The objective of SQA activities is to assure an acceptable level of confidence that the software will conform to functional technical specifications and will conform managerial scheduling and budgetary requirements.

Key Takeaways

This article sheds light on Software Quality Assurance which is one of the important concepts of Software Engineering.  It is equally important to know the quality aspects of the software as well. Interviewers often prefer asking questions related to Quality Assurance, but this is not the only topic you need to ace interviews.

To ace a technical interview, you need to have a solid understanding of Computer Science Fundamentals, Data Structures, and Algorithms, and System Design. Codestudio is one such platform that can help you ace technical interviews, with well-structured guided paths, interview experiences, blogs, and a good amount of coding questions.

Happy coding!