(0) Identify a concrete class X of programming errors you want to eradicate.
(1) Postulate a mathematical theory of what it means for a program not to have errors of class X.
(2) Develop proof techniques that are powerful enough to establish that “interesting” programs do not have errors of class X.
(3) Design algorithms that use these proof techniques to prove, or at least validate a purported proof, that a program does not have errors of class X. Your algorithm must be able to analyze program fragments (modules, classes, whatever) independently, and combine information obtained from several program fragments without reanalyzing them from scratch.