Historically, software testing was the process of exercising a computer program to verify that it performed as required and expected. The strategic goal of software testing was to demonstrate correctness and quality. It is now known that this view of testing is not correct. Testing cannot produce quality software, nor can it confirm correctness. Testing can only verify the presence, not the absence, of software defects. Yet, the difficulty of testing and the impracticality of correctness proofs have often driven us to the dangerous perception that if testing does not find defects, then the software is correct.