There is no limit to how much testing we could do. We cannot test everything, exhaustive testing (testing all combinations of inputs and preconditions) is impractical, so we must prioritise. It is easy enough to identify far more test cases than we will ever have time to execute so we need an approach to selecting a subset of them. Selecting test cases at random is not an effective strategy. We need to use a more intelligent approach that helps identify which tests are most important. In short, we must prioritize our tests.
Prioritize tests so that whenever you stop testing you have done the best testing in the time available.
How to prioritize
The principle is that we must adopt a prioritization scheme for selecting some tests above others. As we start from highest priority and scan the tests in decreasing order of priority, there must be a point at which we reach the first test that is of too low a priority to be done. All tests of a lower priority still are de-scoped. There are many different criteria that can be used to prioritize tests and they can be used in combination. Possible ranking criteria include the following:
- Ask the end-user to prioritize the requirements (and test those first)
- Test first the areas of the software that have had most faults in the past
- Test most those areas of the software that are most complex or critical.
- Tests that would find the most severe failures.
- Tests that would find the most visible failures.
- Tests that would find the most likely faults.