The main purposes in writing this paper are to discuss the importance of formal specifications and to survey a number of promising specification techniques. The role of formal specifications both in proofs of program correctness, and in programming methodologies leading to programs which are correct by construction, is explained. Some criteria are… (More)
Programming languages, database systems and artificial intelligence systems all have the notion that entities can be classified into <italic>types</italic>. As might be expected, however, the usage of the notion of type is not the same throughout or even within these areas. In this paper, I propose a notion of typing that is derived from work on programming… (More)
Requirements definition is the tip of the iceberg of system s development. While it is intended to capture the mos t important aspects of what the user of the system will see, i t must also interface with the further steps of the syste m development process. In particular, because the requirements capture the most important properties of the system , those… (More)
Suitable modularization is a good programming practice. It permits parallel development of modules, component testing as the pieces are completed, and simpler maintenance. Achieving these properties depends on defining clean interfaces and minimizing the dependencies between modules.