1. Testing is context dependent :
Testing is done differently in different contexts.
Example : Safety -critical software is tested differently from an e-commerce site .
2. Exhaustive testing is impossible :
Exhaustive testing is a test approach in which all possible data combinations are used for testing. Exploratory testing includes implicit data combinations present in the state of the software/data at the start of testing.
Example:
Consider an application in which a password field that accepts 3 characters, with no consecutive repeating entries. Hence, there are 26 * 26 * 26 input permutations for alphabets only. Including special characters and standard characters, there are much more combinations. So, there are 256 * 256 * 256 input combinations.
3 Early testing: In the software development life cycle testing activities should start as early as possible and should be focused on defined objectives.
4. Defect clustering: A small number of modules contains most of the defects discovered during pre-release testing or shows the most operational failures.
5. 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 really very important to review the test cases regularly and new and different tests need to be written to exercise different parts of the software or system to potentially find more defects.
6 Absence – of – errors fallacy: If the system built is unusable and does not fulfil the user’s needs and expectations then finding and fixing defects does not help.
7.Testing shows 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 cannot say that the product is 100% defect free. Testing always reduces the number of undiscovered defects remaining in the software but even if no defects are found, it is not a proof of correctness.