Small-scale structural reengineering of software

William L. Scherlis · 1996

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.

Read the paper · More papers on PaperTik