<!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>Reflecting on Model-based Code Generators Using Traceability Information</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Victor Guana and Eleni Stroulia Department of Computing Science University of Alberta Edmonton</institution>
          ,
          <addr-line>AB.</addr-line>
          <country country="CA">Canada</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>-Model-based code generators use model-to-model and model-to-text transformations to systematize the construction of software systems. They integrate rule-based and templatebased transformation languages to translate high-level specifications into executable code and scripts. Given the complexity and heterogeneity of the underlying transformation languages, flexible traceability tools are needed to collect and visualize information about their architecture and operational mechanics. In this paper, we present ChainTracker, a traceability analysis environment for model-based code generators. ChainTracker helps developers to reflect on the composition of model transformations during the different stages of their construction and maintenance. Furthermore, we describe a family of software-engineering tasks that developers have to complete during the construction of model-based code generators, and how ChainTracker makes the execution of these tasks less error prone and less cognitively challenging.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        Model-based code generators use models as a vehicle to
capture a system’s specification. Domain-specific languages
with high-level semantics enable developers to create
models using well-formed constructs [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. In turn, these models
are input into model-transformation compositions to derive
executable and/or deployment artifacts, such as source-code
text and configuration scripts [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. By raising the level of
abstraction for the software specification and making extensive
reuse of executable assets, model-based code-generators make
the construction of software systems less error prone, less
expensive, and, potentially, less challenging to non-computer
experts [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        The role of model-based code generators is very similar to
that of compilers, translating a general-purpose programming
language to machine code. In this sense, a code generator
for a domain-specific language uses model transformations
that inject execution semantics to the high-level models, and
produces code based on templates that have been previously
engineered for reuse. Domain-specific languages are typically
associated with graphical or textual notations; using these
notations, developers can express system specifications in
terms with application-domain semantics. Such definitions are
ruled by metamodels that constrain how the concepts relate
to each other. In the transformation process, model-to-model
transformation languages are used to split, merge, or augment
the information provided in the initial specification, potentially
producing multiple intermediate models that capture different
system concerns [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Lastly, model-to-text transformations take
this intermediate models, and produce code in a
generalpurpose language, such as Java or C++, that can be compiled
and executed [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        Numerous challenges remain open to make the
construction and maintenance of model-based code-generators less
tedious and less brittle to evolution [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Despite of the
multiple research addressing the technical aspects of building
code-generators, relative few researchers investigate the core
software-engineering problems behind their complex
technology ecosystems.
      </p>
      <p>In this paper, we reflect on two challenges that affect
developers when building and maintaining code generators, namely,
(a) the platform evolution of code generators, and (b) the
overwhelming complexity of code-generation architectures.
The former refers to the difficulties that developers face when
the to-be-generated systems must fulfill new requirements and
the generation artifacts must also synchronously evolve to
reflect those changes. The latter stems from the fact that
nontrivial model transformations are hard to understand, given that
they heavily rely on textual scripts with cryptic operational
semantics, and are composed in complex transformation chains
that hard to mentally visualize and study.</p>
      <p>The contribution of this paper is twofold. We first present
ChainTracker, a visualization and trace-analysis environment
that uses traceability information about model-transformation
compositions, to support developers maintaining the complex
operational mechanics behind model-based code generators.
Second, we discuss how ChainTracker supports a number
of software-engineering tasks involved in the construction of
model-based code generators, ranging from tracing tangled
code-generation artifacts, to summarizing information that
assesses the quality of the generation process.</p>
    </sec>
    <sec id="sec-2">
      <title>II. RELATED WORK</title>
      <p>
        During the life-cycle of a model-based code-generator, the
generated code is often manually improved [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The goals
of these code modifications are bug fixing, code-performance
optimization, and functionality extensions [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ][
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. This
process is known as platform evolution in model-driven
engineering [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Due to the high complexity of the
modeltransformation compositions that live at the core of the code
generators, and the complexity of the generated code itself,
backwardly propagating code refinements to the generation
architecture is a challenging task [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Some of the questions
that developers have to answer when facing platform evolution
include, what portions of code have been changed in the
generated codebases? and, assuming that a code change
should indeed be propagated, what elements of the underlying
models and transformations should be revised?.
      </p>
      <p>
        Most state-of-the-art tools that support platform evolution
in model-based code-generators tackle the problem using
traceability information. Van Amstel et al. [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ][
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] have used
traceability information of model-to-model transformations
to visualize their operational mechanics. Other researchers
[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] have used traceability information to assess
the quality of model-transformation compositions. More
recently, in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], Santiago et al. introduced iTrace, a tool that
uses a transformation-enrichment strategy, similar to Jouault’s
proposal in [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], to collect traceability models at runtime.
Nevertheless, to the best of our knowledge, current proposals
fail to provide comprehensive tools that support end-to-end
platform-evolution analysis, including analysis of the
modified generated code and collection of traceability information
from both model-to-model and model-to-text transformations.
Furthermore, current proposals fail to provide effective tools
that present the traceability information in an interactive
and integrated tool, effectively supporting developers in the
exploration of generation architectures.
      </p>
      <p>In summary, most of the existing proposals support very
specific maintenance and construction scenarios. Furthermore,
they often provide theoretical frameworks with demonstrative
examples, rather than generic tools than can be shipped
and used by developers in fully-featured model-based code
generators.</p>
    </sec>
    <sec id="sec-3">
      <title>III. CHAINTRACKER</title>
      <p>
        Model-based code-generators are complex; they are built
using multiple technology platforms including language
workbenches that allow the definition of domain-specific languages
[
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], rule-based transformation languages that enable the
specification of model-to-model transformations (such as in
ATL [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]), and template-based model-to-text transformation
technologies (such as Acceleo [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]) that allow the derivation
of source-code files [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        ChainTracker is an integrated analysis environment
designed to support developers of model-based code
generators by making model-driven engineering technologies more
efficient, less error prone, and less cognitively challenging.
ChainTracker provides an integrated analysis environment
to visualize models and heterogeneous model-to-model and
model-to-text transformation compositions, through
interactive canvases and source-code viewers. Furthermore,
ChainTracker collects and summarizes traceability information
about the scripts of a code generator, and helps developers
to identify maintenance hotspots that answer to
platformevolution scenarios. In [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ], we presented a general conceptual
framework, generalizable to all rule-based and template-based
model-transformation compositions, that formalizes how to
collect and model traceability information in model-based
code generators. In [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], we showcased ChainTracker as
an integrated tool that implemented our generalizable
framework using static-analysis techniques. We have now further
enhanced ChainTracker to deal with complex model-to-model
and model-to-text transformation execution semantics that
heavily rely on non-trivial OCL expressions [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. The most
recent incarnation of ChainTracker uses natural-language
processing techniques to collect traceability information in
a lightweight and generalisable fashion for rule-based and
template based transformation languages built-in OCL. The
purpose of this paper is to showcase how ChainTracker
provides a comprehensible analysis environment to solve real
software-engineering tasks that developers have to complete
during the construction of model-based code generators.
      </p>
    </sec>
    <sec id="sec-4">
      <title>IV. SOLVING DEVELOPERS’ TASKS USING CHAINTRACKER ChainTracker is conceived to address three types of software-engineering tasks around model-based code gener</title>
      <p>
        ators: 1. information discovery, 2. information summarization,
and 3. information filtering and isolation. Without
ChainTracker, these tasks have to be performed manually over
transformation-source scripts [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
      </p>
      <p>Information discovery tasks involve locating individual
elements of the code-generator’s architecture, i.e., individual
metamodel elements, transformation rules, and collections of
transformation bindings, inside the generator’s source scripts.
The developer’s intent when performing this family of tasks is
to explore the code generator to identify its major components,
and to understand how the underlying transformation scripts
are organized form a static point of view.</p>
      <p>
        As a concrete example, let us briefly discuss PhyDSL, a
model-based code generator for physics-based games [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ][
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
Figure 1 illustrates how ChainTracker uses the traceability
information of PhyDSL to enable the investigation of how
source-metamodel elements are transformed into different
intermediate metamodels (including how their attributes are
being manipulated by transformation rules) and into final
textual files. ChainTracker enables developers to not only
explore the visualizations of the model-to-model and
modelto-text transformations, but also to project the visualizations
into the analyzed source-scripts using code-highlighters, thus
isolating pieces of code of interest (Figure 1.2)
      </p>
      <p>
        Information summarization tasks require developers to
measure generic information from the code-generation
architecture to identify branches of a transformation composition,
quantify the coverage of a model transformation, and measure
the size of the underlying metamodels. Summarizing
information about the code-generator enables developers to assess
and, potentially, optimize its overall design and correctness
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Figure 2 presents ChainTracker’s Overview mode, in
which traceability information is used to provide a
bird’s-eyeview of the transformation composition. This view enables
developers to abstract the complexity of individual and isolated
transformation scripts into a single picture that summarizes
the architecture of a given generation architecture. The blue
nodes represent source and target artifacts of transformations
(metamodels, in the case of model-to-model transformations,
and text files, in the case of model-to-text transformations) and
the edges represent transformation modules that operate over
them.
      </p>
      <p>
        Developers can click on the edges to pinpoint transformation
rules that live inside of specific transformation branch or
module modules (Figure 2 - yellow "sticky notes"). Furthermore,
developers can zoom into a branch of interest (as shown in
Figure 1). By clicking on individual nodes, developers can access
summarized information about the coverage of a metamodel
at different stages of the composition (see Figure 2). Coverage
information is important since it allows developers to assess
which parts of the source/target model elements have not been
used in the generation of code, thus needing to be removed
or included in the scope of the transformation modules [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
Maximizing the coverage of model transformations makes
transformation modules less convoluted and less error prone
while, at the same time, freeing metamodels from unused
semantic constructs. In ChainTracker, coverage metrics are
summarized in contextual pie-charts, where the in-coverage
metric reflects on the percentage of elements in a metamodel
that are effectively targeted by transformation bindings in
the composition, and the out-coverage metric represents the
percentage of elements in a metamodel used as a source in
transformation bindings to either generate code, or to create an
intermediate model by the transformation-composition under
analysis.
      </p>
      <p>Information filtering and isolation tasks involve connecting
and isolating elements of the code-generation architecture,
in order to find relationships between metamodel elements,
metamodel attributes, transformation bindings, and generated
lines of code. These tasks are performed when developers are
assessing the impact of platform-evolution scenarios.
ChainTracker includes a variety of filtering mechanism to isolate
metamodel elements and trace how elements relate across the
end-to-end transformation chains, including domain-specific
models, intermediate metamodels, and generated source-code
files (see Figure 1, at 4.a and 4.b). We are currently extending
ChainTracker to include symbolic and static analysis of
generated code, in order to automatically suggest when and
how refined portions of generated code need to be backwardly
propagated to the code-generators, using the traceability
information already collected and visualized in ChainTracker.
In http:// hypatia.cs.ualberta.ca/ ~guana/ chaintracker.html you
can find a video that showcases a developer conducting a
variety of the aforementioned tasks using ChainTracker.</p>
    </sec>
    <sec id="sec-5">
      <title>V. CONCLUSIONS</title>
      <p>In this paper, we presented ChainTracker, a traceability
collection and visualization analysis environment for
modelbased code generators. ChainTracker enables developers to
solve three types of software-engineering tasks around
modelbased code generators: 1. information discovery, 2. information
summarization, and 3. information filtering and isolation,
when dealing with the platform evolution of code generators
and the analysis code-generation architectures. The novelty
of our work is twofold. First, in ChainTracker traceability
information is used to reduce the cognitive challenges
developers face when using disparate model-driven engineering
technologies. Second, ChainTracker is an integrated
environment that uses traceability information to allow developers
interactively explore model-transformation scripts. Our future
research agenda aims at conducting empirical studies with
developers using ChainTracker, to accurately validate how
our tool and traceability collection techniques help developers
when using model-driven engineering technologies in real
code generators.</p>
    </sec>
    <sec id="sec-6">
      <title>ACKNOWLEDGEMENTS This work was supported by The Killam Trust, NSERC (the Discovery and the IRC program), the GRAND NCE and IBM Canada.</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Voelter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Benz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Dietrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Engelmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Helander</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. C.</given-names>
            <surname>Kats</surname>
          </string-name>
          , E. Visser, and G. Wachsmuth, DSL Engineering-Designing,
          <article-title>Implementing and Using Domain-Specific Languages. dslbook</article-title>
          . org,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>K.</given-names>
            <surname>Czarnecki</surname>
          </string-name>
          , “
          <article-title>Generative programming: Methods, techniques, and applications tutorial abstract</article-title>
          ,
          <source>” Software Reuse: Methods, Techniques, and Tools</source>
          , pp.
          <fpage>477</fpage>
          -
          <lpage>503</lpage>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Mernik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Heering</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. M.</given-names>
            <surname>Sloane</surname>
          </string-name>
          , “
          <article-title>When and how to develop domain-specific languages,” ACM computing surveys (CSUR)</article-title>
          , vol.
          <volume>37</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>316</fpage>
          -
          <lpage>344</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kleppe</surname>
          </string-name>
          , “First european workshop on composition of model transformations - cmt
          <year>2006</year>
          ,
          <source>” Technical Report TR-CTIT-06-34</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>K.</given-names>
            <surname>Czarnecki</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Helsen</surname>
          </string-name>
          , “
          <article-title>Classification of model transformation approaches</article-title>
          ,”
          <source>in Proceedings of the 2nd OOPSLA Workshop on Generative Techniques in the Context of the Model Driven Architecture</source>
          , vol.
          <volume>45</volume>
          , no.
          <issue>3</issue>
          .
          <string-name>
            <surname>Citeseer</surname>
          </string-name>
          ,
          <year>2003</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>17</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>R.</given-names>
            <surname>France</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Rumpe</surname>
          </string-name>
          , “
          <article-title>Model-driven development of complex software: A research roadmap,” in 2007 Future of Software Engineering</article-title>
          . IEEE Computer Society,
          <year>2007</year>
          , pp.
          <fpage>37</fpage>
          -
          <lpage>54</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Hutchinson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Whittle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Rouncefield</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Kristoffersen</surname>
          </string-name>
          , “
          <article-title>Empirical assessment of mde in industry</article-title>
          ,”
          <source>in Proceedings of the 33rd International Conference on Software Engineering. ACM</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A.</given-names>
            <surname>Van Deursen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Visser</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Warmer</surname>
          </string-name>
          , “
          <article-title>Model-driven software evolution: A research agenda</article-title>
          ,”
          <source>in Proceedings 1st International Workshop on Model-Driven Software Evolution</source>
          ,
          <year>2007</year>
          , pp.
          <fpage>41</fpage>
          -
          <lpage>49</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>K.</given-names>
            <surname>Bennett</surname>
          </string-name>
          and
          <string-name>
            <given-names>V.</given-names>
            <surname>Rajlich</surname>
          </string-name>
          , “
          <article-title>Software maintenance and evolution: a roadmap,”</article-title>
          <source>in Proceedings of the Conference on the Future of Software Engineering. ACM</source>
          ,
          <year>2000</year>
          , pp.
          <fpage>73</fpage>
          -
          <lpage>87</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>V.</given-names>
            <surname>Guana</surname>
          </string-name>
          and E. Stroulia, “
          <article-title>Backward propagation of code refinements on transformational code generation environments,” in Traceability in Emerging Forms of Software Engineering (TEFSE</article-title>
          ), 2013 International Workshop on,
          <year>2013</year>
          , pp.
          <fpage>55</fpage>
          -
          <lpage>60</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>V.</given-names>
            <surname>Guana</surname>
          </string-name>
          , “
          <article-title>Supporting maintenance tasks on transformational code generation environments</article-title>
          ,”
          <source>in Proceedings of the 2013 International Conference on Software Engineering</source>
          . IEEE Press,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>M. van Amstel</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Serebrenik</surname>
          </string-name>
          , and M. van den Brand, “
          <article-title>Visualizing traceability in model transformation compositions</article-title>
          ,
          <source>” in Pre-proceedings of the First Workshop on Composition and Evolution of Model Transformations</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>J. von Pilgrim</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Vanhooff</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          <string-name>
            <surname>Schulz-Gerlach</surname>
            , and
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Berbers</surname>
          </string-name>
          , “
          <article-title>Constructing and visualizing transformation chains,” in Model Driven Architecture-Foundations and Applications</article-title>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.-K.</given-names>
            <surname>Kim</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Carrington</surname>
          </string-name>
          , “
          <article-title>Verifying metamodel coverage of model transformations</article-title>
          ,” in Software Engineering Conference,
          <year>2006</year>
          . Australian. IEEE,
          <year>2006</year>
          , pp.
          <fpage>10</fpage>
          -pp.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>L.</given-names>
            <surname>Kuzniarz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. L.</given-names>
            <surname>Sourrouille</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Staron</surname>
          </string-name>
          , “Workshop on quality in modeling,”
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>and J.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , “
          <article-title>Automating change evolution in modeldriven engineering</article-title>
          ,” Computer, vol.
          <volume>39</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>51</fpage>
          -
          <lpage>58</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>I.</given-names>
            <surname>Santiago</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Vara</surname>
          </string-name>
          , M. V. de Castro, and E. Marcos, “
          <article-title>Towards the effective use of traceability in model-driven engineering projects</article-title>
          ,” in Conceptual Modeling. Springer,
          <year>2013</year>
          , pp.
          <fpage>429</fpage>
          -
          <lpage>437</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          , “
          <article-title>Loosely coupled traceability for atl,”</article-title>
          <source>in Proceedings of the European Conference on Model Driven Architecture (ECMDA) workshop on traceability, Nuremberg, Germany</source>
          , vol.
          <volume>91</volume>
          .
          <string-name>
            <surname>Citeseer</surname>
          </string-name>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>M.</given-names>
            <surname>Völter</surname>
          </string-name>
          and E. Visser, “
          <article-title>Language extension and composition with language workbenches,” in Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion</article-title>
          .
          <source>ACM</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>301</fpage>
          -
          <lpage>304</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          and
          <string-name>
            <surname>I. Kurtev</surname>
          </string-name>
          , “
          <article-title>Transforming models with atl,” in Satellite Events at the MoDELS 2005 Conference</article-title>
          . Springer, pp.
          <fpage>128</fpage>
          -
          <lpage>138</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>J.</given-names>
            <surname>Musset</surname>
          </string-name>
          , É. Juliot,
          <string-name>
            <given-names>S.</given-names>
            <surname>Lacrampe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Piers</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Brun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Goubet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Lussaud</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Allilaire</surname>
          </string-name>
          , “
          <article-title>Acceleo user guide</article-title>
          ,”
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>V.</given-names>
            <surname>Guana</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Gaboriau</surname>
          </string-name>
          , and E. Stroulia, “Chaintracker:
          <article-title>Towards a comprehensive tool for building code-generation environments</article-title>
          ,”
          <source>in Proceedings of the 2014 International Conference on Software Maintenance and Evolution (ICSME)</source>
          . IEEE Press,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>V.</given-names>
            <surname>Guana</surname>
          </string-name>
          and E. Stroulia, “
          <article-title>Chaintracker, a model-transformation trace analysis tool for code-generation environments,”</article-title>
          <source>in Theory and Practice of Model Transformations</source>
          . Springer,
          <year>2014</year>
          , pp.
          <fpage>146</fpage>
          -
          <lpage>153</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>J.</given-names>
            <surname>Warmer</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Kleppe</surname>
          </string-name>
          ,
          <article-title>The object constraint language: getting your models ready for MDA</article-title>
          .
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>V.</given-names>
            <surname>Guana</surname>
          </string-name>
          , E. Stroulia, and
          <string-name>
            <given-names>V.</given-names>
            <surname>Nguyen</surname>
          </string-name>
          , “
          <article-title>Building a game engine: A tale of modern model-driven engineering</article-title>
          ,” in
          <source>Fourth International Workshop on Games and Software Engineering (GAS</source>
          <year>2015</year>
          ),
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>V.</given-names>
            <surname>Guana</surname>
          </string-name>
          and E. Stroulia, “
          <article-title>Phydsl: A code-generation environment for 2d physics-based games</article-title>
          ,” in
          <source>2014 IEEE Games, Entertainment, and Media Conference (IEEE GEM)</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>