In the late 1960's people were talking about the promise of programs that verify the correctness of other programs. Unfortunately, in the intervening decades, with precious few exceptions, there is still little more than talk about automated verification systems. In spite of unrealized expectations, though, research on program verification has given us something far more valuable than a black box that gobbles programs and flashes ``good'' or ``bad'' -- we now have a fundamental understanding of computer programming.
The purpose of this column is to show how that fundamental understanding can help real programmers write correct programs. One reader characterized the approach that most programmers grow up with as ``write your code, throw it over the wall, and have Quality Assurance or Testing deal with the bugs.'' This column describes an alternative. Before we get to the subject itself, we must keep it in perspective. Coding skill is just one small part of writing correct programs. The majority of the task is the subject of the three previous columns: problem definition, algorithm design, and data structure selection. If you perform those tasks well, writing correct code is usually easy.
The teaching material contains overhead transparencies based on this column; the slides are available in both Postscript and Acrobat.
Copyright © 1999 Lucent Technologies. All rights reserved. We 10 Oct 1999