Issue No. 07 - July (1986 vol. 12)
Software development is a knowledge-intensive activity. A promising approach to improving the efficiency of software development is the construction of a knowledge-based software assistant . Such a system provides the medium of interaction for the development process and enforces the semantic consistency of the program as it evolves from its specification to its implementation. A system that provides automated assistance for program development can do so to the extent to which it embodies knowledge of the programming process and knowledge of the application domain for which the program is written. Programmers have knowledge of how to represent problem-domain objects with the data structure facilities of their programming language, how to implement various search techniques and other programming cliches , the efficiency of various program constructions, and so on. This paper surveys our understanding and formalization of this knowledge. It is presented from the point of view of algorithm design and high-level program optimization. It discusses techniques for data structure selection, the procedural representation of logic assertions, store-versus-compute, finite differencing, loop fusion, and algorithm design methods.
Knowledge based systems, Software, Programming, Data structures, Optimization, Semantics, very-high-level languages, Knowledge-based software development, program optimization, program synthesis, program transformation
"Knowledge-based programming: A survey of program design and construction techniques," in IEEE Transactions on Software Engineering, vol. 12, no. , pp. 752-768, 1986.