triple which can be hierarchically organized. The
proposed specification has a favorable influence on
other issues like evolution management, including
evolution styles matching and classification, but this
is not discussed in this paper.
The remainder of this paper is organized as follows:
in the next section (sec. 2) we discuss the keys ideas
of our proposal. Section 3 describes the modeling en-
vironment we adopted to support the evolution style
approach. In section 5 we show how a well-known
refactoring can be revisited as an evolution style, be-
fore we conclude in section 6.
2 STYLES FOR SOFTWARE
EVOLUTION
In this section we introduce the foundation of our
work. We mainly describe the benefits of the reifi-
cation of evolution as a first-class entity, the modular
specification format chosen and the possible organi-
zations and capabilities of evolution styles.
2.1 Evolution as First-class Entity
According to us, the evolution features of a software
system being built must be analyzed and designed
separately from business features, in order to promote
reuse following two complementary axis. First, our
objective is to extract and modularize evolution, that
is, to capture the structure, behavior and the semantics
of evolution. As such, an evolution style encapsulates
important design decision about evolution, as pro-
moted by the principle of information hiding. Evolu-
tion styles factor commonalities between evolutions,
just like classes do for objects in the object-oriented
development. More precisely, they capture the param-
eters, assertions and implementation shared by sev-
eral evolutions. They express semantics of refactor-
ing and other changes. This last point is important
because we are convinced that stakeholders and tools
must be aware of meaning of evolution to work ef-
fectively. Thus, grouping evolutions into styles helps
avoid the specification and storage of much redun-
dant information and hence constitutes the first axis
of reuse. The second axis of reuse extends the in-
formation hiding capability one step further. The key
idea is to support fragmentation and extension of evo-
lution. Practically, the composition and inheritance
mechanisms encourage this kind of reuse and lead to
treat evolution on a hierarchical basis.
2.2 Evolution Style Specification
The evolution style specification is motivated by
the “componentization” of patterns and influenced
by Knowledge-based systems (KBS) (Oussalah,
2002). The proposed three-parts specification to
address evolution question is the convergence of the
Context-Problem-Solution triple defined by patterns
(Erich GAMMA and VLISSIDES, 1995) and the
Domain-Task-PSM
1
triple defined by KBS.
Let us make a closer examination of the three compo-
nents constituting an evolution style:
• Domain: evolution depends on an area of knowl-
edge specified by a set of concepts and links
among them. It corresponds to a domain model
and hence defines a vocabulary through a set of
types. The instantiation of a domain engenders an
application able to be evolved.
• Header: evolution can be defined by a contract
which stipulates the starting situation and the re-
sulting one. It is specified by inputs/outputs pa-
rameters typed with elements of the domain, plus
a set of assertions (post/pre-conditions, invariants)
as constraints for the evolution achievement.
• Competence: evolution contains a body of knowl-
edge to fulfill the evolution contract, that is, to en-
sure the morphing from the starting situation to
the resulting one. It can be specified by a block of
declarative or imperative instructions. The choice
is driven by the desired abstraction level.
The three points mentioned above can be described
formally and be clearly modularized as three indepen-
dent but complementary components. An evolution
style has a unique name, has a goal described in nat-
ural language, and is viewed as the aggregation (with
the object meaning) of a domain component, a header
component and optionally a competence component.
This partitioning promotes (a) description reuse be-
cause the components are quite interchangeable and
shareable by several styles at the same time, and (b)
flexibility because the competence component can be
omitted when not enough information is available. In
this last case, we deal with abstract evolution styles.
2.3 Evolution Style Topologies
The evolution styles are arranged and linked to form a
graph or topology. The nodes are evolution styles and
the edges between two nodes represent specialization
1
Problem Solving Method
EVOLUTION STYLES IN PRACTICE - Refactoring Revisited as Evolution Style
139