<!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>Turning</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>The Key-Challenge of Incrementality</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>MMooddel-Beaseld sSoftwIarneEnsginiederineg(MBOSE) iusa tsoftware engineering approach that promotes models to first-class artefacts of the software development and maintenance lifecycle. In MBSE, rigorously defined - and often domain-specific - models are used to capture the essence of (parts of) the system under development at an appropriate level of abstraction, and are then used to reason about Alfa Yohannis, Dpirmopietrrtiiess oKf tohleosvysotesm, F(ei.og.nvaia mPoodlealcckhecking and simulation), and eventually to produce low-level Departmeinmtplementation artefacts (e.g. source code, configuration scripts) in an automated fashion. MBSE of Computer Science has demonstrated a strong potential to drastically improve productivity and consistency in software UndievveelrospimtyenotfbyYroedrkucing development time [1], cost [2] and the probability of human-induced errors York[3,].UTnhiitseids wKidinelgydreocmognised in industry where studies (e.g. [4, 5]) have shown that model-based development is used extensively. fary506, dimitris.kolovos, fiona.pollackg@york.ac.uk and we present a roadmap for further work in this direction•. Validaoterdgaangiasinasttioandaolmacihn-asrptecmificodcoenls.traWinth(ethnat tnhoeemvpalloiydeaetidoirnectclyomnastnraagienst more than</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>• Transfiotrmveedriinfitoesa ntuhmabteraolflemthprloeyeeeerempoprltos y(pelaeisn temxtafinleasg,eonefefowreearchtehmanploy7ee) through
a model-to-text transformation. Eacthherepmorotsdheolu-tldo-ctoenxtatinttrhaennsafomremoaftthioenemtphleoynee, and the</p>
      <p>other employees, and
I. INTRODUCTION names of her direct subordinates.</p>
      <p>produces three text files that correspond to the employees in
To reap the benefits of Model-Based Software EngineeFriignugres 3thaend 4 are twoInconsecutive versions Fofiga.samptlheeorganisationalucphadrattmedodel. When the
model. the sequel, in 2, model is to
in the context of large and complex systems, the abilviatylidattoion constraint is evaluated against the first version of the model (Figure 3), it verifies that all
three emploryeefleescmtatnhaagteafenweewrtheamnp7lootyheereehmapsloybeeeesn,ahnidrethde (mRoidcehl-mto-otenxdt)traunnsdfoer mration then
process large models in an incremental fashion as they epvroodluvcees thtrheee tmexatnfilaegs ethmatecnotrreosfpoJnedn.to the employees in the model.
is essential. Current incremental model processing techniques
only deliver limited performance benefits due to slow and
imprecise model change detection capabilities or are limited
to a single-developer environment; not realistic for real-world
software development projects.</p>
      <p>The research introduced in this paper aims at enaKbolloivnogs FFiigg.u1re. 3I:nIintiitaiallvveerrssioionnoofPfatthhreetBoo2rrggaanniissaattiioonnaall cchhaarrtt mmooddeell. MODIO
flexible and high-performance incremental model processing
through change-based model persistence. That is, instea dIn othfe sequel, in Figure 4, the model is updated to reflect that a new employee has been hired
(Richmond) under the management of Jen.
persisting snapshots of the state of models, we propose turnAinngon-incremental model validation engine, would treat the model of Figure 4 as if it was a
models inside out and persisting their change historyn.ewThmeodel and would evaluate the constraint above against every employee in the model. An
inproposed approach has the potential to deliver step-cchraenmgeental model validation engine on the other hand would identify that the previously established
14
performance benefits in incremental model processing, as well
as a wide range of other benefits and novel capabilities.</p>
      <p>The rest of the paper is structured as follows. Section II
reviews the key-challenge of incrementality in MBSE. Section
III provides an overview of existing approaches for identifying
changes in models. Section IV overviews our proposed
approach and Section V discusses our prototype implementation</p>
      <p>FFigigu.re2.4:MMooddiified version ooffththeeoorgrgaannisisaattioionnaallcchhaarrttmmooddeellofoFfiFgiugr.e13.
on top of the Eclipse Modelling Framework. The potseantistifaacltion of Athencoonns-tirnaicnrtefomr eenmtpalolymeeosdMeolsvsaalniddaRtoioyncaennnogtinhaevewboeuelndpotrsesaibtlythcoempromised
benefits and novel capabilities, as well as the challengbeystheofchanmgeosdmealdoe,faFndigw.o2uldasonilyf riet-ewvaalsuaate ntheewcomnsotrdaienlt faonrJdenwaonudlRdicehvmaolnudatinestead.
change-based model persistence, are presented in Sect. VISaimndilarly, a non-incremental model-to-text transformation, would generate all employee reports
from scratchth(eoverwriting any previous versions ofethveemry19)e.mOn the contrary, an incremental
modelconstraint above against ployee in the model.</p>
      <p>Sect. VII respectively. Section VIII presents our evalutoa-tteioxnttranAsfnor minactiroenm, wenoutaldl idmenotdifyelthvatailtidonaltyionneedesngtoingeen,eorante tahenewotrheeprorhtfaonr dth,e new
emstrategy and Sect. IX concludes this paper.
managing an additional employee)—but not the reports of
Moss or Roy, as these cannot have been affected by the
changes made to the model.</p>
      <p>
        While the overhead of executing transformations and
validation constraints on small models like the one in Fig. 2 is
negligible, non-incremental execution can become a significant
bottleneck for large evolving models. As stressed in Selic’s
seminal work [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], with reference to model-to-text
transformation, “... this is particularly true in the latter phases of
the development cycle when programmers make many small
changes as they fine-tune the system. To keep this overhead
low, it is crucial for the code generators to have sophisticated
change impact analysis capabilities that minimize the amount
of code regeneration”.
      </p>
      <p>
        As demonstrated by the pioneering work of Egyed [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], to
achieve incremental re-execution of (deterministic) queries on
structured models, an execution engine needs to:
1) Record model element property accesses during the
      </p>
      <p>initial execution of the queries;
2) Identify new and deleted elements and modified model</p>
      <p>element properties in the new version of the model;
3) Combine the information collected in the steps above
to identify the subset of (potentially) affected
rules/queries/templates that need to be re-executed.</p>
    </sec>
    <sec id="sec-2">
      <title>To illustrate this, we use an OCL implementation of the domain-specific constraint in List. 1.</title>
      <p>Listing 1. OCL constraint requiring that no employee directly manages more
than 7 other employees.
1 context Employee
2 inv NoMoreThan7: self.manages-&gt;size() &lt;= 7</p>
    </sec>
    <sec id="sec-3">
      <title>During the initial evaluation of the constraint on the model</title>
      <p>of Fig. 1, an incremental OCL engine would compute the
property access trace displayed in Table I as a side-product.
Now, when the model is updated (Fig. 2), the execution engine
can identify that:</p>
    </sec>
    <sec id="sec-4">
      <title>There is new element in the model (e4 - Richmond) for</title>
      <p>which the constraint has not been evaluated;
The value of the manages property of Jen (e3) has
changed, and as such, it needs to re-evaluate the
constraint on this model-element.</p>
      <p>
        Egyed has shown that the property-access recording
approach is applicable to queries of arbitrary complexity, as long
as they are deterministic. More recent work has shown that
variants of this approach can be used to achieve incrementality
in a wide range of model processing operations, including
model-to-model transformation [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], model-to-text
transformation [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], model validation, and pattern matching [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]—as long
as changes to models can be precisely identified (step 2 in the
list above).
      </p>
    </sec>
    <sec id="sec-5">
      <title>III. IDENTIFYING CHANGES IN MODELS</title>
    </sec>
    <sec id="sec-6">
      <title>There are two approaches in the literature for identifying changes in models in order to enable incremental re-execution of model processing operations.</title>
      <p>
        Notifications. In this approach, the incremental execution
engine needs to hook into the notification facilities provided
by the modelling tool through which the developer edits the
model, so that the engine can directly receive notifications
as soon as changes happen (e.g. a new employee (e4) has
been added, the name property of employee e4 has been
changed to “Richmond”). This is an approach taken by the
IncQuery incremental pattern matching framework [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] and
the ReactiveATL incremental model-to-model transformation
engine [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. The main advantage of this approach is that precise
and fine-grained change notifications are provided for free by
the modelling tool (and thus do not need to be computed by the
execution engine—which as discussed below can be expensive
and inefficient). On the downside, this approach is a poor
fit for collaborative development settings where modelling
and automated model processing activities are performed by
different members of the team.
      </p>
      <p>
        Model Differencing. This approach eliminates the coupling
between modelling tools and incremental execution engines.
Instead of depending on live notifications, in this approach
the developer in charge of automated model processing, needs
to have access to a copy of the last version of the model
that the model processing program (e.g. the model-to-text
transformation) was executed upon, so that it can be compared
against the current version of the model (e.g. using a
modeldifferencing framework such as SiDiff [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] or EMFCompare1)
and the delta can be computed on demand. The main advantage
of this approach is that it works well in a collaborative
development environment where typically developers have
distinct roles and responsibilities. On the downside, model
comparison and differencing are computationally expensive
and memory-greedy (both versions of the model need to
be loaded into memory before they can be compared), thus
largely undermining the time and resource saving potentials
of incremental re-execution. This approach is adopted by the
Xpand model-to-text transformation language. According to
the developers of the language, using this approach, a speed-up
of only around 50% is observed compared to non-incremental
transformation2, which is consistent with our experience from
using Xpand.
      </p>
      <p>In summary, incremental model processing currently
delivers significant performance benefits only in a single-developer
environment where the modeller is also responsible for
performing all the (incremental) model processing operations.</p>
    </sec>
    <sec id="sec-7">
      <title>1https://www.eclipse.org/emf/compare/</title>
      <p>2http://wiki.eclipse.org/Xpand/New And Noteworthy#Incremental</p>
      <p>Generation
1 &lt;session id="s1"/&gt;
2 &lt;create eclass="Employee" epackage="employee" id="0"/&gt;
3 &lt;add-to-resource position="0"&gt;&lt;value eobject="0"/&gt;&lt;/add-to-resource&gt;
4 &lt;set-eattribute name="name" target="0"&gt;&lt;value literal="Roy"/&gt;&lt;/set-eattribute&gt;
5 &lt;create eclass="Employee" epackage="employee" id="1"/&gt;
6 &lt;add-to-resource position="1"&gt;&lt;value eobject="1"/&gt;&lt;/add-to-resource&gt;
7 &lt;set-eattribute name="name" target="1"&gt;&lt;value literal="Jen"/&gt;&lt;/set-eattribute&gt;
8 &lt;create eclass="Employee" epackage="employee" id="2"/&gt;
9 &lt;add-to-resource position="2"&gt;&lt;value eobject="2"/&gt;&lt;/add-to-resource&gt;
10 &lt;set-eattribute name="name" target="1"&gt;&lt;value literal="Moss"/&gt;&lt;/set-eattribute&gt;
11 &lt;remove-from-resource&gt;&lt;value eobject="0"/&gt;&lt;/remove-from-resource&gt;
12 &lt;add-to-ereference name="manages" position="0" target="1"&gt;&lt;value eobject="0"/&gt;&lt;/add-to-ereference&gt;
13 &lt;remove-from-resource&gt;&lt;value eobject="2"/&gt;&lt;/remove-from-resource&gt;
14 &lt;add-to-ereference name="manages" position="1" target="1"&gt;&lt;value eobject="2"/&gt;&lt;/add-to-ereference&gt;
15 &lt;session id="s2"/&gt;
16 &lt;create eclass="Employee" epackage="employee" id="3"/&gt;
17 &lt;add-to-resource position="1"&gt;&lt;value eobject="3"/&gt;&lt;/add-to-resource&gt;
18 &lt;set-eattribute name="name" target="3"&gt;&lt;value literal="Richmond"/&gt;&lt;/set-eattribute&gt;
19 &lt;remove-from-resource&gt;&lt;value eobject="3"/&gt;&lt;/remove-from-resource&gt;
20 &lt;add-to-ereference name="manages" position="2" target="2"&gt;&lt;value eobject="3"/&gt;&lt;/add-to-ereference&gt;
model, it can readily identify the changes that have been made
to the model since then (i.e. in session s2 - lines 15-20) instead
of having to rediscover them through (expensive) state-based
model differencing.</p>
    </sec>
    <sec id="sec-8">
      <title>V. PROTOTYPE IMPLEMENTATION</title>
    </sec>
    <sec id="sec-9">
      <title>As a result, in collaborative development environments, de</title>
      <p>velopers need to either forgo incremental model processing
altogether or to work around this limitation by manually
steering model processing programs to process only subsets
of their models, which is cumbersome and error prone.</p>
    </sec>
    <sec id="sec-10">
      <title>IV. PROPOSED APPROACH</title>
      <p>We have implemented a prototype3 of the change-based</p>
      <p>The ambition of this research is to enable high-performance model persistence format using the notification facilities
proincremental model management in collaborative software de- vided by the Eclipse Modelling Framework. In our
implemenvelopment environments by challenging one of the funda- tation we use the ChangeEventAdapter class, a subclass of
mental assumptions of contemporary modelling frameworks EMF’s EContentAdapter4, to receive and record Notification5
and tools: as opposed to persisting snapshots of the state events produced by the framework for every model-element
of models (which is what virtually all modelling tools and level change.
frameworks currently do), we propose turning models inside Since not all change events are relevant to change-based
out and persisting their change history instead. persistence (e.g. EMF also produces change notifications when
Listing 3. State-based representation of the model of Figure 2 in (simplified) listeners are added/removed from the model), we have defined
XMI. a set of event classes to represent events of interest. The event
12 &lt;E&lt;mmpalnoaygeeesxxmmii::iidd==""ee21""nnaammee==""JReony""&gt;/&gt; classes are depicted in Fig. 3 as subclasses of the ChangeEvent
3 &lt;manages xmi:id="e3" name="Moss"/&gt; abstract class.
45 &lt;/E&lt;mmapnlaogyeese&gt;xmi:id="e4" name="Richmond"/&gt; whTichhe cCahnanagcceoEmvemntodcalatessbhoaths asinmgulelt-iv-vaalulueedd(ev.agl.uesseta/attdrdib)uoter</p>
      <p>To illustrate the proposed approach, List. 3 shows a state- mutli-valued events (e.g. addAll/removeAll). ChangeEvent can
based representation of the model of Fig. 2 in (simplified) also accommodate different types of values, such as
EObXMI, and List. 2 shows the proposed equivalent change-based jects for EReferenceEvents, and primitive values (e.g. Integer,
representation of the same model. Instead of a snapshot of String) for EAttributeEvents. The ChangeEvent class also has
the state of the model, the representation of List. 2 captures a position attribute to hold the index of an EObject or a literal
the complete sequence of change events (create/set/add/re- when they are added to a Resource, EReference, or EAttribute
move/delete) that were performed on the model since its with multiple values (Lst. 2, line 3, 6, 9, 12, 14, 17, 20).
creation, organised in editing sessions (2 editing sessions in Every time an EObject is added to the model, a
CreateEObthe case of this model). Replaying these changes produces jectEvent and an AddToResourceEvent are recorded (lines 2-3,
the same state as the one captured in List. 3, so the proposed 5-6, 8-9, and 16-17 in Lst. 2). When an EObject is deleted, or
representation carries at least as much information as the state- moved to a containment EReference deeper in the model (Lst.
based representation.</p>
      <p>Such a representation is particularly suitable for incremental 3The prototype is available under https://github.com/epsilonlabs/emf-cbp.
model processing. For example, if the model-to-text trans- em4fh/ettcpo:r//ed/uotwiln/EloCaodn.etcelnitpAsed.aoprtge/rm.hotmdelling/emf/emf/javadoc/2.11/org/eclipse/
formation discussed above “remembers” that in its previous 5http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/
invocation it had processed up to editing session s1 of the emf/common/notify/Notification.html</p>
    </sec>
    <sec id="sec-11">
      <title>2, line 12, 14, 20), a RemoveFromResourceEvent (Lst. 2, line</title>
      <p>11, 13, 19) is recorded.</p>
      <p>The ChangeEventAdapter receives EMF change
notifications in its notifyChanged() method and filters and transforms
them into appropriate change events. As an example of how
notifications are filtered and transformed, Listing 4 shows how
we handle Notification.UNSET events based on the type of the
changed feature i.e. an UnsetEAttributeEvent is instantiated if
the feature of the notifier is an EAttribute, or an
UnsetEReferenceEvent is created if the notifier is an EReference. The
transformed instances are then stored into a list of events in
ChangeEventAdapter (changeEvents) for persistence.
encapsulate all change recording functionality while the role
of its concrete subclasses is to implement serialisation and
de-serialisation. For example, CBPXMLResourceImpl persists
changes in a line-based format where every change is serialised
as a single-line XML document. In this way, when a model
changes, we can append the new changes to the end of the
model file without needing to serialise the entire model again.
We have also implemented a CBPXMLResourceFactory class
that extends EMF’s ResourceFactoryImpl, as the factory class
for change-based models. Figure 4 shows the relationships
between these classes.</p>
    </sec>
    <sec id="sec-12">
      <title>To integrate seamlessly with the EMF framework and to</title>
      <p>eventually support multiple concrete change-based
serialisation formats (e.g. XML-formatted representation for
readability and binary for performance/size), we have created
the CBPResource abstract class, that extends EMF’s
builtin ResourceImpl class. The role of the abstract class is to</p>
    </sec>
    <sec id="sec-13">
      <title>VI. BENEFITS AND NOVEL CAPABILITIES</title>
    </sec>
    <sec id="sec-14">
      <title>Beyond facilitating incremental processing, the proposed</title>
      <p>representation also has the potential to deliver a wide range
of benefits and novel capabilities, compared to the currently
prevalent state-based representations, some of which are
discussed below.</p>
      <p>With appropriate tool support, modellers will be able to
“replay” (part of) the change history of a model (e.g. to
understand design decisions made by other developers,
for training purposes). In state-based approaches, this can
be partly achieved if models are stored in a
versioncontrol repository (e.g. Git). However, the granularity
would only be at the commit level.</p>
      <p>By analysing models serialised in the proposed
representation, modelling language and tool vendors will be able
to develop deeper insights into how modellers actually
use these languages/tools in practice and utilise this
information to guide the evolution of the language/tool.
By attaching additional information to each session (e.g.
the id of the developer, references to external
documents/URLs), sequences of changes can be traced back
to the developer that made them, or to requirements/bug
reports that triggered them.</p>
      <p>Persisting changes to large models after an editing session
will be significantly faster compared to serialising the
entire state of the model, as only changes made during
the session will need to be appended to the model file.
The performance and precision of model comparison and
merging can be substantially improved, particularly for
large models with shared editing histories.</p>
    </sec>
    <sec id="sec-15">
      <title>VII. CHALLENGES AND FUTURE WORK</title>
    </sec>
    <sec id="sec-16">
      <title>The proposed approach also comes with a number of</title>
      <p>challenges that this research will need to overcome.</p>
      <p>Loading Overhead. While, as discussed above, persisting
changes to large models is expected to be much faster and
resource-efficient compared to state-based approaches, loading
models into memory by naively replaying the entire change
history is expected to have a significant overhead. To address
this challenge, we will develop dedicated algorithms and data
structures that will reduce the cost of change-based model
loading (e.g. by recording and ignoring events – events that
are later overridden or cancelled out by other events).</p>
      <p>Fast-Growing Model Files. Persisting models in a
changebased format means that model files will keep growing in
size during their evolution significantly faster than their
statebased counterparts. To address this challenge, (1) we will
propose sound change-compression operations (e.g. remove
older/unused information) that can be used to reduce the
size of a model in a controlled way. (2) We will develop
a compact textual format that will minimise the amount of
space required to record a change (a textual line-separated
format is desirable to maintain compatibility with file-based
version control systems). (3) We will propose a hybrid model
persistence format which will be able to incorporate both
change-based and state-based information.</p>
    </sec>
    <sec id="sec-17">
      <title>VIII. EVALUATION STRATEGY</title>
      <p>The findings of the research will be evaluated in the small
in the context of the tasks in which they will be developed,
and in the large through industrial case studies. For the first
type of evaluation (in the small), where there are existing
approaches that the algorithms and tools developed in this
research seek to outperform (e.g. change-based incremental
validation vs. state-based incremental validation), comparative
evaluation will be conducted to assess the benefits and
limitations of our approaches. For algorithms and tools that have no
direct competitors in the literature, their contributions will be
assessed in comparison to the baseline they seek to improve
(e.g. in this case, persisting full change histories).</p>
    </sec>
    <sec id="sec-18">
      <title>IX. CONCLUSIONS</title>
      <p>Through turning models inside out and persisting their
change history, this research aims at enabling
highperformance incremental model processing in collaborative
development settings. The proposed approach also has the
potential to enable model analytics, more fine-grained tracing
and to improve the precision and performance of model
comparison and merging. A prototype implementation of a
change-based persistence format has been presented, the main
envisioned challenges have been listed and an evaluation
strategy has been outlined.</p>
    </sec>
    <sec id="sec-19">
      <title>ACKNOWLEDGMENTS</title>
    </sec>
    <sec id="sec-20">
      <title>This work was partly supported through a scholarship</title>
      <p>managed by Lembaga Pengelola Dana Pendidikan Indonesia
(Indonesia Endowment Fund for Education).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>B.</given-names>
            <surname>Selic</surname>
          </string-name>
          , “
          <article-title>The pragmatics of model-driven development,” IEEE software</article-title>
          , vol.
          <volume>20</volume>
          , no.
          <issue>5</issue>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>25</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>A.</given-names>
            <surname>Egyed</surname>
          </string-name>
          , “
          <article-title>Automatically detecting and tracking inconsistencies in software design models</article-title>
          ,
          <source>” IEEE Transactions on Software Engineering</source>
          , vol.
          <volume>37</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>188</fpage>
          -
          <lpage>204</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Tisi</surname>
          </string-name>
          , “
          <article-title>Towards incremental execution of atl transformations</article-title>
          .
          <source>” ICMT</source>
          , vol.
          <volume>10</volume>
          , pp.
          <fpage>123</fpage>
          -
          <lpage>137</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Ogunyomi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. M.</given-names>
            <surname>Rose</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Kolovos</surname>
          </string-name>
          , “
          <article-title>Property access traces for source incremental model-to-text transformation</article-title>
          ,
          <source>” in European Conference on Modelling Foundations and Applications</source>
          . Springer,
          <year>2015</year>
          , pp.
          <fpage>187</fpage>
          -
          <lpage>202</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>I.</given-names>
            <surname>Ra</surname>
          </string-name>
          <article-title>´th, A´</article-title>
          . Hegedu¨s, and D. Varro´, “
          <article-title>Derived features for emf by integrating advanced model queries</article-title>
          ,
          <source>” Modelling Foundations and Applications</source>
          , pp.
          <fpage>102</fpage>
          -
          <lpage>117</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>U.</given-names>
            <surname>Kelter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wehren</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Niere</surname>
          </string-name>
          , “
          <article-title>A generic difference algorithm for uml models</article-title>
          .
          <source>” Software Engineering</source>
          , vol.
          <volume>64</volume>
          , no.
          <fpage>105</fpage>
          -
          <issue>116</issue>
          , pp.
          <fpage>4</fpage>
          -
          <lpage>9</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>