Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.

Pattern: Evolving a Framework

You are a software engineer who is responsible for the maintenance and evolution of a framework. Your task may be to evolve the framework to support new requirements, refactoring its design, or the correction of errors, while preserving its backward compatibility.

Problem

To evolve a framework means understanding where the evolution will take place within the framework and to which extent do you need to go. You need to know what elements to evolve and its impact on the framework as a whole.

What do you need to learn to evolve a framework?

Forces

Documentation. The documentation is almost always descriptive, which is not good for framework evolvers, because original framework designers can’t predict how the framework might be extended in the future through additional flexibility on existing hot spots, or in additional hot spots. A more prescriptive documentation would be better.

Maintenance expertise. It is expected that the framework maintainers are both domain experts and software experts.

Evolution task. Your task may be adding new functionalities or improving existing ones, correcting errors or refactoring the design. Different information needs arise according to the task at hand.

Tools. There might be the need to recover lost design information that is important to the evolution task. Existing reverse engineering tools may prove useful.

Solution

Look at the architecture of the framework and understand how it is built and how it meets its purpose. Gain further insight of its components by looking at the design internals and areas of flexibility and treat each variability issue separately.

Have a good UNDERSTANDing of THE ARCHITECTURE and its rationale, in order to avoid the architectural drift problem [CHS97], commonly consequential of poor framework evolution. UNDERSTANDing THE DESIGN INTERNALS and UNDERSTANDing THE APPLICATION DOMAIN helps at keeping the evolution process in perspective. Look at the CUSTOMIZATION POINTS that support the flexibility offered by the framework and plan you evolution tasks.

To be more effective, you may consider to DRIVE YOUR LEARNING according to your experience and specific requirements.

Consequences

Evolution expertise. You gain enough insight to adequately address your evolution tasks. Be alert to issues regarding delta analysis, architectural drifts, version proliferation and over-featuring [CHS97].

Ignorant surgery. Evolving parts of the framework means understanding its interaction with its other parts. Sometimes, focusing too much on the problem at hand may cause what is called “ignorant surgery” [RCM04]. Inadequate investigation prior to performing a change task limits the understanding of the existing design of a system. The evolver performs a change in a single location in the code that is better understood, but which may lead to unforeseen effects throughout the framework as its dependencies aren’t properly identified and taken into account.

Rationale

The need to evolve a framework usually arises during any of the following situations [CHS97]:

  1. new domain concepts need to be incorporated into the framework,
  2. reducing the complexity of the framework through re-design and
  3. initial design issues that were neglected need to be addressed.

The evolution process usually involves the execution of two tasks: restructure (refactoring) and extension. In order to restructure it properly, the developer must be aware of all the repercussions and dependencies of the components or customization areas she intends to extend or alter. Another concern is application compatibility. The framework must remain compatible with earlier developed applications, whereas a faulty evolution process may change the way the framework is supposed to be used, closing otherwise opened customization points. By understanding how the framework is supposed to be used will enable the developer to maintain its interface coherent, without too much effort.

See also

In [RJ96], Roberts and Johnson present a pattern language for evolving frameworks where they show that there is need for the understanding of different levels of detail concerning the framework components.

In [CFL06], Cortés et al. present a tool to support framework evolution tasks, namely refactoring and extension. They propose to automate certain kinds of refactoring tasks and applying extension rules based on Pree’s meta-patterns, which implement variation points as a combination of template and hook methods.

fudocs/evolvingaframework.txt · Last modified: 2015/07/22 20:35 (external edit)
Trace: evolvingaframework
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0