1. Testing is context dependent
We need to do the testing differently for different context. As a example we do test standalone application and webpage in different manner.2. Exhaustive testing is impossible
Testing everything is impossible for most software product (all combination of inputs). Instead of testing everything we can prioritise test cases/ areas base on the risk attach with it.3. Early testing
We should start our testing activities early as possible in the SDLC, need to define objectives and goals and should be focus on to achieving defined objectives.4. Defect clustering
A small number of unit/module/component contains most of the defects reported before the release and found most operational failures after release.5. Pesticide paradox
If we run the same test case again and again, that test case will not find new bugs. To avoid this we need to update/ review/revise test cases regularly. And need to write new test cases to cover different areas where we found most bugs.
6. testing show presence of defect
We can show that defects are present using testing but we can't prove that there aren't defects. Testing reduces the risk of defect leakage but if there are no defect reported won't guarantee the correctness of the software.
7. Absence of errors fallacy
Finding defect and fixing them will not help if the system/software is unstable and doesn't fulfill the customer/user expectations and requirements.