How to choose that which technique is best? This is the wrong question!
Each technique is good in its own way in finding out the certain kind of defect, and not as good for finding out the other kind of defects. For example, one of the benefits of structure-based techniques is that they can find out the defects or things in the code that aren’t supposed to be there, such as ‘Trojan horses’ or other malicious code.
However, if there are parts of the specification that are missing from the code, only specification-based techniques will find that, structure-based techniques can only test what is there.
If there are things missing from the specification and from the code, then only experience based techniques would find them.
Hence, each individual technique is aimed at particular types of defect. For example, state transition testing is unlikely to find boundary defects.
So, how to choose which testing technique is best, decision will be based on a number of factors, both internal and external.
The internal factors that influence the decisions about which technique to use are:
- Models used in developing the system– Since testing techniques are based on models used to develop that system, will to some extent govern which testing techniques can be used. For example, if the specification contains a state transition diagram, state transition testing would be a good technique to use.
- Testers knowledge and their experience – How much testers know about the system and about testing techniques will clearly influence their choice of testing techniques. This knowledge will in itself be influenced by their experience of testing and of the system under test.
- Similar type of defects – Knowledge of the similar kind of defects will be very helpful in choosing testing techniques (since each technique is good at finding a particular type of defect). This knowledge could be gained through experience of testing a previous version of the system and previous levels of testing on the current version.
- Test objective – If the test objective is simply to gain confidence that the software will cope with typical operational tasks then use cases would be a sensible approach. If the objective is for very thorough testing then more rigorous and detailed techniques (including structure-based techniques) should be chosen.
- Documentation – Whether or not documentation (e.g. a requirements specification) exists and whether or not it is up to date will affect the choice of testing techniques. 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).
- Life cycle model used – 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.
The external factors that influence the decisions about which technique to use are:
- Risk assessment – The greater the risk (e.g. safety-critical systems), the greater the need for more thorough and more formal testing. 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).
- Customer and contractual requirements – Sometimes contracts specify particular testing techniques to use (most commonly statement or branch coverage).
- Type of system used – 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.
- Regulatory requirements – Some industries have regulatory standards or guidelines that govern the testing techniques used. 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.
- Time and budget of the project – Ultimately how much time there is available will always affect the choice of testing techniques. When more time is available we can afford to select more techniques and when time is severely limited we will be limited to those that we know have a good chance of helping us find just the most important defects.