According to International Software Testing Qualification Board there are seven principles that should be considered when developing the testing strategy for a software product.
By testing you can show presence of defects in a product but you can never prove that the product under test is defect free.
Testing all possible scenarios (all combinations of preconditions and inputs) is not feasible. Techniques like risk analysis should be used to prioritize and focus the testing efforts.
The testing activities should be started as early as possible during the software or system development life cycle. The cost to fix a bug increases exponentially if the bug is found in a later phase of the development life cycle.
In a project, a small number of the module can contain most of the defects. Pareto Principle to software testing state that 80% of software defect comes from 20% of modules.
The test cases should be reviewed and updated on regular basis. New tests should be developed to exercise new parts of the software or system. If this is not done and the same tests are repeated again and again eventually no new bugs will be found, but this does not mean that the system is defect free. Testing should focus on continuous improvement during the complete development life cycle.
The testing approach depends on the context of the software developed. Different types of software need to perform different types of testing. For example, The testing of the e-commerce site is different from the testing of the Android application.
If a systems does not fulfill the user needs and expectations then having a bug free system does not help. Functional testing and a deep understanding of the customer expectations is a must during the development life cycle.