Let us start by understanding the term ‘software testing’. Software testing is the process of evaluating a software program. It has two basic objectives-checking for correlation between the desired outcome and the real outcome of the software program and detecting any bugs in the program which may hinder its proper functioning. Software testing determines if the program is working as it really should. Before deploying a program it is imperative to test it to ensure its effectiveness.
There are many different testing models like Waterfall, V model, Spiral model and Agile model. Each model is suitable for detecting a particular defect and each has its own merits and demerits. Some techniques are structure-based, some are specification-based while some others are experience-based. Choosing the right testing technique for a product is a complex task. Here is an exhaustive list of factors to consider when choosing a testing technique:
• Assessment of the risk involved – The greater the risk involved the greater the need for more thorough testing. For example, medical and financial sectors are high-risk areas so a product meant for them should be thoroughly tested. Commercial risk may be influenced by quality issues (so more thorough testing would be appropriate) or by time-to-market issues (so exploratory testing would be a more appropriate choice). For smaller projects with high risk, Agile testing may be preferred. For large projects with high risk, spiral testing is the best.
• Requirements of client - Sometimes a client may demand a specific testing technique for his product.
• Type of system used by the program - The type of system (e.g. embedded, graphical, financial, etc.) will influence the choice of techniques. For example, a financial application involving many calculations would benefit from boundary value analysis.
• Time and budget constraints - Ultimately how much time there is available will always affect the choice of testing techniques. When more time is available we can afford to experiment with different testing techniques and when time is limited we will be limited to those that we know have a good chance of helping us find just the most important defects. A large project that is developed over a longer timeline requires Waterfall or V-model. For a smaller project, that requires the phases to progress quickly, and is based on a dynamic development method, the Agile testing model would be a better option.
• Guidelines prescribed by the industry - All industries have internationally-accepted regulatory standards or guidelines that govern the testing techniques used. The chosen testing technique should fulfill all these requirements. For example, the aircraft industry requires the use of equivalence partitioning, boundary value analysis and state transition testing for high integrity systems together with statement, decision or modified condition decision coverage depending on the level of software integrity required.
• Sufficiency of documentation - What type of testing documentation exists for a product; in what form it exists and whether it is updated or not influence the choice of testing technique. If the testing documentation exists and is updated it is of great help in deciding the best course of action for the tester. The content and style of the documentation will also influence the choice of techniques (for example, if decision tables or state graphs have been used then the associated test techniques should be used).
• Objective of the test – Objective of s test can be detection of a particular ‘bug’ in the product through the test; verification and validation of the product; gaining confidence that the product will be able to cope with typical operational tasks. Objective of the test will determine which technique is best suited. For example a software product meant to be used by the handicapped should be tested for accessibility.
• Software development lifecycle – Testing is an ongoing process. Each stage of application development demands different type of testing technique. So the software development lifecycle is a deciding factor in choosing testing methodology. A sequential life cycle model will lend itself to the use of more formal techniques whereas an iterative life cycle model may be better suited to using an exploratory testing approach.
• Models used in developing the system - Since testing techniques are based on models used to develop that system, they will to some extent govern which testing techniques can be used. if the specification contains a state transition diagram, state transition testing would be a good technique to use.
• Experience of the tester - Choosing the right testing methodology is a matter of experience. A knowledgeable and experienced tester can accurately decide the testing technique suitable for a program. This will help developer and vendor to save up on time and money.
• Need for flexibility - A project might require some modifications along the way so it would require a testing methodology which has ample flexibility. Some testing models like the Waterfall and V model have little flexibility. Agile model has most flexibility.
Choosing the right testing technique is not child’s play. It is an essential part of application development and it has far-reaching implications. Therefore, choice of testing technique should be done carefully keeping all the above factors in perspective.