There are 7 basic software testing principles.
Principle 1: Testing shows Testing can show that defects are present, the presence of defects but cannot prove that there are no defects. Testing reduces the probability of undiscovered defects remaining in the software but, even if no defects are found, it is not a proof of correctness.
Principle 2: Exhaustive testing Testing everything (all combinations of is impossible inputs and preconditions) is not feasible
except for trivial cases. Instead of exhaustive testing, we use risks and priorities to focus testing efforts.
Principle 3: Early testing Testing activities should start as early as possible in the software or system development life cycle and should be focused on defined objectives.
Principle 4: Defect clustering A small number of modules contain most of the defects discovered during pre-release testing or show the most operational failures.
Principle 5: Pesticide paradox If the same tests are repeated over and over again, eventually the same set of test cases will no longer find any new bugs. To overcome this ‘pesticide paradox’, the test cases need to be regularly reviewed and revised, and new and different tests need to be written to exercise different parts of the software or system to potentially find more defects.
Principle 6: Testing is context Testing is done differently in different dependent contexts. For example, safety-critical software is tested differently from an e-commerce site.
Principle 7: Absence-of-errors Finding and fixing defects does not help if fallacy the system built is unusable and does not fulfill the users’ needs and expectations.
Source: Foundation of Software Testing book by Dorothy Graham, Erik van Veenendaal, Isabel Evans, and Rex Black: a nice book to read.