We all perceive the quality of any product as something that should go without saying, and software is no exception in this respect. In fact, poor software quality is the main cost driver in IT business. In 2020, the total expenses caused by a low software quality was estimated as $1.56 trillion that is 22% more than in 2018. In the same vein, poor software quality leads to serious security issues such as, for example, a Capital One data breach in 2019.
Large companies also fall prey to software failure because of insufficient quality assurance (QA). For example, Starbucks lost millions of dollars in sales because of an error in their point-of-sales registers back in 2015.
Likewise, Uber appeared in the center of a scandal around a businessman, whose wife found out that he had an affair. The man used his wife’s smartphone to book a ride, and the app kept sending notifications about his other rides even after he logged out, thereby prompting the wife’s suspicions. As you can see, low-quality software sometimes saves the day, but only for bad marriages.
That’s why the role of quality assurance in software development is indisputable. However, how can you make sure your product is of top quality?
In this article, the JatApp team will explain what quality assurance is and why it is pivotal for your business. We have 6 years of experience in software quality assurance and testing, so we’ll also share our own approach to the QA process with you.
What is QA and why is it needed?
Software quality assurance is a set of processes aimed at verifying that a software product meets the quality standards. In other words, QA ensures that your software works as it should.
Quality assurance in software development is needed because software is developed by humans, and nobody is perfect, so errors do occur from time to time. That’s why checking the quality of the product before the release is a reasonable thing to do.
A commonly used cycle of software quality assurance
Main approaches to QA
The process of quality assurance has two major approaches: the defect management approach and the attributes approach. Let’s have a look at each of them.
The defect management
This approach focuses on finding and dealing with software bugs, thereby improving the software quality . Defects can vary from improper data management to a bad-written code.
If your QA team takes a defect management approach, it means that all bugs will be fixed one by one to make sure that the software works as intended.
The defect management approach is especially good for projects that have clear requirements and strict control over the product development. The project team knows well what they are going to develop, so any defect is easy to recognize because it doesn’t match the product requirements.
When following this approach, the main goal is to make sure the software product achieves all quality attributes. Some characteristics may vary, but in general they fall into the following categories:
As soon as your software meets the attributes for each category, it means that your product has reached the highest level of quality.
Main QA standards
Aside from the approaches to quality assurance, the software quality has to align with one of the following standards: ISO 9001, Capability Maturity Model Integrated (CMMI), and Testing Maturity Model (TTM)
The ISO 9001 has seven principles that a quality product should follow to meet users’ needs:
- Customer focus
- Process approach
- Evidence-based decision making
- Relationship management
This standard is commonly used, so picking ISO 9001 as the main quality guide will be a wise decision.
This standard is often used in software development projects ordered by the United States government, which is why it’s not popular globally. The standard defines software quality as a particular level of maturity, so the product of highest quality has respectively the highest level of maturity. The maturity levels are the following:
- Initial. The software doesn’t show any working processes.
- Repeatable. Some processes are working and can be repeated many times
- Defined. The software has several processes that work, but they require improvemen
- Managed. The software works properly, but there are some performance aspects that can show better result
- Optimizing. The software is completely ready for use, while its features can be updated and optimized as soon as such a need arises.
The standard stems from CMMI and provides specific requirements to the software testing. As a result, each maturity level has to involve the following tests:
- Policy and strategy
- Monitoring and control
- Design and execution
- Environment testing
- Training program
- Lifecycle and integration
- Non-functional testing
- Peer review
- Test measurement
- Evaluation of product quality
- Advanced review
- Prevention of defects
- Process optimization
- Quality control
When does QA take place?
Actually, quality assurance takes place throughout the entire project, since project managers as well as other project team members check the quality of deliverables after every single milestone.
However, quality control and testing usually go after design and development stages, when the product has at least some features to check.
An exceptional approach to QA in software development is taken by the V-model for software development life cycle (SDLC). The project is presented in V-shape form, where the verification processes go on the left side, coding is the center, and validation processes are on the right side. Each development stage has its individual testing phase, so having specific QA roles in SDLC is paramount.
Roles in QA
In fact, every single member of a project team is responsible for QA in software development. However, QA specialists are the main people who take care of software quality. There are four main roles within a QA team: test analyst, test designer, test executor, and test manager.
- Test analyst. This person is responsible for checking whether the software meets the predefined requirements and identifying the ways how the product’s “imperfections” can be fixed.
- Test designer. These QA specialists create software tests according to the business requirements and technical specifications. Also, test designers usually plan what environments are necessary for running the tests.
- Test executor. A test executor runs tests created by a test designer, records all bugs detected, and proposes ways to fix them.
- Test manager. The main duties of a test manager are scheduling of tests, management of test requirements, assignment of tasks to QA team members, and communication with other project stakeholders.
Benefits of QA
Even though there are different approaches to definition and management of software quality, software quality assurance usually delivers the following benefits:
- Time and money saving. Quality assurance enables a company to release a software product that doesn’t require any revisions and additional work. As a result, the business saves a lot of resources and safely deploys the product.
- Product competitiveness. A product that works seamlessly has a strong competitive advantage in comparison with the solutions that don’t perform their functions as expected.
- Security maintenance. Apart from functionality and product accessibility, the quality assurance seriously impacts data security. That is why products that successfully underwent the QA process are much less vulnerable to data breaches.
- Better reputation. A product of high quality is a great thing for your company image. If users get the product that is bug-free, they will feel that you care about them.
Quality assurance vs quality control vs testing
You can hear such terms as quality assurance, quality control, and software testing quite often when it comes to the software quality. However, what’s the difference between them?
Well, QA in software development is the broadest term that describes the process of quality management across different project stages. In other words, the QA role in software development involves both quality control and testing, but it’s not limited to these two procedures only.
Okay, but what about quality control and testing? No worries, we’ll explain.
Quality control means a process of checking whether the entire software product meets the required quality standards and technical specifications. Quality control usually takes place when the product is complete or nearly finished, so that it’s possible to ensure that all features work together as it was planned.
Quality control aims at validating the product quality as a whole, while testing pays a special attention to code and product design quality.
Software testing means the process of checking a product’s code and design quality in order to find any errors and bugs. There is a wide range of testing procedure types, but they’re commonly divided into manual and automated.
The automated testing means that a product is checked with the help of automated digital tools that perform the process of code review and validation instead of humans.
Respectively, manual testing involves the work of QA specialists who verify the product quality.
JatApp’s approach to quality assurance
In JatApp, we have come up with our own approach for quality assurance in software development. Let’s start with the main thought: it’s impossible to eliminate all bugs.
It is the main principle of quality assurance and testing, as long as any software is an open dynamic system that cannot exist in one and the same state all the time. That’s the reason why the existence of entirely bugless software is impossible. Compare it to a human organism: it may have some inherent imperfections, but it doesn’t necessarily mean that you’re not healthy.
In the same way, JatApp defines software quality: the product mustn’t have any defects that affect the performance of its functions.
We begin software testing when:
- The QA team receives technical and design specifications for the feature/build/product submitted to testing.
- When a back-end developer submits a feature/build to application programming interface (API) testing.
- When the entire build is ready for testing.
However, we had an exceptional case when we needed to test the product without using the necessary hardware. JatApp was working on a fully automated platform for powerbank rental, but the hardware shipping was delayed because of the COVID-19.
Our team had to design a hardware emulator to test the product’s functionality. All necessary tests were performed, and when the hardware arrived, its testing demonstrated the same positive results.
Product’s user interface
We end the product’s QA under the following conditions:
- A project’s milestone deadline expires.
- All test cases and checklists have been performed.
- When no new errors and bugs are detected.
- Project manager decides to stop the product’s testing.
When a bug or error is detected, our QA specialists assign it a particular level of severity:
- S4 (Minor). Usually, such bugs don’t relate to the product’s functionality. In the majority of cases, such bugs affect user interface/experience, and the logic of front-end interactions. Imagine that you have a door that works properly, but makes a noise when it opens/shuts. That is S4.
- S3 (Major). Such kind of bugs affect the performance of a particular feature. Major bugs don’t disable the feature entirely but prevent it from working properly. As for the example with the door, a major bug is a situation in which you can’t open the door fully, so you have to leave your house through the ventilation system or window.
- S2 (Critical). Critical bugs block the major part of the product’s functionality, but there’s an alternative way to omit the error. Again, our imaginary door doesn’t open at all, we don’t have any ventilation system, but it’s still possible to leave the room through the open window.
- S1 (Blocker). Bugs of such severity completely prevent the product from performing its functions, and there is no alternative way to make the software work. The imaginary door doesn’t open, you lost your keys, no window in the room, and nobody’s coming to help. No panic, our QA team can deal even with the worst nightmares.
When JatApp’s quality assurance team engages in testing of any software product, we run a number of tests:
- Installation test. This type of testing focuses on checking whether a software product is correctly installed and works according to the expectations. Installation testing is usually performed before handling the product to the client.
- Functional testing. It is a test that pays a specific attention to a product’s functionality and performance of every single feature. Testing criteria are formed on the basis of technical specifications, user story, or any other requirements provided by the project stakeholders. Successful functionality testing enabled JatApp to develop accurate real-time GPS tracking and mapping features for such products as Fameelee.
Tracking and mapping feature in Fameelee
- Non-functional testing of mobile applications. This test checks the quality of non-functional aspects of the product such as accessibility, user-friendliness, design, battery load, and such.
- Localization testing. The test works with identification of any problems related to the product’s compliance with linguistic, cultural, or any other requirements specified by the location where the product will be used.
- Cross-browser and cross-platform testing. The aim of this test is to check how the product works with different browsers/platforms/operation systems and their versions.
- API testing. Application programming interface is a set of protocols and frameworks that connect and integrate one software with another. A front-end part of the product doesn’t use the same technologies as the back-end, so it’s necessary to seamlessly connect both ends. API test detects any problems that affect this connectivity. Thanks to JatApp’s thorough code review, Cunio, a property management platform, was able to scale up. Our team fixed numerous bugs in the product’s API and restructured the platform’s architecture, so the client managed to address their growing business needs.
Cunio user interface
- Regression test. When a particular feature, build, or project milestone is finished, our QA performs a regression test to review all the functionality and double check that everything works well. For example, we worked on the employee engagement surveying platform for our client, so it was necessary to run a regression test of the product’s legacy code before we could start functionality’s expansion. As a result, our client was able to revive their legacy platform, add new features, and attract more customers than ever before.
- Sanity test. It’s similar to a regression test, but this test is used for narrow-specific cases when a single feature should be checked or there are no resources to run a full regression test.
- Acceptance testing. As soon as the customer receives the final product, they can perform an acceptance test to confirm the quality of a solution provided by JatApp. The product’s adherence to the technical specifications and business requirements are commonly checked with this test.
Ensure high quality of your software product with JatApp
The importance of software quality assurance in software engineering should not be underestimated. At the same time, maintaining and ensuring quality of your product is a tough process that requires involvement of skilled and knowledgeable QA specialists.
JatApp has successfully completed more than 200 projects, and each of them involved software quality assurance and testing. By working with us, you’ll have access to professional QA experts and can also save up to 60% of costs in comparison to the Western markets. Don’t hesitate to get in touch with us. We will contact you as soon as possible.