Upgradable Software Product Customization by Code Query
Sebastien Vaucouleur · IT University Of Copenhagen (IT University of Copenhagen) · 2009
The professional press on enterprise systems warns its readers: Costly., A return on investment killer. , Be prepared!. What can create some much af- iction and turmoil in an otherwise very successful industry? Come and meet the dreadful upgrade problem. Enterprise systems are prime examples of a subset of software systems that we call software products: software that needs special support for customization. Through customization, external companies can modify part of the original product to better t the needs of a niche market. Upon the release of a new version of the original software product, external companies must port their customizations to the latest version of the base software product, a process called an upgrade. Companies typically consider upgrades as mandatory, and hence must bear their high cost on a regular basis. The objectives of customizability and upgradability are conicting this constitutes the upgrade problem. We study the upgrade problem in the eld of enterprise systems from a technical point of view, and consider the large spectrum of existing software engineering techniques for customization. We ground our work in an empirical study, that shows that customizations cannot be anticipated accurately. This result puts an important constraint on the solution and calls for an approach that complements the traditional customization techniques. We present the novel concept of code query by example, an approach that (a) requires little anticipation, (b) is simple and (c) may be adopted incrementally. Last but not least, this solution makes a subset of customizations amenable to upgrades. The implementation of our prototype is based on bytecode matching and bytecode instrumentation, in a managed .Net environment. We study the advantages, the disadvantages, and the limitations of our approach, both of the concept of code query by example, and of the implementation strategy. Finally, we show how our proposal can be used in other contexts where code query is needed, for example rule-based lightweight static analysis.