Basic principles of QA
This is no news for my fellow QA engineers/testers/Quality testers or however else we call ourselves, but I thought it might be beneficial to business owners, managers, developers, and product owners to understand why we need testing and what to expect from it.
There are no sharp definitions in testing, that's why it's important to understand processes and methods, and I am planning to cover all aspects of QA step-by-step, but today we'll talk about basics.
So what is Software testing? Software Testing is the process of verifying a system to identify any errors, gaps, or missing requirements versus the actual requirement.
Why do we do the testing?
- To verify it meets the requirements
- To find defects (bugs) on different stages of development and prevent the price increase of the product
- To find edge cases of product use as well as to see the product from a user perspective
- To increase loyalty of the customers
Principles of testing
- Testing shows the presence of defects. Testing can show the defects are present but cannot prove that there are no defects. Even after testing the application or product thoroughly, we can't say that the product is 100% defect-free. Testing always reduces the number of undiscovered defects remaining in the software, but it is not proof of correctness even if no defects are found.
- Exhaustive testing is impossible. Testing everything including all combinations of inputs and preconditions is not possible. So, instead of doing exhaustive testing, we can use risks and priorities to focus testing efforts.
- Early testing. In software development, life cycle testing activities should start as early as possible and should be focused on defined objectives.
- Defect clustering. A small number of modules contains most of the defects discovered during pre-release testing or shows the most operational failures.
- Pesticide paradox. If the same kinds of tests are repeated again and again, eventually the same set of test cases will no longer be able to find any new bugs. To overcome this “Pesticide Paradox”, it is very important to regularly review the test cases. New and different tests need to be written to exercise different parts of the software or system to potentially find more defects.
- Testing is context-dependent. Different kinds of sites are tested differently. For example, safety-critical software is tested differently from an e-commerce site.
- Absence–of–errors fallacy. If the system built is unusable and does not fulfill the user’s needs and expectations then finding and fixing defects does not help.
To err is human. But sometimes the cost of mistakes can be too high. We have plenty of examples throughout history (Starbucks is one example); and even though bug-free software is a myth, it's important to have Quality Assurance in place to eliminate defects as much as possible.