Small-scale structural reengineering of software

Programmers often face the difficulty of having to make small-scale structural design decisions early in the software process, well before the consequences of those decisions can be understood. For example, what is the right balance between efficiency and modularity for a particular bit of code? Should an integrity check be located at the callee site or at all the caller sites? When should copying be done to assure the structural integrity of a private data structure in an encapsulation? In practice, once structural commitments are made, they can be very difficult to revise. But this brittleness is not a necessary attribute of software, and we suggest that semantics-based program analysis and manipulation techniques can offer a way for programmers to retain structural flexibility. This short paper illustrates several cases where structural manipulations support reengineering and enable deferal or revision of structural decisions. These include a year-2000 scenario and a summary of a larger derivation of the two Java base classes for mutable and immutable strings from simple C “strings.” A principal open issue is whether analysis and manipulation techniques such as these, which operate on small-scale architectural features, can effectively scale up to larger aggregations and major software architectural decisions.

[1]  Mary Shaw,et al.  An Introduction to Software Architecture , 1993, Advances in Software Engineering and Knowledge Engineering.

[2]  William G. Griswold,et al.  Automated assistance for program restructuring , 1993, TSEM.

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

[4]  Robert O'Callahan,et al.  Practical Program Understanding with Type Inference. , 1996 .

[5]  Joseph A. Goguen,et al.  Putting Theories Together to Make Specifications , 1977, IJCAI.

[6]  Gregor Kiczales,et al.  Beyond the Black Box: Open Implementation , 1996, IEEE Softw..

[7]  Stephen J. Garland,et al.  Larch: Languages and Tools for Formal Specification , 1993, Texts and Monographs in Computer Science.

[8]  Don S. Batory,et al.  Scalable software libraries , 1993, SIGSOFT '93.

[9]  Yang Meng Tan,et al.  LCLint: a tool for using specifications to check code , 1994, SIGSOFT '94.

[10]  William L. Scherlis,et al.  Abstract Data Types, Specialization, and Program Reuse , 1986, Advanced Programming Environments.

[11]  Donald Cowan,et al.  Abstract Data Types , 1987, Wiley Encyclopedia of Computer Science and Engineering.

[12]  R. Lathe Phd by thesis , 1988, Nature.