Software Specialization Via Symbolic Execution

A technique and an environment-supporting specialization of generalized software components are described. The technique is based on symbolic execution. It allows one to transform a generalized software component into a more specific and more efficient component. Specialization is proposed as a technique that improves software reuse. The idea is that a library of generalized components exists and the environment supports a designer in customizing a generalized component when the need arises for reusing it under more restricted conditions. It is also justified as a reengineering technique that helps optimize a program during maintenance. Specialization is supported by an interactive environment that provides several transformation tools: a symbolic executor/simplifier, an optimizer, and a loop refolder. The conceptual basis for these transformation techniques is described, examples of their application are given, and how they cooperate in a prototype environment for the Ada programming language is outlined. >

[1]  Joseph E. Stoy,et al.  Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory , 1981 .

[2]  Andrei P. Ershov,et al.  On the Partial Computation Principle , 1977, Inf. Process. Lett..

[3]  Peter Sestoft,et al.  An experiment in partial evaluation: the generation of a compiler generator , 1985, SIGP.

[4]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[5]  Franco Turini,et al.  Symbolic Semantics and Program Reduction , 1985, IEEE Transactions on Software Engineering.

[6]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

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

[8]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[9]  Michael J. C. Gordon,et al.  The Denotational Description of Programming Languages , 1979, Springer New York.

[10]  Ralf Steinbrüggen,et al.  Program Transformation Systems , 1983, CSUR.

[11]  Valentin F. Turchin,et al.  The concept of a supercompiler , 1986, TOPL.

[12]  Annalisa Bossi,et al.  A method for specializing logic programs , 1990, TOPL.

[13]  James C. King,et al.  Symbolic execution and program testing , 1976, CACM.

[14]  Carlo Ghezzi,et al.  Program Simplification via Symbolic Interpretation , 1985, FSTTCS.

[15]  Ted J. Biggerstaff,et al.  Software reusability: vol. 1, concepts and models , 1989 .

[16]  Michael J. C. Gordon,et al.  The denotational description of programming languages - an introduction , 1979 .

[17]  Henry Ledgard,et al.  Reference Manual for the ADA® Programming Language , 1983, Springer New York.

[18]  Richard A. Kemmerer,et al.  Unisex: A unix‐based symbolic executor for pascal , 1985, Softw. Pract. Exp..

[19]  Richard N. Taylor,et al.  Rethinking the taxonomy of fault detection techniques , 1989, ICSE '89.

[20]  Andrei P. Ershov,et al.  Mixed Computation: Potential Applications and Problems for Study , 1982, Theor. Comput. Sci..

[21]  Flavio De Paoli,et al.  SESADA: An Environment Supporting Software Specialization , 1991, ESEC.

[22]  David Lorge Parnas,et al.  On the Design and Development of Program Families , 2001, IEEE Transactions on Software Engineering.