The term “Zero Defects” is a QA/QC concept that aims to reduce and minimize the number of bugs and issues in a process and to do things right the first time. The main idea is to prevent mistakes from occurring rather than correcting them after they occur. This concept was first introduced by Philip Crosby in his 1979 book “Quality is Free.”
The main point of zero defects is not about achieving perfection, but about setting a standard of implementing mechanisms to meet those standards consistently. Zero defects is not a specific process with defined steps, but a mindset or dev/tech culture that needs to be embraced throughout a team/company. It involves continuous improvement processes, recognizing the high cost of quality issues, and working proactively to identify and fix bugs in apps and dev processes.
The concept of achieving zero defects remains more of an ideal than a reality in real project cases. Instead, the focus shifts towards minimizing defects that have an impact on business/users/systems, especially the ones that are critical enough to break app functionality. This approach underscores the importance of prioritizing quality from the project's outset to mitigate costly errors down the line.
How to achieve high-quality standards?
- Execute regression testing by QA professionals.
Is regression testing important?
- Yes.
Is it enough?
- It’s a good starting point but more things could be done for higher software quality and more effective processes.
Autotests/scripts triggered automatically with each new build/commit/staging deploy ensure that changes/fixes are tested and validated. Such integration brings a culture of continuous improvement and quick results - teams can detect and address issues/bugs early in the SDLC. It helps to deliver high-quality software at a faster pace, introducing agile methodologies processes.
Ensuring the availability of diverse/realistic test datasets improves test coverage and validation of app features. Using data generation tools (customized or self-written) or obfuscated prod (real users’) data for testing can improve the creation of effective test scenarios. Using data masking/obfuscating protects sensitive info during testing, ensuring compliance with data protection and security policies.
Combining or replacing regression testing with exploratory testing may improve test coverage and uncover unusual regression defects. QA engineers can use their domain knowledge and intuition to explore the app to find “hidden” issues/bugs that may have been missed in regression (autotests) tests. This agile combined approach helps teams to find complex tricky issues and corner cases that standard regression tests may easily miss.
Combining performance and security testing with functional regression testing is important for not missing issues with app performance and security. These are standard for your app performance and security test, but they are performed as a regression test in a case when significant changes are made and app performance may be affected or new vulnerabilities might be introduced in your system.
Using cross-browser (cross-platform/device) testing allows QA engineers to validate app functionality and layout across different browsers, versions, OS, devices (hardware), and screen resolutions. It is important to understand the reasonable scope and perform only necessary tests because this type of testing might be time-consuming, but it might be faster by using platforms like BrowserStack or your own device farm + automation. However, it takes more resources than, for example, API regression or functional regression testing so be careful and optimize the scope according to made changes and proven risks.
Identify potential regression risks, and plan regression testing activities at the earlier stages of feature implementations/code changes. This early involvement set collaboration between dev and QA teams, minimizing rework, bug fixing, number of testing iterations, additional regression testing, and accelerating time-to-market.
Is there something else that might be useful?
- Of course! There is always something else or new that you can use to improve your approach and product quality even if you use the best practices. Any approaches needed adaptation and tuning for your particular project, team, and situation.
It’s from the field of distributed systems; it involves deliberately introducing controlled chaos into a system to uncover weaknesses and failures. Traditionally, it’s used for resilience testing, but chaos engineering can be adapted for regression testing.
In regression testing, chaos engineering subjects the software to unpredictable and different conditions/data sets similar to prod envs. By intentionally disrupting/changing some components, such as network connections, dependencies, or infra, testers/devs can see how the app responds to unexpected input.
Integrating Chaos Engineering into regression testing processes gives additional ways to identify and fix potential regression risks/bugs before they impact end-users or the testing process in later stages.
Mutation testing is a technique where small changes are made to the source code to simulate potential bugs. By assessing how well the checklists/test cases detect these changes/bugs, QA engineers can assess the effectiveness of their regression tests. This approach provides info on the effectiveness of the test suite and shows cases/areas where additional changes are needed.
Tools that use machine learning algorithms to identify the underlying causes of regression defects might be quite useful for regression testing strategy. By analyzing code changes, test results, and system logs, these tools can suggest the source of regressions. This approach speeds up bug prevention and resolution and reduces the time spent on investigation, improving overall productivity and time to market. AI-based tools/algorithms also can analyze code changes and test results (stats) to identify the most relevant tests for execution.
Always remember, that you need to understand the risks and know your stats regarding regression bugs. In a product team, collaborating across all team members (devs, QAs, PMs, PdM/PO/FO, DevOps, etc), you can effectively assess potential risks and narrow down regression areas to a minimum. It's also important to accept some level of risk for the sake of faster shipping (regression bugs in rarely used or non-critical features might be acceptable and fixed later).
Avoid overtesting just for the sake of “ideal quality” or the Zero Defects concept.