The International Software Testing Qualifications Board (ISTQB) provides a set of principles that serve as fundamental guidelines for software testing. These principles are outlined in the ISTQB Certified Tester Foundation Level (CTFL) syllabus. The principles are as follows:
Testing shows the presence of defects: Testing is a process of finding defects in software. It does not prove the absence of defects. It is essential to understand that testing cannot guarantee that the software is defect-free, but it can identify issues and improve software quality.
Exhaustive testing is impossible: It is practically impossible to test all possible combinations of inputs, conditions, and scenarios. Testing aims to provide a reasonable level of confidence by selecting a subset of test cases that offer the most value and coverage.
Early testing: Testing should start as early as possible in the software development life cycle. Detecting and addressing defects in the early stages of development is more cost-effective and reduces the likelihood of defects propagating to later phases.
Defect clustering: In practice, defects tend to cluster in specific modules or components of the software. Focusing testing efforts on these areas is often more effective in identifying defects.
Pesticide paradox: Over time, the same set of test cases may become less effective in finding new defects. To overcome this, test cases need to evolve and be updated to find new defects.
Testing is context-dependent: Testing strategies and techniques should be adapted to the specific context of the project, including its objectives, risks, and constraints.
Absence-of-errors fallacy: The absence of reported defects does not necessarily mean the software is of high quality or error-free. It is essential to recognize that not finding defects in a particular test does not guarantee their absence.
Automated testing and manual testing: Both automated and manual testing have their advantages and limitations. The choice of which to use depends on the project’s needs and goals.
Testing is a risk-based activity: Testing should be focused on the areas of the software that pose the most significant risks. Risk-based testing ensures that testing resources are allocated where they can have the most impact on quality.
Testing and quality assurance are not the same: Quality assurance encompasses a broader set of activities beyond testing, including process improvement, standards, and management activities that aim to ensure quality in software development.