Exhaustive testing (use of all possible inputs and conditions) is impractical must use a subset of all possible test cases. must have high probability of detecting faults. Need thought processes that help to select test cases more intelligently. test case design techniques are such thought testing: find more faults. focus attention on specific types of fault. know you're testing the right thing. Efficient testing: find faults with less effort. avoid duplication systematic techniques are measurable.