It is shown that some beliefs about program testing are incorrect. A new notion of correctness, conditional correctness, is defined. It is then shown that conditional correctness, which can in principle be achieved by testing, is not accomplished by such methods as "testing all branches" or "testing all paths". The latter method is proven to be not only insufficient but also highly redundant. Rules for establishing conditional correctness by testing are given and illustrated by an example.