Quality assurance is as vital to software development as it is to any other product or service. While it can be the bane of many a software developer's life, it does exist for reason.
What is QA in software development?
SQA, short for software quality assurance, is the process of critically analyzing and maintaining set requirements for developing reliable products, like software. A well-designed SQA system incorporates all software development processes, starting from defining requirements, to coding, testing, and all other processes in between, prior to release.
It bears repeating that an SQA's prime goal is to ensure quality above all things.
This can be to externally set standards, from a body like the International Organization for Standardisation (ISO), but can also apply to internal, as well as industry-set standards.
The process is incredibly important for maintaining a company's credibility in a chosen field, as well as boosting customer confidence in their products. It also helps improve workflow efficiency and often offers a genuine competitive advantage over less-QA minded competitors.
For many ISO standards, a company can seek to be accredited by an external auditing company. This provides an organization with official accreditation from a third-party auditor that allows them to demonstrate their compliance with such standards.
A common example of this is the ISO/IEC 9000 series which many companies seek in order to advertise that their QA procedures are "fit for purpose". Companies will attempt to acquire accreditation in the relevant standards within the series most applicable to their activities and products.
Any QA process, as in software development, is designed to ensure that the final product is in line with a client's requirements and expectations. Professionals in this sector work on both the development and implementation parts of the process throughout the lifecycle of the development of particular software.
It is, by its very nature, a proactive process that places emphasis on process development, defect detection/rectification/prevention, and continuous improvement.
QA in software development should not be confused with software testing. While also critically important, and usually a major part of the QA process, it usually concentrates on simply identifying defects and errors in the software.
Software testers tend to apply rigorous testing regimes in order to weed out any variations from the set requirements, or defects ("bugs") that need to be ironed out prior to the release of the product.
Software testing is, in effect, just one cog in the wheel of software quality assurance, not the whole process. For example, testing usually only detects problems, it doesn't resolve or fix them -- unlike software QA specialists.
You can liken it to the difference between quality assurance and quality control. The latter is more of a corrective tool that is product-orientated and reactive. The former is intended to be proactive, process-orientated, and intended to define the parameters of quality control. In other words, QA is the general, and QC the troops.
Software quality assurance professionals will manage, track, and assess the entire process, from cradle to grave, through a set, standardized process. In theory, this helps identify hiccups in the design process, to enable improvement actions which can make the process more streamlined in the future.
Through rigorous, and honest, assessment of all parts of the software design process, the development company can assure its customers that all reasonable actions have been taken to make sure their products are of the highest quality possible.
Why is software development QA required?
As we have already mentioned, SQA is a critical component in the process of developing many products, including software. The QA process in software development helps companies create products and services that, at the very least, meet the expectations and requirements of their customers.
By formally creating methods and procedures that follow international or industry-defined standards, quality assurance processes should be able to detect and rectify defects before they become a serious issue.
"Depending on the size of the organization, QA can comprise various sub-tasks. At its core, the QA process creates a specific quality deliverable. Since software requirements are continuously changing and teams add new objectives, the QA team needs to make sure that the newly-added goals or requirements aren’t going to affect the software quality negatively." - Medium.
For this reason, QA team members need a fairly different skill set to that of software developers. Quality assurance tends to require disciplined, repetition-loving individuals who do not accept that not finding errors means a product is flawless.
Quality assurance staff also need to have sufficient confidence, self-assurance, and the ability to think creatively at all times. The best QA professionals will familiarize themselves with the nuances of the entire application in development, and should be very efficient at what they do. Although, well-designed QA systems should make the process as slick as reasonably possible.
Software development QA professionals are also contentious by their very nature, which can often irritate developers. However, on the flip side, it does keep them on the straight and narrow without the need for being micromanaged.
There is a growing belief in the industry that developers are probably best-placed to also provide quality assurance for the software they have developed. However, this can be something of a false economy. Like any creative role, in any industry, it can sometimes be difficult to critically assess something that you have created yourself.
Software developers are often, to put it another way, too focussed on the finer details to see the effect on the bigger picture -- the final software product.
The process of software development quality assurance, inclusive of testing, can be performed either by a dedicated individual, by a small team; and be accomplished either in-house or outsourced to independent entities. For best results, QA teams should work closely with developers, as this tends to form a more productive working environment for all involved.
This also allows face-to-face conversations that can yield some interesting resolutions for the myriad problems that something as complex as software development inevitably runs into. It also provides a much-needed balance to the developer's role, as QA teams are looking at the utility of the product to third parties, their customers.
While some companies have begun to reassess the need for dedicated QA staff, many others find that less attention paid to quality tends to lead to an increase in customer complaints and loss in revenue.
What SQA standards are there?
There are various international quality assurance standards around the world, but some of the most popular ones are as follows.
- ISO/IEC 9000 series - One of the most recognized and respected quality assurance standards, these are based on 7 basic management principles. These are; customer focus, leadership, people engagement, process approach, improvement, evidence-based decision making, and relationship management. Of the series, some of the most relevant are ISO/IEC 9126 and ISO/IEC 9241-11.
- ISO/IEC 25000 - Commonly known as the standard that provides guidelines for Software Quality Requirements and Evaluation (SQuaRE), this standard helps organizations enhance the processes related to software quality requirements and their evaluations. This standard has since replaced ISO 9126 and ISO 14598.
- ISO/IEC 12119 - This standard deals with software packages delivered to the client. It does not focus or deal with the clients’ production process.
- CMMI Levels 1-5 - Standing for Capability Maturity Model Integration, this standard is one of the many software development processes dedicated to standards. It can be employed to direct process improvement throughout a project, in a particular department, or throughout an entire organization. Each level from 1 to 5 (level 5 being the highest) is awarded based on the integrity and efficacy of an organization's processes.
- IEEE standards - IEEE has various standards that relate to software development and testing. These include: IEEE 829, IEEE 1061, IEEE 1059, IEEE 1008, IEEE 1012, IEEE 1028, IEEE 1044, IEEE 1044-1, IEEE 830, IEEE 730, IEEE 1061, and IEEE 12207.
- BS EN standards - BS EN, or British Standard, also have various standards relevant to software development. Some of the most relevant include BS 7925-1 and 7925-2.
What does the SQA process entail?
Any SQA process tends to consist of ten essential elements. These are, broadly:
- Software engineering standards
- Technical reviews and audits
- Software Testing for quality control
- Error collection and analysis
- Change management
- Educational programs
- Vendor management
- Security management
- Risk management
Like any quality assurance system, the SQA process generally also includes the following general activities. This list is far from exhaustive and is only intended to point out some of the more critical elements.
1. An overarching management plan needs to be drawn up
One of the most critical steps in any quality assurance system is to formulate a management plan.
This will include references to any relevant international standards, as well as particular industrial standards, if any, that apply.
The plan will then map the company's procedures, policies, and other processes to these standards in order to ensure compliance with them, at the very least. It may also include activities that exceed the minimum expected standards.
An SQA management plan should also outline the general approach the organization will undertake throughout the development process, such as which particular engineering activities will be carried out.
It will also ensure that the development team has sufficient numbers of suitably experienced, qualified, and, where relevant, certified staff to complete the project. It should also include what measures, if any, will be taken if any parts of the development process are outsourced to third-party companies or contractors.
2. The SQA process will include a series of checkpoints and audits
Any well-developed SQA system will also set out a series of checkpoints along the lifecycle of the development program. These act as periodic assessments on the progress of the project, with checks against standards and the development scope of works, to ensure the project is not getting off track.
Such checks will also ensure the quality of the product at that particular moment in time, and will often (but not always) assess the competence and performance of technical staff. Such checks should be made at strategic points in the development process, as well as have regular, unannounced "spot checks" to ensure that the quality assurance system's mandate is being adhered to.
3. A good SQA will apply software engineering techniques
Any SQA worth it's salt will apply some aids to software engineering techniques too. These help software developers to achieve the highest quality possible, and keep to, often tight, timescales.
Examples include: interviews, Functional Analysis System Techniques (FAST), work breakdown structures (WBS), source line of codes (SLOC), and functional point estimation.
4. SQA systems rely heavily on formal technical reviews
Formal technical reviews (FTR) are another incredibly important part of SQA systems. These, as the name suggests, evaluate the quality and design of any prototype software.
Usually held early on in the project, these reviews help detect errors ASAP, reducing the need for rework later down the line.
5. Multi-testing is an important part of the process
A good SQA procedure will not just rely on one testing approach. Multiple testing types should be employed to ensure that any software product is testing from multiple angles to further guarantee its quality.
6. Process adherence enforcement is important
Process adherence will typically be a blend of two sub-activities, product evaluation and process monitoring. The former confirms that the software product actually meets the requirements it is being developed for and ensures it meets any predetermined standards.
The latter checks that the correct steps were taken throughout the software development process. This is usually achieved by matching actual steps taken, against documented steps within the SQA management plan.
7. SQA systems must be flexible
Any good SQA plan must be flexible enough to adapt to changes. They should integrate procedures needed to cope with the changes that are bound to crop up during any software development process.
Changes must be dealt with via a formalized system that logs and validates each one. The validation process will check that any changes made are in line with set standards, as well as being viable.
Any changes made, whether fixes to defects or otherwise, must also be evaluated, and their impact, if any, measured. Such checks will ensure that any changes made to fix defects are effective, and also ensures that they are compatible with the project as a whole.
This is usually achieved using various software quality metrics that allow managers and developers to observe activities and track changes from beginning to end. It will also include corrective actions, where required.
9. The big "A" -- Audits
The bane of many a technical member of staff, audits are fundamental to a well-oiled SQA. These check the overall "fitness" of the management system and also "drill down" into the progress of the software development process, as well as adherence to standards.
Audits will also check that the status reports of all team members accurately reflect the true state of the project, as well as uncover any non-compliance issues.
10. Records, records, records
Anyone who has ever had the "pleasure" of managing a quality system of any kind understands the importance of good record and report keeping. The SQA process is no different, and all necessary documents should be kept up to date and disseminated among all relevant shareholders.
Things like test results, audit results, review reports, change requests documentation, etc. should be kept for future reference.
11. A great SQA system will also help garner good relations between all parties
And finally, one very important part of an SQA is maintaining good relations. The entire process will move more smoothly if harmony is maintained between the QA and development teams.
Not only does this "grease the wheels" and allow quality assurance activities to overcome barriers, but it also helps build a feeling of camaraderie among different departments. Nobody likes to have their work checked by somebody else, so it is best to keep the process friendly and constructive.
And that's a wrap. We hope, by now, you managed to gain an appreciation for why SQA exists, and why you should take it seriously.
Yes, it can be a pain, but ultimately, quality assurance makes sure that the final product is the best that it can be and that your customers will actually buy it.
Maintaining high quality, and building trust in your customer base is, as they say, worth its weight in gold.