In this thesis, we present a method to systematically perform software evolution. The focus is set on the early phases, i.e., analysis and design.
The basic idea is to adjust an existing software development process so that evolution is supported. We propose to perform a replay of the original method, adding some support for software evolution. We achieve this by defining a corresponding evolution step for every existing step of the original process. These evolution steps address the special needs arising in software evolution by providing evolution operators. The operators define rules, i.e., what has to be done in order to incorporate the requested changes into the existing documents or to create, when necessary, additional ones by defining pre- and post-states for the used model. Hence, the operators assist engineers in evolving given documents. They also help in the reuse of related development documents in successive development phases. However, a complete replay of the process steps for all model elements is not desirable. Only model elements that may be affected by the evolution task should be considered. Therefore, it is necessary to locate the relevant parts within the overall system that need to be modified or where additions are necessary. To identify those relevant parts, we establish relations between the existing requirements and those being introduced by the evolution task. We then tag the relevant documents. This enables us to decrease the effort for performing the evolution by determining only a subset of relevant documents that have to be considered.
We illustrate the applicability of our approach by a simple vacation rentals system serving as running example. Furthermore, we illustrate how the architecture approach used in the evolution method can be enhanced by introducing evolution patterns for layered software architectures and derive architectures adhering to a specific kind of design pattern based on the software architecture derived in the early stages of the design phase.