<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Analyzing Behavioral Refactoring of Class Models</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Wuliang Sun</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Robert B. France</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Indrakshi Ray</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Colorado State University</institution>
          ,
          <addr-line>Fort Collins</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Software modelers refactor their design models to improve design quality while preserving essential functional properties. Tools that allow modelers to check whether their refactorings preserve specified essential behaviors are needed to support rigorous model evolution. In this paper we describe a rigorous approach to analyzing design model refactorings that involve changes to operation specifications expressed in the Object Constraint Language (OCL). The analysis checks whether the refactored model preserves the essential behavior of changed operations in a source design model. A refactoring example involving the Abstract Factory design pattern is used in the paper to illustrate the approach.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        In Model-Driven Development (MDD) projects, one can expect design models
to evolve as developers explore design spaces for high quality solutions. Class
models are among the most popular models used in practice and given their
pivotal roles, there is a need to manage their evolution. Software refactoring
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ][
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] is an important class of changes that is applicable to class models. The
goal of a refactoring is to improve software qualities such as maintainability
and extensibility, while preserving essential structural and behavioral
properties. A number of model refactoring mechanisms have been proposed (e.g., see
[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ][
        <xref ref-type="bibr" rid="ref5">5</xref>
        ][
        <xref ref-type="bibr" rid="ref12">12</xref>
        ][
        <xref ref-type="bibr" rid="ref19">19</xref>
        ][
        <xref ref-type="bibr" rid="ref20">20</xref>
        ][
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]), and many (e.g., see [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ][
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]) provide support for checking
whether structural properties are preserved in refactored models. However, we
are not aware of any approach that supports rigorous analysis of behavioral
properties when operation specifications in class models are added, removed, or
modified. In this paper we describe a rigorous approach to analyzing the
refactoring of design class models that involve changes to operation specifications
expressed in the Object Constraint Language (OCL) [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
      </p>
      <p>The model on which a refactoring is performed is called the source model,
and the model produced by the refactoring is called the refactored model. A
refactoring that involves making changes to operation specifications is called
a behavioral refactoring. In this paper, we present an approach to analyzing
behavioral refactorings to check that changes to operation specifications preserve
the net effect of the operation (i.e., its essential behavior) as specified in the
source model. The net effect of an operation can be expressed using the OCL
pre-/post-conditions.</p>
      <p>As an example, consider a case in which the operation F lightM anager ::
bookF light() in a flight reservation system class model is refactored into the
following four operations in the refactored model: Airline :: getAvailableF lights()
returns all flights that are available on a given day and airport, F light :: getAvaila−
bleSeats() returns all seats that are available on the flight on a given day and
airport, F light :: reserveSeat() reserves a seat on the flight, and F lightM anager ::
bookF light() books a flight by calling the previous three operations. The net
effect of the F lightM anager :: bookF light() operation in the source model is
specified using an OCL pre-/post-condition stating that if there exists available
flight seats, at the end of the operation execution a seat will be reserved by a
flight manager. The behavioral refactoring performed on the source model
redistributes the functionality of F lightM anager :: bookF light() across different
classes (i.e., Airline, F light, and F lightM anager). It is tedious to manually
determine if the above behavioral refactoring preserves the net effect of the
original operation because it involves manually building a description of the global
net effect of a behavior by composing operation specifications that define
subbehaviors in local contexts (i.e., classes in which the operations are located).</p>
      <p>The above motivates the need for an automated analysis technique that
supports rigorous analysis of behavioral refactorings. In the approach described in
this paper, an analysis of a behavioral refactoring involves determining whether
a sequence of operations in the refactored model preserves the net effect of an
operation in the source model. The net effect of a source model operation is
preserved by a sequence of refactored operations if the sequence starts in all the
states that satisfy the pre-condition of the source model operation, and leaves
the system in a state that satisfies the post-condition of the source model
operation. The analysis approach requires the software modeler who performed the
behavioral refactoring to provide a sequence diagram that describes the sequence
of refactored operations. The approach takes the sequence of refactored
operations, applies all the states that satisfy the pre-condition of the source model
operation, and checks if the sequence of refactored operations produces any state
that does not satisfy the post-condition of the source model operation. The net
effect of the source model operation is not preserved by a sequence of refactored
model operations if the sequence of refactored model operations starts in a state
that satisfies the pre-condition of the source operation and produces a state that
does not satisfy the post-condition of the source model operation.</p>
      <p>
        The Alloy Analyzer [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] is used at the back end to statically analyze a
behavioral refactoring. The analysis involves using the Alloy trace mechanism to
determine whether operations in the refactored model can preserve the net
effect of a changed operation specification in the source model. Since the Alloy
Analyzer requires users to specify a bounded scope for each class, that is, the
maximum number of instances that can be produced for a class, the analysis is
performed within a bounded scope of class objects. The approach uses a
UMLto-Alloy transformation to shield the software modeler from the “back-end” use
of the Alloy Analyzer. Our transformation extends prior work on transforming
UML to Alloy models [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ][
        <xref ref-type="bibr" rid="ref3">3</xref>
        ][
        <xref ref-type="bibr" rid="ref7">7</xref>
        ][
        <xref ref-type="bibr" rid="ref11">11</xref>
        ][
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] by providing support for transforming a
class model and a sequence diagram to an Alloy model that specifies behavioral
traces.
      </p>
      <p>The approach described in the paper is lightweight in that (1) it does not
expose the modeler to any formal notation other than the OCL, and (2) the net
effect preservation analysis is checked within a bounded domain. More
heavyweight formal analysis techniques are needed in a setting where the net effect
preservation checking requires more exhaustive analysis.</p>
      <p>The rest of the paper is organized as follows. Section 2 provides an overview
of the approach and Section 3 illustrates its use on a small example. Section
4 presents a research prototype to support the analysis approach. Section 5
describes related work, and Section 6 concludes the paper.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Approach Overview</title>
      <p>The analysis approach is used to determine whether the net effect associated with
a behavior specified in a source model can be preserved by distributed behaviors
specified in a refactored class model. The net effect preservation property that
is checked is defined as follows:</p>
      <p>Definition 1: Net Effect Preservation. A sequence of operation invocations,
OpSeq, in a refactored model is said to preserve the net effect of an
operation, Op0, in the source model if the set of net effects (i.e., start and end system
states associated with an operation invocation) characterized by the specification
of Op0 is included in the set of net effects (i.e., start and end system states
associated with a sequence of operation invocations) characterized by the sequence
OpSeq. More precisely, a set of operations specified in a refactored model, {Op1,
Op2, ..., OpN }, is said to preserve the net effect of an operation Op0 specified in
the source model if there exists an invocation sequence of the refactored model
operations, OpSeq = [Op1; Op2; ...; OpN ], such that the following holds:
1. OpSeq starts in all the states that satisfy the pre-condition of Op0.
2. If OpSeq starts in a state that satisfies the pre-condition of Op0 then the
sequence of operation invocations leaves the system in a state that satisfies
the post-condition of Op0.</p>
      <p>The analysis approach requires a software modeler to provide the following
as inputs:
1. The specification of the source model operation, Op0, that is refactored.
2. The result of a refactoring (i.e., a refactored class model), and a sequence
diagram that describes how Op0’s redistributed behavior is used. The
sequence diagram provides the sequence of refactored operations that will be
analyzed against the source model specification of Op0.</p>
      <p>The intermediate output of the approach is an analyzable model that can be
used to check the net effect preservation property between Op0 and OpSeq. In
this approach, the analyzable model takes the form of an Alloy model that is
produced from (1) the refactored class model, and (2) a sequence diagram that
describes OpSeq.</p>
      <p>The specifications for Op0 and the operations involved in OpSeq are also
included in the Alloy model. The inclusion of Op0 in an Alloy model produced
from the refactored class model can be problematic when Op0 refers to elements
not included in the refactored model. For this reason the first step of the
approach checks that the elements referenced in the Op0 operation specification
also appear in the refactored model.</p>
      <p>
        The second step of the approach generates the base Alloy model that is
extended in following steps to check the preservation property. We use a
UMLto-Alloy transformation that builds upon our previous work on rigorous analysis
of UML class models [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>The third step of the approach takes as input the specification of Op0 and
a sequence diagram, and produces an Alloy assertion (or predicate) that is used
to determine whether the sequence described in the sequence diagram (OpSeq)
preserves the net effect of Op0. The assertion (or predicate) is added to the Alloy
model generated in the second step of the approach. If a check of the assertion
(or predicate) by the Alloy Analyzer produces an Alloy instance then the net
effect specified by Op0 cannot be preserved by the operation sequence.</p>
      <p>
        More details on the major steps of the approach can be found in [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ].
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>An Illustrating Example</title>
      <p>
        A maze game class model from [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] (see Figure 1) is used in this paper to illustrate
the analysis approach. The M azeGame class is responsible for creating different
types of mazes (e.g., BombedM aze and EnchantedM aze) and their parts (e.g.,
RoomW ithBomb and EnchantedRoom). A maze room consists of four sides
that can be doors, walls, or other rooms.
      </p>
      <p>The operation createBombedMaze() in class M azeGame is used to create a
bombed maze that consists of four walls. Its net effect in the form of OCL
specification is given below:</p>
      <sec id="sec-3-1">
        <title>Context MazeGame::createBombedMaze() : BombedMaze</title>
        <p>// Pre-condition: no maze has been created</p>
        <sec id="sec-3-1-1">
          <title>Pre: self.maze→isEmpty()</title>
          <p>
            // Post-condition: a bombed maze has been created, and it includes a room
// with four walls
Post: result.oclIsNew() and self.maze.bRooms→size() = 1 and
self.maze.bRooms→forAll(r : RoomWithBomb | r.bwalls→size() = 4)
If a new type of maze, maze room, door or wall were added, the structure of the
class model would need to be changed significantly. Incorporating the Abstract
F actory pattern [
            <xref ref-type="bibr" rid="ref6">6</xref>
            ] into the class model results in a more flexible design in which
the maze creation responsibilities are localized in factories that the M azeGame
class can access.
          </p>
          <p>Fig. 1: Maze Game Class Model</p>
          <p>Fig. 2: Refactored Maze Game Class Model
createM aze(f : M azeF actory) : M aze operation, that uses a factory to create
a specific type of maze. The net effects of the original operations in M azeGame
need to be preserved by the behavioral refactoring. The analysis approach
described in this paper can be used to check if the net effect of createBombedM aze
is preserved by relevant operations in the refactored model.</p>
          <p>The OCL specifications for createM aze and addRoom are given below:</p>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>Context MazeGame::createMaze(f:MazeFactory) : Maze</title>
        <p>// Pre-condition: a maze factory has been associated with a maze game</p>
        <sec id="sec-3-2-1">
          <title>Pre: self.factory→includes(f)</title>
          <p>Post: true</p>
        </sec>
      </sec>
      <sec id="sec-3-3">
        <title>Context Maze::addRoom(r:Room)</title>
        <p>// Pre-condition: a room has not been associated with a maze</p>
        <sec id="sec-3-3-1">
          <title>Pre: self.mazeRooms→excludes(r)</title>
          <p>// Post-condition: a room has been associated with a maze</p>
        </sec>
        <sec id="sec-3-3-2">
          <title>Post: self.mazeRooms→includes(r)</title>
          <p>
            Unlike the createBombedM aze operation, the createM aze operation
delegates its responsibility to other operations (i.e., makeM aze, makeRoom,
addRoom, makeW all, and addW all) in the refactored class model. Due to space
limitations, only the specifications of createM aze and addRoom are given in the
paper (see above). More operation specifications can be found in [
            <xref ref-type="bibr" rid="ref18">18</xref>
            ]. A sequence
diagram (see Figure 3) is used to describe the result of the behavioral
refactoring. It describes an invocation sequence of the refactored model operations that
is intended to preserve the net effect of the createBombedM aze operation in the
source model.
          </p>
          <p>The analysis showed that if we removed an operation (e.g., addRoom) from
the operation sequence in Fig. 3, the net effect of createBombedM aze cannot be
preserved by the rest of operations in Fig. 3. We also used the same analysis
approach to check if the net effects of other source model operations are preserved
by refactored model operations. Our analysis results showed that all the
operations in the source model (e.g., createEnchantedM aze, createRoomW ithBomb,
createEnchantedRoom, createOrdinaryW all and createBombedW all) can be
preserved by relevant operations in the refactored model.
4</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Tool Support</title>
      <p>
        We developed a research prototype to investigate the feasibility of developing tool
support for the approach. The prototype consists of an Eclipse OCL parser, an
Ecore/OCL transformer and an Alloy Analyzer. The Ecore/OCL transformer is
developed using Kermeta [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], an aspect-oriented metamodeling tool. The inputs
of the prototype are (1) an EMF Ecore [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] file that specifies a refactored class
model, (2) a textual OCL file that specifies the pre-/post-conditions of Op0 and
operations involved in OpSeq, and (3) a textual file that describes a sequence
diagram.
      </p>
      <p>The inputs are automatically transformed to an Alloy model consisting of
signatures and predicates. The prototype then uses the APIs provided by the
Alloy Analyzer to pass the Alloy model to the Alloy SAT solver. The result
returned by the Alloy SAT solver is interpreted by the prototype. The interpreted
result provides the net effect preservation property between Op0 and OpSeq.</p>
      <p>
        The prototype implementation uses a visitor pattern to transform a class
model with operation specifications into an Alloy model. The traditional
visitor design pattern keeps the separation of the structure (i.e., the metamodel
elements) and the behavior (i.e., the visitor) by using a specific class for the
visitor, and thus results in ping-pong calls between the objects of the structure
and the objects of the visitor. The Kermeta [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] language provides an aspect
weaving mechanism to simplify the visitor pattern by allowing a user to define
a visit method for each model element being visited in an aspect class that is
woven into an existing base class at runtime. There is thus no need to keep a
visitor class that is used to traverse each model element of a metamodel.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>Two broad categories of related work are discussed in the section: work on model
refactoring and work on UML-to-Alloy transformation.
5.1</p>
      <p>
        Model Refactoring
Refactoring has attracted much attention from the MDE community since it
was first introduced by Opdyke in his PhD dissertation [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Boger et al. [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
applied the idea of refactoring to UML class diagrams, statechart diagrams,
and activity diagrams. Their approach, however, does not provide support for
rigorously reasoning about a behavioral refactoring.
      </p>
      <p>
        Both Sunye et al. [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and Van Gorp et al. [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] used OCL to formally specify
the refactoring for UML models. An operation is defined for each type of the
refactoring and its OCL pre-/post-condition specifies the model structure that
must be satisfied before and after the refactoring associated with the operation.
Their approach, however, can only be used to verify the refactoring involving
the changes to model structures.
      </p>
      <p>
        France et al. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] described a metamodeling approach to pattern-based model
refactoring in which refactorings are used to introduce a new design pattern
instance to the model. Mens and Tourwe [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] used logic reasoning to detect if a
design pattern instance that is introduced to a class model, limits the
applicability of certain refactorings.
      </p>
      <p>
        Straeten et al. [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] proposed a behavior preserving refactoring approach for
UML class models. Unlike our approach, the behavior of a class model in their
approach is expressed using state machines and sequence diagrams. Gheyi et al.
[
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] described a rigorous approach to verifying the refactoring for Alloy models.
      </p>
      <p>However, based on our knowledge, none of the above approaches can be used
to analyze operation-based model refactoring that involves changes to operation
specifications.
5.2</p>
      <p>
        UML to Alloy Transformation
Georg et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] used both Alloy and UML/OCL to specify the runtime
configuration management of a distributed system. An ad-hoc comparison between
Alloy and UML/OCL is discussed in their paper.
      </p>
      <p>
        Dennis et al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] used the Alloy Analyzer to uncover the errors in a UML
model of a radiation therapy machine. The operations in the design model are
specified using OCL. An informal description of OCL-to-Alloy transformation is
described in their approach. Their approach, however, does not provide support
for automated transformation between UML/OCL and Alloy.
      </p>
      <p>
        Anastasakis et al. [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] described a tool, namely UML2Alloy, that
automatically transforms a UML class model with OCL invariants into an Alloy model.
Their tool builds upon a formal mapping between UML/OCL metamodel and
Alloy metamodel. Unlike their approach, our approach leverages Alloy’s trace
mechanism to generate an Alloy model with trace features from a UML/OCL
model.
      </p>
      <p>
        Maoz et al. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] developed a tool that implements the transformation between
UML class models and Alloy models. Unlike the approach described in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], Maoz’s
tool produces a single Alloy module from two class models. Maoz’s approach,
however, does not provide support for class models with OCL invariants and
operation specifications.
6
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>We presented an approach to rigorously analyzing a behavioral refactoring that
involves making changes to operation specifications expressed in the OCL. The
behavioral refactoring analysis involves checking whether relevant operations in
the refactored model can preserve the net effects of the operations targeted by
the refactoring in the source model. The net effect preservation checking
technique described in the paper builds upon the Alloy Analyzer and thus requires
a translation from UML class models and OCL operation specifications to Alloy
models. We developed a prototype for transforming UML+OCL models to
Alloy models with traces to support the net effect preservation check. We applied
the approach to a pattern-based model refactoring to demonstrate how software
modelers can use the approach to analyze a behavioral refactoring.</p>
      <p>We plan to extend the behavioral refactoring analysis approach by providing
support for more complex OCL operators. Specifically we are currently
investigating how we can use SMT solvers (e.g., Microsoft Z3) at the back-end to
analyze the OCL specifications. Our future work will also explore how mappings
between equivalent source and refactored forms can be used to support the net
effect preservation checking.</p>
    </sec>
    <sec id="sec-7">
      <title>ACKNOWLEDGMENT</title>
      <p>The work described in this report was supported by the National Science
Foundation grant CCF-1018711.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>K.</given-names>
            <surname>Anastasakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Bordbar</surname>
          </string-name>
          , G. Georg,
          <string-name>
            <given-names>and I.</given-names>
            <surname>Ray</surname>
          </string-name>
          .
          <article-title>On challenges of model transformation from UML to Alloy</article-title>
          .
          <source>Software and Systems Modeling</source>
          ,
          <volume>9</volume>
          (
          <issue>1</issue>
          ):
          <fpage>69</fpage>
          -
          <lpage>86</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>M.</given-names>
            <surname>Boger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Sturm</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Fragemann</surname>
          </string-name>
          .
          <article-title>Refactoring browser for UML</article-title>
          . Objects, Components, Architectures, Services, and
          <article-title>Applications for a Networked World</article-title>
          , pages
          <fpage>366</fpage>
          -
          <lpage>377</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. G. Dennis,
          <string-name>
            <given-names>R.</given-names>
            <surname>Seater</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Rayside</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Jackson</surname>
          </string-name>
          .
          <article-title>Automating commutativity analysis at the design level</article-title>
          .
          <source>In ACM SIGSOFT Software Engineering Notes</source>
          , volume
          <volume>29</volume>
          , pages
          <fpage>165</fpage>
          -
          <lpage>174</lpage>
          . ACM,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Beck</surname>
          </string-name>
          .
          <article-title>Refactoring: improving the design of existing code</article-title>
          .
          <source>Addison-Wesley Professional</source>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. R. France,
          <string-name>
            <given-names>S.</given-names>
            <surname>Chosh</surname>
          </string-name>
          , E. Song, and
          <string-name>
            <given-names>D.K.</given-names>
            <surname>Kim</surname>
          </string-name>
          .
          <article-title>A metamodeling approach to patternbased model refactoring</article-title>
          .
          <source>Software</source>
          , IEEE,
          <volume>20</volume>
          (
          <issue>5</issue>
          ):
          <fpage>52</fpage>
          -
          <lpage>58</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>E.</given-names>
            <surname>Gamma</surname>
          </string-name>
          , H. Richard,
          <string-name>
            <given-names>J.</given-names>
            <surname>Ralph</surname>
          </string-name>
          , and
          <string-name>
            <given-names>V.</given-names>
            <surname>John</surname>
          </string-name>
          .
          <article-title>Design patterns: elements of reusable object-oriented software</article-title>
          . Reading: Addison Wesley Publishing Company,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>G.</given-names>
            <surname>Georg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bieman</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>France</surname>
          </string-name>
          .
          <article-title>Using Alloy and UML/OCL to specify run-time configuration management: a case study</article-title>
          .
          <source>Practical UML-Based Rigorous Development Methods-Countering or Integrating the eXtremists</source>
          ,
          <volume>7</volume>
          :
          <fpage>128</fpage>
          -
          <lpage>141</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>R.</given-names>
            <surname>Gheyi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Massoni</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Borba</surname>
          </string-name>
          .
          <article-title>A rigorous approach for proving model refactorings</article-title>
          .
          <source>In Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering</source>
          , pages
          <fpage>372</fpage>
          -
          <lpage>375</lpage>
          . ACM,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>D.</given-names>
            <surname>Jackson</surname>
          </string-name>
          .
          <article-title>Alloy: a lightweight object modelling notation</article-title>
          .
          <source>ACM Transactions on Software Engineering and Methodology (TOSEM)</source>
          ,
          <volume>11</volume>
          (
          <issue>2</issue>
          ):
          <fpage>256</fpage>
          -
          <lpage>290</lpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>J.M. J</surname>
          </string-name>
          <article-title>´ez´equel,</article-title>
          <string-name>
            <surname>O. Barais</surname>
            , and
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Fleurey</surname>
          </string-name>
          .
          <article-title>Model driven language engineering with kermeta</article-title>
          .
          <source>Generative and Transformational Techniques in Software Engineering III</source>
          , pages
          <fpage>201</fpage>
          -
          <lpage>221</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>S.</given-names>
            <surname>Maoz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Ringert</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Rumpe</surname>
          </string-name>
          . Cddiff:
          <article-title>Semantic differencing for class diagrams</article-title>
          .
          <source>ECOOP 2011-Object-Oriented Programming</source>
          , pages
          <fpage>230</fpage>
          -
          <lpage>254</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12. T. Mens and
          <string-name>
            <given-names>T.</given-names>
            <surname>Tourwe</surname>
          </string-name>
          .
          <article-title>A declarative evolution framework for object-oriented design patterns</article-title>
          .
          <source>In Software Maintenance</source>
          ,
          <year>2001</year>
          . Proceedings. IEEE International Conference on, pages
          <fpage>570</fpage>
          -
          <lpage>579</lpage>
          . IEEE,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>P.A.</given-names>
            <surname>Muller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Fleurey</surname>
          </string-name>
          , and
          <string-name>
            <surname>J.M. J</surname>
          </string-name>
          <article-title>´ez´equel. Weaving executability into objectoriented meta-languages</article-title>
          .
          <source>Model Driven Engineering Languages and Systems</source>
          , pages
          <fpage>264</fpage>
          -
          <lpage>278</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>W.F.</given-names>
            <surname>Opdyke</surname>
          </string-name>
          .
          <article-title>Refactoring: A program restructuring aid in designing objectoriented application frameworks</article-title>
          .
          <source>PhD thesis</source>
          ,
          <source>PhD thesis</source>
          , University of Illinois at Urbana-Champaign,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>O.M.G.A.</given-names>
            <surname>Specification.</surname>
          </string-name>
          <article-title>Object constraint language</article-title>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>D.</given-names>
            <surname>Steinberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Budinsky</surname>
          </string-name>
          , E. Merks, and
          <string-name>
            <given-names>M.</given-names>
            <surname>Paternostro</surname>
          </string-name>
          . EMF:
          <article-title>Eclipse Modeling Framework</article-title>
          .
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. W. Sun, R. France,
          <string-name>
            <surname>and I. Ray.</surname>
          </string-name>
          <article-title>Rigorous analysis of UML access control policy models</article-title>
          .
          <source>In Policies for Distributed Systems and Networks (POLICY)</source>
          ,
          <source>2011 IEEE International Symposium on</source>
          , pages
          <fpage>9</fpage>
          -
          <lpage>16</lpage>
          . IEEE,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18. W. Sun, R. France,
          <string-name>
            <given-names>and I.</given-names>
            <surname>Ray</surname>
          </string-name>
          .
          <source>Analyzing Behavioral Refactoring of Class Models. Technical Report CS-13-104</source>
          , Colorado State University, http://www.cs.colostate.edu/TechReports/,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19. G. Sunye,
          <string-name>
            <given-names>D.</given-names>
            <surname>Pollet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Le Traon</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.M.</given-names>
            <surname>Jezequel</surname>
          </string-name>
          .
          <article-title>Refactoring UML models</article-title>
          .
          <source>UML 2001The Unified Modeling Language. Modeling Languages, Concepts</source>
          ,
          <source>and Tools</source>
          , pages
          <fpage>134</fpage>
          -
          <lpage>148</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>R. Van Der Straeten</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          <string-name>
            <surname>Jonckers</surname>
            , and
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Mens</surname>
          </string-name>
          .
          <article-title>A formal approach to model refactoring and model refinement</article-title>
          .
          <source>Software and Systems Modeling</source>
          ,
          <volume>6</volume>
          (
          <issue>2</issue>
          ):
          <fpage>139</fpage>
          -
          <lpage>162</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>P. Van Gorp</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          <string-name>
            <surname>Stenten</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Mens</surname>
            , and
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Demeyer</surname>
          </string-name>
          .
          <article-title>Towards automating sourceconsistent UML refactorings</article-title>
          .
          <source>UML 2003-The Unified Modeling Language. Modeling Languages and Applications</source>
          , pages
          <fpage>144</fpage>
          -
          <lpage>158</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>