Unanticipated Software Evolution
Günter Kniesel, Robert E. Filman · Journal of Software Maintenance and Evolution Research and Practice · 2005
Unanticipated Software EvolutionIn building a computer system, it is possible to anticipate some ways in which the system's requirements might evolve, leaving hooks and other build-in variation points in the design and implementation to accommodate such possible changes.However, predicting the future is notoriously difficult.Most of the expense and technical complications of software evolution comes from changes not anticipated in the original design.Does this mean that system developers are defenseless in the face of unanticipated changes?Not completely.There are a set of emerging technologies that recognize the inevitability of unanticipated changes in software systems and work to accommodate such changes.This special issue is dedicated to the emerging topic of Unanticipated Software Evolution (USE), exploring mechanisms to adapt to unanticipated needs in software systems.Clever techniques in areas such as software development processes, programming languages and environments and run-time infrastructures can ease the task of evolving a software system in ways not thought about by its original creators.Without USE technology, unanticipated changes often force software engineers to do what they do now: perform extensive and expensive invasive modification of existing designs and code.USE technology offers the promise of being able to do more automatically, often dynamically and with greater certainty of success.This issue contains three of the best papers of the 2002 and 2003 Workshops on Unanticipated Software Evolution (http://joint.iai.uni-bonn.de/use).The first paper, 'Towards a taxonomy of software change' by Buckley et al. is a new look at how software systems might be evolved.It proposes a taxonomy of software change based on characterizing the mechanisms of change and the factors that influence these mechanisms.It provides a framework for comparing existing evolution approaches, evaluating the relevant tools, methods and formalisms for a particular change scenario and identifying topics for future research.Software evolution is about changing something and often the most convenient quantum of change is some sort of programming module.Our second paper, 'KERIS: evolving software with extensible modules', by Zenger, presents an extension to Java focused on hierarchically composed, extensible modules.Modules are a 'coarse grain' of change.A key idea of KERIS is that rather than having the programmer explicitly detail the module linking, module interaction paths are automatically inferred.KERIS allows extensions of already linked systems by replacing selected submodules with compatible