<!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>Detecting Performance Bad Smells for Henshin Model Transformations</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Matthias Tichy</string-name>
          <email>matthias.tichy@cse.gu.se</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Christian Krause</string-name>
          <email>me@ckrause.org</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Grischa Liebel</string-name>
          <email>grischa@chalmers.se</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>SAP Innovation Center Potsdam</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Software Engineering Division</institution>
          ,
          <addr-line>Chalmers</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>In model-driven software engineering, model transformations are used for the specification of model changes. Similar to programs also model transformations can exhibit bad smells which indicate possible weaknesses. In this paper, we address bad smells which can negatively affect the performance of the application of model transformations, particularly, model transformations defined in Henshin. Based on a description of the Henshin interpreter and its performance enhancing strategies, we describe a set of bad smells and corresponding detectors. We evaluate the detectors by applying them to the example rule set of Henshin.</p>
      </abstract>
      <kwd-group>
        <kwd>model transformation</kwd>
        <kwd>Henshin</kwd>
        <kwd>bad smell</kwd>
        <kwd>performance</kwd>
        <kwd>subgraph matching</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Model transformations are a key part of model-driven software engineering
approaches as they define the changes on individual models or between models.
There exist many different languages for the specification of model
transformations, e.g., PMT [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], ATL [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], JTL [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], QVT, and the graph transformation based
languages PROGRES [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], AGG [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], Fujaba [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], VIATRA2 [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] and Henshin [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>Graph transformation based approaches, like the ones above, essentially define
model transformations using rules consisting of a pre-condition graph, called
the left-hand side (LHS), and a post-condition graph, called the right-hand side
(RHS) of the rule. Informally, the execution of a model transformation requires
that a matching of objects in the model (host graph) to the nodes and edges in
the LHS is found and these matched objects are changed in such a way that the
nodes and edges of the RHS match these objects.</p>
      <p>
        The performance of graph transformation based model transformations are
mainly determined by the efficiency of the match finding of the LHS. Consequently,
model transformation languages offer different options to add constraints to the
LHS of model transformations to improve the performance of the matching. To be
efficient, graph transformation tools usually employ heuristics such as search plans
to provide good performance (e.g. [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]). Henshin is a graph transformation based
model transformation tool, which is tightly integrated into the Eclipse Modeling
Framework (EMF). Henshin does not enforce restrictions for the specification of
the LHS in order to be as widely applicable as possible. Thus, software developers
might not constrain their rules enough which might negatively affect the rule’s
execution performance for larger models.
      </p>
      <p>The contribution of this paper is an informal description of bad smells
in Henshin transformation rules which might negatively affect the execution
performance. These bad smells are indicators for potential performance issues
to be expected at runtime. Detectors of these bad smells are then formalized
as Henshin rules (and in some cases utility code) on the Henshin meta model
itself. Finally, we report on the amount of bad smells found in the examples
provided with Henshin itself. We focus in this paper on static analysis on the
transformation rules.</p>
      <p>We introduce Henshin and its matching approach in the next section. Section 3
contains the description and formalization of the bad smells. The results of the
execution of the bad smells detectors on the Henshin examples are shown in
Section 4. After a short discussion of related work in Section 5, we conclude and
present an outlook on future work in dynamic performance analysis of Henshin
transformations.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Henshin</title>
      <p>
        Henshin is a high-level graph rewriting and model transformation language and
tool targeting models defined in the Eclipse Modeling Framework (EMF) [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
Having its roots in academia, Henshin is also used in productive industrial settings.
For instance, the tool is used by the internationally operating satellite provider
SES to translate control program code for satellites (see [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] for details). The
graphs in this application consist of hundreds of thousands of nodes. Therefore,
a high performance of the graph pattern matching and transformation engine is
crucial for practical use.
2.1
      </p>
      <sec id="sec-2-1">
        <title>Graph transformation rules in Henshin</title>
        <p>The Henshin transformation language is defined by means of a meta model.
Figure 1 shows a part of this meta model which is relevant for this paper. Graph
transformation rules are modeled using instances of the Rule class. The Henshin
meta model is closely aligned to the underlying formal model of double pushout
(DPO) graph transformations. Thus, rules consist of a left-hand side and a
right-hand side graph as instances of the Graph class. Rules further contain node
mappings between the LHS and the RHS which are omitted here for better
readability. Graphs consist of a set of Nodes and a set of Edges. Nodes can
additionally contain a set of Attributes. These three kinds of model elements
are typed by their corresponding concepts in the Ecore meta model of EMF
(depicted in blue). Rule inherits from Unit and therefore can contain a number
of Parameters. A typical use of parameters is to pass an attribute value (e.g. a
name) of a node to be matched to the rule. To constrain the applicability of a
multiRu0le.*s checkDanglinRguAle:AEBoolean
AttributeCondition injectiveMatchingA:AEBoolean
conditionTextA:AEString 0. * rule 1</p>
        <p>attributeConditions 1 rhs lhs1
child Formula 0. 1 Graph
1 1formula</p>
        <p>1left right
UnaryFormula</p>
        <p>BinaryFormula</p>
        <p>NamedElement
nameA:AEString
descriptionA:AEString</p>
        <p>
          Parameter
0. * parameters
0. 1
unit
rule, the meta model contains concepts for modeling nested graph conditions [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]
as well as attribute conditions.
Henshin does neither impose any restrictions on the structure of the LHS, nor
does it require to pass parameters that could be used as a starting point for the
graph pattern search (as, e.g., required in Fujaba). This high expressive power
comes with the price that in the worst case the graph pattern matching problem
in Henshin is equivalent to the subgraph isomorphism problem.
        </p>
        <p>The graph pattern matching engine of Henshin solves this task by translating
it into an equivalent constraint-solving problem (CSP) and by employing several
heuristics to achieve efficiency in almost all practical scenarios. Every node in
the LHS is considered as a variable in the CSP. For each of these variables,
a corresponding domain slot is created which is essentially the solution space
for this variable, i.e., all nodes in the host graph which are possible matches
for this node. The graph pattern matching is realized by a recursive algorithm
which i) removes impossible solutions for a variable by imposing constraints
on their domain slot, and ii) locking variables to specific solutions and thereby
constructing matches.</p>
        <p>
          The efficiency of the pattern matching primarily depends on a) how much
the constraints reduce the solution space of variables and b) the order in which
the recursive algorithm locks variables. The order of variables can in Henshin be
either manually optimized or fully automatically using a heuristic which sorts the
variables on-the-fly based on the current host graph (enabled by default). The
used constraints in the CSP can be categorized into different groups. The most
basic kind of constraints are type constraints. They reduce the solution space to
objects which are instances of a given class (or a subclass of it). If there exists an
edge x !e y and the source variable x is locked already to a specific node X, the
solution space of y is restricted to all e-images of X. This kind of constraints is
referred to as reference constraints in Henshin. Similarly, so-called containment
constraints reduce domain slots to containment children or container nodes (cf.
containment references in EMF [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]). There exist more kinds of constraints, but
we omit them here due to lack of space.
3
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Bad smells and their detection</title>
      <p>In the following, we present a set of bad smells which can negatively affect
the performance of the matching of the LHS. Detecting an instance of such
a bad small does not imply that it is a performance problem. It is merely an
indicator that there might be a problem which can cause an unnecessary bad
transformation execution performance. Furthermore, the presented detectors have
false positives and false negatives due to the decision to specify the detection
mainly using Henshin rules on Henshin rules. Due to space restrictions, we cannot
show all detectors in the paper in detail. Instead, we refer the interested reader
to the detection Henshin rule set and the supporting source code available at
www.cse.chalmers.se/~tichy/henshin_bad_smells.zip
3.1</p>
      <sec id="sec-3-1">
        <title>LHS not connected</title>
        <p>Description: If a LHS is not a connected graph, it is not possible to use the
edges between nodes to constrain possible matches of nodes. This means (in
general) that two independent subgraphs must be matched.</p>
        <p>Detector: The detector computes all (weakly) connected components of a LHS
by a loop, which starts by marking an unmarked node of the LHS with a distinct
marker and then iteratively marks with the same marker all nodes which are
reachable by an edge from a marked node. This loop is executed until all nodes
are marked. If the rule contains more than one marker object, the LHS is not
connected.</p>
        <p>Notes: The detector currently computes only (weakly) connected components.
By supporting strongly connected components, the detection would also correctly
identify a LHS where one of the two subgraphs of the LHS are only connected
by an edge directed from one subgraph to the other. In this case, reference
constraints can only be exploited in one direction of the rule.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>No bound node in the LHS</title>
        <p>Description: If a node of the LHS is already known due to a rule parameter,
matching of the other nodes of the LHS can start at a known point in the host
graph. Hence, instead of searching the whole host graph for a matching only
a local search must be performed. Consequently, the interpreter optimizes the
matching order of the nodes by moving known objects to the front of the matching
order.</p>
        <p>Detector: The detector checks whether a rule parameter exists with the same
name as a node in the LHS. If the rule of a graph can be divided into several
connected components, the detector also checks for each connected components
since a matched node in one connected component does not affect (in general)
the matching of the other connected components. Figure 2(a) shows the main
detector rule. Additionally, the detector ignores multi-rules since they typically
contain mappings to the kernel rule.</p>
        <p>Notes: Note, the user of the transformation decides whether this parameter is
used as input for the matching of the LHS or only as an output. In the latter
case, the undetected bad smell would be a false negative.</p>
        <p>(a) Main part of the detector for
rules without known node
(b) Detector rule for too many nodes
of the same type
(c) Detector rule for binding a node over to-many edge
before a node binding over to-one edge
(d) Main part of the
detector rule for nodes without
incoming reference</p>
      </sec>
      <sec id="sec-3-3">
        <title>No bound node or node with attribute constraint in the LHS</title>
        <p>Description: While the previous “no bound node” bad smell checks only whether
a node in the LHS is known by a parameter, constraints on an attribute of the
node is another option to restrict the number of possible objects to match. The
interpreter also places nodes with an attribute constraint as much as possible to
the front of the matching order but behind known nodes.</p>
        <p>Detector: The detector is an extension of the detector of the previous sections.
It detects an LHS (or similarly to above a connected component of the LHS)
which neither contains a known node nor a node with an attribute constraint. The
reason to extend the previous detector and only report an LHS which additionally
does not contain a known node is that a known node already improves the
matching process by itself. Again, multi-rules are ignored since they contain
mappings to the kernel rule.</p>
        <p>Notes: A future option to increase the execution performance of Henshin
transformation rules would be to support Map-based references as in Fujaba. This would
improve the matching of nodes with attribute constraints when the attribute
constraint is used as an unique identifier.
3.4</p>
      </sec>
      <sec id="sec-3-4">
        <title>No incoming edges</title>
        <p>Description: If a node has no incoming edge, all objects in the system of the
same type are possible matches for this node since matches of other nodes cannot
be used to restrict the number of potential objects for this node by reference
constraints.</p>
        <p>Detection: The major part of the detector for this bad smell is shown in
Figure 2(d). Additionally, the detector checks that the node without incoming
references does not already have a matching due to a parameter of the rule.
3.5</p>
      </sec>
      <sec id="sec-3-5">
        <title>Preferring to-many over to-one references</title>
        <p>Description: As described above, Henshin supports the optimization of the
node matching order to improve the performance of the matching. If this option
is not used the order of the matching is defined by the order of the nodes in the
graph of the LHS.</p>
        <p>In this case, we detect a bad smell if a node is matched which is reachable
by a to-many reference before a node is matched which is reachable by a to-one
reference. The to-one referenced node is faster to match as only one possible
object can be matched whereas the to-many referenced node might have multiple
possible matching objects.</p>
        <p>Detector: Figure 2(c) shows the detector of this bad smell. In addition, it checks
whether node2 is matched before node3. For this, we exploit that the reference
between Graph and Node is ordered and thus we can check the indices of the
nodes in this reference using the newly implemented support for edge indices in
Henshin.
3.6</p>
      </sec>
      <sec id="sec-3-6">
        <title>Too many nodes of the same type</title>
        <p>Description: Henshin employs type constraints to restrict the possible matching
of nodes to those objects of the correct type. If a lot of nodes in the LHS are
typed over the same type, then the type constraints might lose their benefits. In
the extreme case, if only one type is used, then type constraints do not restrict
the matchings at all.</p>
        <p>Detector: The detector checks whether the number of nodes with the same type
exceeds a certain threshold. For our evaluation, we used a threshold of 3 nodes
with the same type. Figure 2(b) shows the detector rule.
3.7</p>
      </sec>
      <sec id="sec-3-7">
        <title>Using generic types</title>
        <p>Description: If the typing used for the node in the LHS of a Henshin rule is too
generic, the type constraints in the Henshin interpreter do not gain that much
performance. An example would be the use of EObject, which is the supertype of
all EMF generated classes, as type of a node.</p>
        <p>Another case is the generic use of the Trace class provided by Henshin to
specify tracing between objects in exogeneous model transformations. In order
to improve the matching of the trace objects, it is beneficial to create and
use different subclasses of Trace for each tracing information, such that type
constraints on traces can be exploited in the interpreter.</p>
        <p>Detector: The detector detects rules which include one node which is typed
using EObject, Trace or an abstract class.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Evaluation</title>
      <p>As an early evaluation, we executed the detectors on all examples delivered as
part of Henshin, our own example file, and on the detector rules themselves.
Figure 3 shows an overview of the results. The two first columns contain as
reference the number of rules and connected components in each example file.
Note that some rules do not include an LHS, i.e., they are always applicable. The
number of connected components can be less than the number of rules in these
cases.</p>
      <p>Mostly, the bad smells “no bound node” and “node without incoming edges”
have been detected in the evaluation examples. However, often these rules contain
at least a node with an attribute constraint. Another aspect shown in the
evaluation is that some of the examples are graph transformation benchmarks or
generic examples like mutualexclusion.henshin and sierpinski.henshin where a number
of performance bad smells are not surprising. The bad smell “preferring to many
reference before to one reference” seems to be a known issue. Finally, when
running the detectors on themselves, we are also guilty of some performance bad
smells.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Related Work</title>
      <p>
        There exists some previous work in the area of model transformations and
performance. Varró et al. [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] present a performance benchmark for different graph
transformation based model transformation tools. Another paper which discusses
model transformations and performance is [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] which compares different styles of
model transformations with respect to their performance in different benchmarks.
Mészáros et al. present how to optimize the performance of model transformations
manually by exploiting knowledge of the designer of the transformation system
and automatically by an application specific generated matching algorithm [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
However, none of these papers considers the peformance impacts of bad smells.
      </p>
      <p>
        Another line of research is the definition of metrics for model
transformations [
        <xref ref-type="bibr" rid="ref13 ref17">17, 13</xref>
        ]. These papers’ approaches mainly adapt metrics from programming
languages to model transformations. While [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] is mainly concerned with
maintainability metrics, a few of the metrics presented in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] are related to performance.
Similarly, the catalog of model transformation refactorings presented in [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]
also includes a few refactorings which improve the performance of the model
transformations in the experimental evaluation.
      </p>
      <p>
        Specifically for Henshin graph transformations, Taenzter et al. also define
bad smells and refactorings [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. However, they do not address performance.
In summary, there exists no work which presents bad smells or anti patterns
specifically for the performance of model transformations.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion and Future Work</title>
      <p>We presented performance bad smells in Henshin model transformation rules
and corresponding detectors which were also specified as Henshin model
transformations. The current version of the detection suffers from the design decision
to specify the detectors also mostly with Henshin rules. Consequently, only an
analysis on a syntactical level is possible which leads to false positives and false
negatives.</p>
      <p>Future evaluations of the bad smells will compare the performance of the
presented detector rules with refactored rules which have less performance bad
smells. Early investigations show that refactoring of rules to remove the bad
smells is not a simple change but might require more extensive changes in several
rules and how the rules interact. It remains to be seen whether these refactorings
have a positive effect on performance but a negative effect on other qualities like
readability.</p>
      <p>We will investigate an extension of the Henshin interpreter engine in order to
assess the impact of the identified bad smells at runtime. For example, we can
measure and plot the number of possible matches for a node during the matching
of the LHS in order to identify whether the bad smell “no bound node in LHS”
for the analysed rule is really problematic or not.</p>
      <p>Furthermore, the presented bad smells might be applicable and extended for
other model transformation languages as well.</p>
      <sec id="sec-6-1">
        <title>Acknowledgements</title>
        <p>The research leading to these results has received partial funding from the
European Union’s Seventh Framework Program (FP7/2007-2013) for CRYSTAL –
Critical System Engineering Acceleration Joint Undertaking under grant
agreement No 332830 and from Vinnova under DIARIENR 2012-04304. This work
was also done in collaboration with the project ENSURE which is funded by the
DFG (German Research Foundation) under the Priority Programme SPP1593:
Design For Future – Managed Software Evolution.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>T.</given-names>
            <surname>Arendt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Biermann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Jurack</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Krause</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Taentzer</surname>
          </string-name>
          . Henshin:
          <article-title>Advanced concepts and tools for in-place emf model transformations</article-title>
          . In D. C. Petriu,
          <string-name>
            <given-names>N.</given-names>
            <surname>Rouquette</surname>
          </string-name>
          , and Ø. Haugen, editors,
          <source>MoDELS (1)</source>
          , volume
          <volume>6394</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>121</fpage>
          -
          <lpage>135</lpage>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>R.</given-names>
            <surname>Bruni</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Lluch-Lafuente</surname>
          </string-name>
          .
          <article-title>Evaluating the performance of model transformation styles in maude</article-title>
          . In F. Arbab and P. C. Ölveczky, editors,
          <source>FACS</source>
          , volume
          <volume>7253</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>79</fpage>
          -
          <lpage>96</lpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>A.</given-names>
            <surname>Cicchetti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. D.</given-names>
            <surname>Ruscio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Eramo</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Pierantonio. JTL</surname>
          </string-name>
          :
          <article-title>A bidirectional and change propagating transformation language</article-title>
          .
          <source>In Software Language</source>
          Engineering - Third International Conference,
          <string-name>
            <surname>SLE</surname>
          </string-name>
          <year>2010</year>
          , volume
          <volume>6563</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>183</fpage>
          -
          <lpage>202</lpage>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>T.</given-names>
            <surname>Fischer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Niere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Torunski</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Zündorf</surname>
          </string-name>
          .
          <article-title>Story diagrams: A new graph rewrite language based on the unified modeling language and java</article-title>
          . In H. Ehrig, G. Engels, H.
          <article-title>-</article-title>
          <string-name>
            <surname>J. Kreowski</surname>
          </string-name>
          , and G. Rozenberg, editors,
          <source>TAGT</source>
          , volume
          <volume>1764</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>296</fpage>
          -
          <lpage>309</lpage>
          . Springer,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>A.</given-names>
            <surname>Habel</surname>
          </string-name>
          and K.-h. Pennemann.
          <article-title>Correctness of high-level transformation systems relative to nested conditions</article-title>
          .
          <source>Mathematical. Structures in Comp. Sci.</source>
          ,
          <volume>19</volume>
          (
          <issue>2</issue>
          ):
          <fpage>245</fpage>
          -
          <lpage>296</lpage>
          , Apr.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>F.</given-names>
            <surname>Hermann</surname>
          </string-name>
          , S. Gottmann,
          <string-name>
            <given-names>N.</given-names>
            <surname>Nachtigall</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Braatz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Morelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pierre</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Engel</surname>
          </string-name>
          .
          <article-title>On an automated translation of satellite procedures using triple graph grammars</article-title>
          .
          <source>In Theory and Practice of Model Transformations</source>
          , volume
          <volume>7909</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>50</fpage>
          -
          <lpage>51</lpage>
          . Springer Berlin Heidelberg,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Allilaire</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bézivin</surname>
          </string-name>
          ,
          <string-name>
            <surname>and I. Kurtev.</surname>
          </string-name>
          <article-title>ATL: A model transformation tool</article-title>
          . Sci. Comput. Program.,
          <volume>72</volume>
          (
          <issue>1-2</issue>
          ):
          <fpage>31</fpage>
          -
          <lpage>39</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>T.</given-names>
            <surname>Mészáros</surname>
          </string-name>
          , G. Mezei,
          <string-name>
            <given-names>T.</given-names>
            <surname>Levendovszky</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Asztalos</surname>
          </string-name>
          .
          <article-title>Manual and automated performance optimization of model transformation systems</article-title>
          .
          <source>STTT</source>
          ,
          <volume>12</volume>
          (
          <issue>3-4</issue>
          ):
          <fpage>231</fpage>
          -
          <lpage>243</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>D.</given-names>
            <surname>Steinberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Budinsky</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Paternostro</surname>
          </string-name>
          , and
          <string-name>
            <surname>E. Merks.</surname>
          </string-name>
          <article-title>EMF: Eclipse Modeling Framework</article-title>
          .
          <article-title>Addison-Wesley, 2</article-title>
          . edition,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>G.</given-names>
            <surname>Taentzer. AGG</surname>
          </string-name>
          :
          <article-title>A graph transformation environment for modeling and validation of software</article-title>
          . In J. L.
          <string-name>
            <surname>Pfaltz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Nagl</surname>
          </string-name>
          , and B. Böhlen, editors,
          <source>Applications of Graph Transformations with Industrial Relevance</source>
          , Second International Workshop, AGTIVE 2003, volume
          <volume>3062</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>446</fpage>
          -
          <lpage>453</lpage>
          . Springer,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11. G. Taentzer,
          <string-name>
            <given-names>T.</given-names>
            <surname>Arendt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ermel</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Heckel</surname>
          </string-name>
          .
          <article-title>Towards refactoring of rule-based, in-place model transformation systems</article-title>
          .
          <source>In Proceedings of the First Workshop on the Analysis of Model Transformations, AMT '12</source>
          , pages
          <fpage>41</fpage>
          -
          <lpage>46</lpage>
          , New York, NY, USA,
          <year>2012</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>L.</given-names>
            <surname>Tratt</surname>
          </string-name>
          .
          <article-title>A change propagating model transformation language</article-title>
          .
          <source>Journal of Object Technology</source>
          ,
          <volume>7</volume>
          (
          <issue>3</issue>
          ):
          <fpage>107</fpage>
          -
          <lpage>124</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>M. van Amstel</surname>
            , M. van den Brand, and
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Nguyen</surname>
          </string-name>
          .
          <article-title>Metrics in model transformations</article-title>
          . In S. Ducasse,
          <string-name>
            <given-names>L.</given-names>
            <surname>Duchien</surname>
          </string-name>
          , and L. Seinturier, editors,
          <source>BENEVOL</source>
          <year>2010</year>
          (
          <article-title>9th Belgian-Netherlands Software Evolution Seminar</article-title>
          , Lille, France, December
          <volume>16</volume>
          ,
          <year>2010</year>
          .
          <source>Proceedings of Short Papers)</source>
          , pages
          <fpage>1</fpage>
          -
          <lpage>5</lpage>
          . Université Lille 1,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>G.</given-names>
            <surname>Varró</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Deckwerth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wieber</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Schürr</surname>
          </string-name>
          .
          <article-title>An algorithm for generating model-sensitive search plans for emf models</article-title>
          . In Z. Hu and J. de Lara, editors,
          <source>ICMT</source>
          , volume
          <volume>7307</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>224</fpage>
          -
          <lpage>239</lpage>
          . Springer,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15. G. Varro,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schurr</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Varro</surname>
          </string-name>
          .
          <article-title>Benchmarking for graph transformation</article-title>
          .
          <source>In Proceedings of the 2005 IEEE Symposium on Visual Languages</source>
          and
          <string-name>
            <surname>Human-Centric</surname>
            <given-names>Computing</given-names>
          </string-name>
          ,
          <source>VLHCC '05</source>
          , pages
          <fpage>79</fpage>
          -
          <lpage>88</lpage>
          , Washington, DC, USA,
          <year>2005</year>
          . IEEE Computer Society.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>D.</given-names>
            <surname>Varró</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Balogh</surname>
          </string-name>
          .
          <article-title>The model transformation language of the {VIATRA2} framework</article-title>
          .
          <source>Science of Computer Programming</source>
          ,
          <volume>68</volume>
          (
          <issue>3</issue>
          ):
          <fpage>214</fpage>
          -
          <lpage>234</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>A.</given-names>
            <surname>Vignaga</surname>
          </string-name>
          .
          <article-title>Metrics for measuring atl model transformations</article-title>
          .
          <source>Technical Report TR/DCC-2009-6</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>M. Wimmer</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Martínez</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Jouault</surname>
            , and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Cabot</surname>
          </string-name>
          .
          <article-title>A catalogue of refactorings for model-to-model transformations</article-title>
          .
          <source>Journal of Object Technology</source>
          ,
          <volume>11</volume>
          (
          <issue>2</issue>
          ):2:
          <fpage>1</fpage>
          -
          <lpage>40</lpage>
          , Aug.
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>A.</given-names>
            <surname>Zündorf</surname>
          </string-name>
          .
          <article-title>Graph pattern matching in PROGRES</article-title>
          . In J. E. Cuny,
          <string-name>
            <given-names>H.</given-names>
            <surname>Ehrig</surname>
          </string-name>
          , G. Engels, and G. Rozenberg, editors,
          <source>TAGT</source>
          , volume
          <volume>1073</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>454</fpage>
          -
          <lpage>468</lpage>
          . Springer,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>