This paper presents a set of refactorings for UML models and explains how they can be designed so as to preserve the behavior the model. Some of these refactorings are illustrated with examples.
Software developers spend most of their time modifying and maintaining existing products. This is because systems and consequently their design, are in perpetual evolution before they die. Nevertheless, dealing with this evolution is a complex task. Before evolving a system, structural changes are often required. The goal of this kind of change is to make certain elements more extensible, permitting the addition of new features. However, designers are seldom able to evaluate the impact, on the whole model, of a single change. That is, they cannot precisely verify if a change modifies the behavior of the modeled system. A possible solution for this problem is to provide designers with a set of basic transformations, which can ensure behavior preservation. These transformations, also known as refactorings, can then be used, step by step, to improve the design of the system.