Our newest report, A Review of Formal Methods, examines a topic of increasing interest, formal methods. Formal methods provide a foundation for many of the techniques that have changed the face of software development over the last two decades. Structured programming, top down development, abstract data types, rapid prototyping, object oriented design, and formal inspections all draw on formal methods.
Formal methods imply a distinctive view of software development.
According to this view, the software engineers task is to produce several models or descriptions of a system for an abstract machine, with accompanying proofs that models at lower levels of abstraction correctly implement higher-level models. The job of the hardware engineer, language designer, and compiler writer is to provide a realization suitable for executing the applications developers abstract model, but it is not the application programmers job to twist his logic to fit inadequate physical automata. Only this idealized design process can ensure high levels of quality, not testing. Testing can demonstrate the presence of faults, not their absence. Formal methods involve the essential use of a formal language, that is, a set of strings over some well- defined alphabet.