Predicting when and how a software system will evolve is one of the most fascinating challenges of software engineering. No matter what approach one is using to study such evolution, empirical studies, including observations of systems used in the real world, and of their processes, are needed in order to define correlations, find recurring patterns, and eventually predict how systems are likely to evolve. In the empirical study presented in this paper, we take 25 software systems released as Open Source1, and observe their evolution. Our focus is not only on how much systems grow in size, but rather on how code structure is adapted and gets modified over time and releases. The goal here is to recognize recurring patterns and practices used in evolving long-lived real world software systems. In our study we find three dominant patterns of code structure evolution of Open Source systems: horizontal expansion, vertical expansion, vertical shrinkag,. By detailed studied of exemplars of these three patterns one can identify under which conditions a particular pattern is more likely to prevail than the others. © 2004 IEEE.
|Status||Published - 2004|