Abstract:
How far have we progressed towards automating the design and understanding of computer software7 In particular how goes progress on automating the correct construction of software? Is there evidence of practical improvements in productivity, assurance or performance? Presented here is a very personal viewpoint beginning with with early constructive proofs and precursors of logic programming and then moving through early years of software transformation and refinement. We conclude with discussion of more recent progress in software design knowledge, and the concomitant theory and tools for representing and applying this knowledge, touching on methods of abstract specification, factoring, composition and refinement.