Strategic directions in software engineering and programming languages

The computer revolution is based on the ability of a general-purpose machine to carry out a specific task under the control of special-purpose software. While the wide applicability of stock hardware has driven demand up and manufacturing cost per unit dramatically down, the same trends have led to increasing demand for ever more complex software for an astounding variety of uses: computer-aided education, improved business processes, what-if financial planning and analysis, new forms of entertainment, fly-by-wire avionics systems, and innumerable others both known and as yet unknown. Producing quality software systems at reasonable cost is an increasingly serious challenge due to ever-growing economic and societal demands. Moreover, software that cannot be modified, updated, or extended becomes useless, due to changes in its technological, social, and economic context. Successful evolution of software systems is a severe technical and managerial challenge that is only exacerbated by the everbroadening kinds of software that must be produced and changed. The techniques and tools that will be needed for efficient and accurate system development, in the face of increasing system complexity and declining life cycles, require deep, new, and exciting scientific and engineering research. The challenges are staggeringly hard, demanding the best efforts of both the programming language and the software engineering research communities. Specifically, we must use impressive advances in programming languages, compiler technology, and software engineering, balancing the beauty of programming language and compiler theory with the messy, ugly, often not entirely technical problems that arise in building and evolving real software. The synergy between software engineering and programming languages and compilers is not merely desirable—it is essential. With hard work, open minds, and appropriate resources, these two communities can apply existing results to make significant progress in bringing science and engineering together to address the challenges of building and evolving diverse software systems. To clarify the potential for synergy between the communities, consider two examples.

[1]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[2]  M.M. Lehman,et al.  Programs, life cycles, and laws of software evolution , 1980, Proceedings of the IEEE.

[3]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[4]  David Grove,et al.  A Framework for Selective Recompilation in the Presence of Complex Intermodule Dependencies , 1995, 1995 17th International Conference on Software Engineering.

[5]  Joseph Y. Halpern,et al.  On effective axiomatizations of Hoare logics , 1982, POPL '82.

[6]  Joseph Y. Halpern,et al.  Effective Axiomatizations of Hoare Logics , 1983, JACM.

[7]  David Notkin,et al.  An empirical study of static call graph extractors , 1998, TSEM.

[8]  William G. Griswold,et al.  The design of whole-program analysis tools , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[9]  David Lorge Parnas,et al.  Software aging , 1994, Proceedings of 16th International Conference on Software Engineering.

[10]  David Lorge Parnas,et al.  Software Requirements for the A-7E Aircraft. , 1992 .

[11]  Jeannette M. Wing A specifier's introduction to formal methods , 1990, Computer.

[12]  共立出版株式会社 コンピュータ・サイエンス : ACM computing surveys , 1978 .

[13]  William L. Scherlis Boundary and Path Manipulations on Abstract Data Types (Extended Abstract) , 1994, IFIP Congress.

[14]  Analysis and caching of dependencies , 1996, ICFP '96.

[15]  Dan Craigen,et al.  An International Survey of Industrial Applications of Formal Methods , 1992, Z User Workshop.

[16]  Carl A. Gunter,et al.  The machine-assisted proof of programming language properties , 1996 .

[17]  James H. Cross,et al.  Reverse engineering and design recovery: a taxonomy , 1990, IEEE Software.

[18]  P. Lincoln,et al.  Byzantine Agreement with Authentication : Observations andApplications in Tolerating Hybrid and Link Faults , 1995 .

[19]  David Notkin,et al.  Lightweight source model extraction , 1995, SIGSOFT '95.

[20]  B. Hayes,et al.  Waiting for 01-01-00 , 1995 .

[21]  Ken Kennedy,et al.  Analysis of interprocedural side effects in a parallel programming environment , 1988, J. Parallel Distributed Comput..