<!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>On Reducing Model Transformation Testing Overhead</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Roberto Rodriguez-Echeverria</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Fernando Macias</string-name>
          <email>Fernando.Macias@hib.no</email>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Adrian Rutle</string-name>
          <email>Adrian.Rutle@hib.no</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Bergen University College</institution>
          ,
          <addr-line>Bergen</addr-line>
          ,
          <country country="NO">Norway</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Extremadura</institution>
          ,
          <addr-line>Cáceres</addr-line>
          ,
          <country country="ES">Spain</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Oslo</institution>
          ,
          <country country="NO">Norway</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Model-Driven Engineering is essentially based in metamodel definition, model edition and the specification of model transformations (MT). In many cases the development and maintenance of these transformations are still carried out without the support of proper methods and tools to reduce the effort and cost related to them. As a result, several model transformation testing approaches have been defined over the past decade. However, they usually introduce some kind of overhead on transformation development or maintenance which has not been properly considered heretofore. In this work, we will present MoTe, a novel contract-based model transformation testing approach specifically designed to reduce testing overhead. First, we present main overhead sources in core stages of contract-based model transformation testing. Then, we give a detailed introduction of the main features and design decisions behind MoTe in order to reduce overhead in all those main stages. Furthermore, we will discuss some significant results from a comparative case study.</p>
      </abstract>
      <kwd-group>
        <kwd>Model-Driven Engineering</kwd>
        <kwd>Model transformation testing</kwd>
        <kwd>Contractbased specification</kwd>
        <kwd>Testing Oracle</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>
        Over the past decade, several model transformation testing (MTT) approaches have been
defined [
        <xref ref-type="bibr" rid="ref1 ref11 ref2 ref8">3,2,12,9</xref>
        ]. They allow engineers to specify and run regression tests to assess the
behavior of their model transformations. However, these approaches usually introduce
enough overhead to hinder their wider application. In model transformation testing,
contract-based approaches are organized in three main stages: (1) contract specification,
(2) test oracle execution, and (3) result interpretation.
      </p>
      <p>Different activities in these stages may introduce significant overhead. However, it
has never been considered before. Reducing testing overhead is a primary goal for our
approach in order to become a viable alternative in industrial scenarios.</p>
      <p>
        In this paper, we present the contract-based MTT approach, named MoTe, which we
briefly introduced in [
        <xref ref-type="bibr" rid="ref10">11</xref>
        ], as one of the main parts of our approach to model
transformation evolution assistance. In our previous work we focused on result interpretation,
while contract specification and execution are elaborated in this paper.
      </p>
      <p>This paper is organized as follows. In Section 2 we introduce the main aspects causing
overhead in MTT. In Section 3 we present a domain-specific language addressing the
specific concepts on which MoTe relies. Section 4 introduces MoTe’s execution process
and technology. Section 5 highlights the main contributions of MoTe concerning result
interpretation. In Section 6 we show an example of applying MoTe in a comparative
case study. Section 7 discusses related and future work, and outlines a conclusion.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Testing overhead</title>
      <p>Testing overhead is obviously a necessary tradeoff between development cost and degree
of behaviour verification. In order to reduce this overhead we should first identify how
it is produced. We will decompose testing overhead according to the three main stages
of contract-based MTT to gain some insight about how the different activities in those
stages may introduce overhead from a MT developer’s viewpoint. We have intentionally
not included test-model generation because we are not interested in that stage now.</p>
      <p>
        Contract specification refers to the process of defining invariants between input and
output models, and it is achieved by using concepts, tools and other artefacts for edition
and maintainance of contracts. At this stage we then focus on specification overhead.
Overhead decomposition may be defined by analysis the following aspects related to
specification:
– Language for contract specification. Some MTT approaches [
        <xref ref-type="bibr" rid="ref11">12</xref>
        ] propose OCL
to define invariants between input and output models (contracts), while others [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ]
argue that OCL is not the right choice to make. Generally, using a DSL has clear
advantages, e.g., simplifying learning and understability, and reducing maintenance
cost. DSL usage may then clearly reduce edition overhead.
– Concrete syntax. Assuming the existence of a DSL, some approaches [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ] argue
graph-based syntax is clearly more appropriate for input/output patterns definition,
which are key for contract specification. However, user diversity [
        <xref ref-type="bibr" rid="ref3">4</xref>
        ] is a more
adequate property to satisfy when arguing about user experience, so that every user
could use the syntax that suits her better for a concrete project. As a result, forcing
a MT developer to use a syntax could conceivable be a source of specification
overhead.
– Contract verification approach and tooling. Contract conflicts, i.e., contradictory
contracts or redundant contracts, should be identified in order to properly assist
the MT developer in contract specification. The complexity of this activity and the
kind of tools needed are dependent on language complexity. So a tradeoff between
language expressiveness and contract verification effort should be made in order to
avoid unnecessary specification overhead for this reason.
      </p>
      <p>
        Test oracle execution refers to the process and technology used for actually running
the contract checking (execution overhead). A further overhead decomposition may be
defined by analyzing the following aspects related to execution:
– Invasive process. Basically, should input or output models be modified in order
to facilitate invariant checking? For example, Tracts [
        <xref ref-type="bibr" rid="ref11">12</xref>
        ] uses an OCL interpreter
which cannot use two different models as input, hence, input and output should be
combined into a single model to check invariants. Obviously, invasive proccesses
delve into an increment of the execution overhead.
– Technology. Execution technology may introduce some significant overhead in the
case of requiring specific tools built upon a different technology stack than the one
used by MT developers. In this case, we can consider configuration overhead, but
also learning overhead. Both may be drastically reduced when keeping the same
technology stack for test oracle artefacts, which may then be easily inspected.
      </p>
      <p>Result interpretation refers to how much effort is needed to make results actionable,
i.e., useful to make a decision or to take an (automatic) action. If testing results are not
focused on rapidly addressing the cause of the error, then its interpretation may have a
negative impact on testing overhead. A further overhead decomposition may be defined
by analysing the following:
– Testing style. Different testing styles yield different result reports. Contract-based
MTT approaches usually follow unit testing style, so they basically report about
contract (test) failing or passing. Result reporting is just a list of passing and failing tests,
which should usually be manually analysed (interpretation overhead). Nevertheless,
this testing style might not be always the best choice and alternative styles should
then be considered. Result reporting should be designed for quick interpretation
according to the MT developers’ main goal.
– Type of results. A binary value is a low-level type of result which demands human
intervention for its proper interpretation inside of a context. Although binary values
might be enough for unit testing, other testing styles might demand more meaningful
results which allow easily understanding how a MT is behaving. In this sense,
metrics (aggregated numeric values) might give additional information about an
error, such as its extension for a real input or some hints about its type.
– Focus of results. Test result reports that are focused on contracts are only useful to
locate failure, while result reporting focused on output may give extra information,
e.g., how many output elements are affected by a specific error. Furthermore, we
believe output-focused result reporting aligns better with the way MT developers
think, because they are thinking about the output, not in the contracts, when they
build MTs. Therefore, output-centred result reporting may reduce interpretation
overhead.
– Result actionability. This aspect may encompass a range of different probable
actions, but the most common may be to detect the source of error and to identify
proper repairing actions. In general, we assume that the higher the degree of result
actionability the less overhead is generated on result interpretation.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Contract Specification</title>
      <p>According to the necessities of MoTe computation, we have defined a DSL which
provides the developer with a concise syntax specifically designed for the definition of
testing contracts focused on our metrics calculation. Moreover, given that rule-based
MTs have been the norm in our main application scenarios heretofore, we decided to
define a textual concrete syntax for our language. Nevertheless, regarding user diversity,
the definition (reutilization) of graph-based syntaxes remains as a subject of study.
3.1</p>
      <sec id="sec-3-1">
        <title>Language</title>
        <p>The abstract syntax of MoTe is defined as an Ecore metamodel which is partially shown
in Fig. 1. Its primary element is contract which allows setting a relationship between
an input pattern and an output pattern. Basically, contracts allow defining constraints
between input and output models, and hence constraints over the transformation.</p>
        <p>The main components of a contract are input pattern, output pattern and
detection criteria. Input and output patterns are defined according to a collection of pairs
(Type:variable) and some conditional criteria (inclusion and exclusion). Every
pair indicates an existing Type in the input or output metamodels, and also a name (or
variable) that is convenient to be able to define conditional expressions related to input
or output elements. Therefore, those names will be used as variables in the definition
of the inclusion and exclusion criteria, which allow expressing pattern characteristics
in a positive or negative way. It is important to stress that only input metamodel types
are allowed in the input pattern, while correspondingly only output metamodel types are
allowed in the output pattern. As a result, criteria defined for the input pattern cannot
contain expressions based on output elements, and viceversa. Only detection criteria can
specify expressions concerning elements from input and output elements, because its
mission is to express conditions that input-output relationships must hold (invariants).</p>
        <p>Although the definition of a contract demands to specify input and output patterns, it
is not necessary that both are defined for two special cases: preconditions and
postconditions. To define a precondition with a contract only its input pattern should be specified.
Meanwhile, to define a postcondition with a contract only its output pattern should be
specified. Detection criteria is not necessary in those special cases because there is no
need to define a relationship between input and output. For the sake of brevity, we do
not consider preconditions and postconditions in the rest of this work.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Concrete syntax</title>
        <p>The textual concrete syntax of MoTe is defined using EMFText [1]. This simple syntax
permits specifying all the relevant concepts of our approach. As shown in the following
listing, input and output patterns are specified as a list of (Type:variable) pairs,
while all the different criteria are specified as a list of predicates.</p>
        <p>1 contract &lt;cname&gt;{
2 input: (&lt;iT1&gt;:&lt;iv1&gt;, ... &lt;iTN&gt;:&lt;ivN&gt;)
3 inclusion: &lt;p_name&gt;(&lt;p_expresion&gt;)...
4 exclusion: &lt;p_name&gt;(&lt;p_expresion&gt;)...
5
6 output: (&lt;oT1&gt;:&lt;ov1&gt;, ... &lt;oTN&gt;:&lt;ovN&gt;)
7 inclusion: &lt;p_name&gt;(&lt;p_expresion&gt;)...
8 exclusion: &lt;p_name&gt;(&lt;p_expresion&gt;)...
9
10 detection: &lt;p_name&gt;(&lt;p_expresion&gt;)...
11 }</p>
        <p>Regarding criteria specification, in order to reduce overhead we consider simplicity
as a key property for the DSL, which may be seen as a threefold target:
– Simple syntax. Criteria specification and understandability should be easy.
Contracts are mainly defined at a more abstract level than actual transformations.
Therefore, contracts should be easier to define than actual transformations.
– Simple checking. Contract verification should be performable from a pragmatical
point of view (decidable semantics).
– Simple debugging. The more information we get about the violated contract the
better. Therefore, a fine-grained definition of criteria should be provided, so that
every violated condition can be traced back.</p>
        <p>In this work, predicate expressions are used for the specification of all the different
criteria of a contract (inclusion, exclusion and detection). Basically, each predicate
has got a name and allows defining equality expressions. Moreover, predicates can be
logically connected by conjunction or disjunction operators. For example, the following
predicates, which could conceivably be part of a detection criteria, state that input and
ouput elements should have the same name and color:
p1(input.name = output.name) and p2(input.color = output.color)
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Contract verification</title>
        <p>
          The semantics of our DSL is based on graph transformations (GT) [
          <xref ref-type="bibr" rid="ref6">7</xref>
          ], more precisely,
typed attributed graph transformations with type-inheritance [
          <xref ref-type="bibr" rid="ref5">6</xref>
          ]. This version of GT is
inspired by UML- and EMF- like models in which graph nodes can have (i) attributes
(with values from a predefined domain, e.g., String or Integer), and (ii) inheritance edges
which are used in the same sense as in object oriented models.
        </p>
        <p>
          In GT we use production rules of the form p : L → R, where L and R are graphs
and p is a graph morphism which maps elements from L to R. For attributed GT, one
can pose conditions over values of the attributes while picking/calculating the matches
(during application). These conditions are defined as expressions over elements from the
source and target graphs as seen in [
          <xref ref-type="bibr" rid="ref7 ref8">9,8</xref>
          ]. We formalise the contracts as production rules
in attributed GT. The input pattern corresponds to L while the output pattern corresponds
to R. Exclusion and Inclusion criteria correspond to NAC and PACs, respectively. The
detection criteria corresponds to the graph morphism from L to R and the conditions
which are posed on this morphism. By employing GT as the formal foundation, we can
rely on the rich theory and results of GT for verification of the contracts, e.g., one can
reason about conflicts, contradictions and relations between contracts [
          <xref ref-type="bibr" rid="ref7">8</xref>
          ].
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Test oracle execution</title>
      <p>
        As presented in [
        <xref ref-type="bibr" rid="ref10">11</xref>
        ], our test oracle excution consists on the computation of precision
and recall metrics for every relation between input and ouput patterns defined by a
contract. Every contract defines a partition of the candidate set of input patterns into
four subsets. Inside the candidate set, two other subsets are defined: Transformed
and Excluded. All the input patterns inside the former are those actually generating
output patterns. To find them we propose the definition of detection criteria. And, on the
contrary, the input patterns contained in the Excluded subset are those that should not be
transformed. Using those three sets, it is possible to obtain the number of True Positives
(TPs), False Positives (FPs) and False Negatives (FNs) generated by the MT according
to each contract and eventually to calculate the values of precision and recall for each
output pattern. As a result, we can get an overall measure of the (light) correctness of all
the transformation rules generating each output pattern.
4.1
      </p>
      <sec id="sec-4-1">
        <title>Process</title>
        <p>Metrics computation is implemented by a two-step process: (1) a new model is generated
by a model transformation as a result of querying input and output models and marking
every input element as TP, TN, FP or FN; and (2) this result model is queried in
order to aggregate all the results and provide the developer with an easy-to-understand
comprehensive report. This process is executed seamlessly for the MT developer. Input
and output preprocessing is not necessary in order to execute our test oracle.</p>
        <p>Result models have only one type of element which represents the result of checking
a contract for an input pattern. These elements are basically composed of an id attribute,
a reference to the input pattern (main element), a reference to the output pattern (main
element), a reference to the contract checked and a value attribute with the result of
checking the contract involved (TP, FP, TN, FN).
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Execution technology</title>
        <p>
          In order to compute the metrics, contracts should be compiled to a representation that
may be runnable on an execution engine. It would be also possible to interpret those
contracts by means of a specialized engine, however this alternative is not discussed
in this work. For the context of this work, we have selected ATL [
          <xref ref-type="bibr" rid="ref9">10</xref>
          ] as the target
representation, although any other language could be selected to not force developers
altering its technology stack. The contracts in our DSL could be straightforwardly
compiled to an ATL transformation. To this end, basically (exceptions not commented
here), an ATL matched rule should be generated for every contract with the following
structure (we are supposing all the elements have a name attribute):
1 rule &lt;contract_name&gt; {
2 from
3 input :&lt;input_type&gt;
4 &lt;input_inclusion_criteria&gt;
5 to
6 result : resultMM!Result (
7 inputType &lt;- inType,
8 outputType &lt;- outType,
9 contract &lt;- contract,
10 value &lt;- thisModule-&gt;
11 resultValue(input.isExcluded,
12 input.isTransformed)
13 ),
14
15 inType : &lt;input_type&gt; (
16 name &lt;- &lt;input_type&gt;.name
17 ),
        </p>
        <p>As shown, the ATL rule template has got 4 different explicit parameters: contract
name, input type, output type, and input inclusion criteria. Additionally, it has got 3
“implicit” parameters: input exclusion criteria, output inclusion criteria, and detection criteria.
The latter parameters are used to generate final isExcluded and isTransformed
helpers for the input type.</p>
        <p>Each ATL rule generates a result element into the result model. Basically, each
result element stores: a relationship between a concrete input element and a concrete
output element (inputType and outputType); the type of result obtained according
to the contract (i.e., TP, TN, FP or FN); and the name of the contract. Additionally,
every result is assigned a different id to facilitate likely debugging tasks. A helper
(resultValue) is in charge of returning the corresponding value of the result with
respect to isExcluded and isTransformed additional helpers, which are
responsible for implementing exclusion and detection criteria.</p>
        <p>As aforementioned, the output of this ATL transformation is a result model which
has labelled every input element with respect to the contract in which it is located and,
additionally, has related them with their corresponding output elements in the case they
have been generated, i.e., TP and FP cases.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Result Interpretation</title>
      <p>5.1</p>
      <sec id="sec-5-1">
        <title>Testing style</title>
        <p>Contrary to other common contract-based model testing approaches providing unit
testing for MTs, our approach is more an acceptance testing solution because we provide
developers with easy to interpret and comprehensive information about the behaviour
of the MT according to her requirements (expressed as contracts). Therefore she can
make an educated decision whether the MT behaviour is acceptable or not. From our
point of view, different application scenarios require different degrees of correctness to
consider a MT acceptable, e.g., in a Model-driven Reverse Engineering scenario some
degree of incorrectness might be acceptable when it is clearly located and it is extremely
less expensive to build a postproccesor to solve the problem than modifying the MTs
involved.</p>
      </sec>
      <sec id="sec-5-2">
        <title>Case</title>
        <p>Pr
Rc
MoTe computes precision and recall metrics as numeric results of the test oracle to
provide an evaluation of MT actual behaviour compared to expected behaviour. To
simplify result interpretation we reduce the set of possible values for the metrics to
4 values: 100 for perfect, 0 for worst result, t for a value in the range of 0 and 100
(threshold), NA for division by zero. According to these values, Table 1. presents the
categorisation of all possible result combinations. Case 1 represents the perfect situation:
all expected elements have been generated and all generated elements were expected.
Cases 1, 2, 3 and 4 define the most common situations, while cases 5, 6 and 7 are
specializations of them. Case 8 is an exceptional case: none of the contracts for that
output element is applicable on the input model. As a result, categorised meaningful
results are yielded by MoTe, reducing interpretation overhead.
In contrast to other approaches, MoTe reports results focusing on output instead of
contracts as the aggregation criteria. Therefore, developers get a summary report for each
output pattern taking into account all the different contracts constraining the generation
of each pattern. This summary basically consists of the result case obtained for this
output pattern. When some error case is yielded, a detailed report can be obtained to
know the number of TP, FP, TN, FN marks or, even, to receive precise information about
the specific predicate of a contract not satisfied for a concrete input-output instance.</p>
        <p>
          Moreover, results are basically serialized as CSV files. Therefore, they can be
visualised or further proccessed by mainstream tools, such as spreadsheets. At the same
time, given the categorisation of each result and all the additional information about
errors provided, MoTe is designed to produce results with high degree of actionability.
For example, in [
          <xref ref-type="bibr" rid="ref10">11</xref>
          ] we presented a proccess for suggesting repairing actions built upon
the results produced by our testing oracle.
6
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Case Study</title>
      <p>
        To validate our approach we have performed the case studies proposed by [
        <xref ref-type="bibr" rid="ref4">5</xref>
        ]. In this
section, for the sake of brevity, we just present a single example of this comparative
study. For example, the following code illustrates the specification of Tract 10 for the
UML2ER case4, which constraints the generation of StrongReference elements.
4 http://atenea.lcc.uma.es/index.php/Main_Page/Resources/MTB/UML2ER
      </p>
      <p>All MoTe contracts for the UML2ER case have been compiled to ATL and our
test oracle has been executed with the same input model. For example, it has
produced the results presented in figure 2 for mutant 03 which modifies a filter in rule
8 (StrongReference rule). We can observe that case 7 is the result obtained for
StrongReference, which indicates that the only candidate input element, according
to the previous contract, has not been transformed (FN).
7</p>
    </sec>
    <sec id="sec-7">
      <title>Related Work, Future Work and Conclusions</title>
      <p>
        To the best of our knowledge, this is the first work discussing overhead in model
transformation testing. Therefore, we only discuss about related contract-based MT
testing approaches herein. Although several approaches can be found in the literature [
        <xref ref-type="bibr" rid="ref1">2</xref>
        ],
we are just comparing MoTe to Tracts [
        <xref ref-type="bibr" rid="ref11 ref4">12,5</xref>
        ] and PAMOMO [
        <xref ref-type="bibr" rid="ref7">8</xref>
        ] mainly because they are
two of the best documented approaches. Table 2 summarizes our comparison according
to the overhead aspects we have previously defined.
      </p>
      <p>In this work we have presented MoTe, a novel contract-based model transformation
testing approach specially designed to reduce testing overheadA testing framework for
model transformations.</p>
      <p>As future work we plan to study results’ actionability in order to automatically repair
MTs. Further research on MTT overhead analysis and reduction also appears as part of
our short-term purposes. For example, human-based studies to assess whether MoTe
reduces interpretation overhead.</p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgements References</title>
      <p>Partially funded by Junta de Extremadura, Order 129/2015, 2nd of June.
1. EMFText project. http://emftext.org/. [Online; accessed 15-July-2016].</p>
      <sec id="sec-8-1">
        <title>Language</title>
      </sec>
      <sec id="sec-8-2">
        <title>Contracts Low</title>
        <sec id="sec-8-2-1">
          <title>PAMOMO</title>
        </sec>
      </sec>
      <sec id="sec-8-3">
        <title>Visual</title>
      </sec>
      <sec id="sec-8-4">
        <title>Graph theory</title>
      </sec>
      <sec id="sec-8-5">
        <title>Seamless</title>
      </sec>
      <sec id="sec-8-6">
        <title>Different stack</title>
      </sec>
      <sec id="sec-8-7">
        <title>Unit testing</title>
      </sec>
      <sec id="sec-8-8">
        <title>Binary</title>
      </sec>
      <sec id="sec-8-9">
        <title>Contracts Low</title>
      </sec>
      <sec id="sec-8-10">
        <title>Textual currently</title>
      </sec>
      <sec id="sec-8-11">
        <title>Graph theory/FOL</title>
      </sec>
      <sec id="sec-8-12">
        <title>Seamless</title>
      </sec>
      <sec id="sec-8-13">
        <title>Same stack</title>
      </sec>
      <sec id="sec-8-14">
        <title>Acceptance testing</title>
      </sec>
      <sec id="sec-8-15">
        <title>Metrics</title>
      </sec>
      <sec id="sec-8-16">
        <title>Output</title>
      </sec>
      <sec id="sec-8-17">
        <title>High</title>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Lukman</given-names>
            <surname>Ab</surname>
          </string-name>
          . Rahim and
          <string-name>
            <given-names>Jon</given-names>
            <surname>Whittle</surname>
          </string-name>
          .
          <article-title>A survey of approaches for verifying model transformations</article-title>
          .
          <source>Softw Syst Model</source>
          ,
          <volume>14</volume>
          (
          <issue>2</issue>
          ):
          <fpage>1003</fpage>
          -
          <lpage>1028</lpage>
          ,
          <year>June 2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Benoit</given-names>
            <surname>Baudry</surname>
          </string-name>
          , Sudipto Ghosh, Franck Fleurey, Robert France, Yves Le Traon, and
          <string-name>
            <surname>Jean-Marie Mottu</surname>
          </string-name>
          .
          <article-title>Barriers to Systematic Model Transformation Testing</article-title>
          .
          <source>Commun. ACM</source>
          ,
          <volume>53</volume>
          (
          <issue>6</issue>
          ):
          <fpage>139</fpage>
          -
          <lpage>143</lpage>
          ,
          <year>June 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Pierre</given-names>
            <surname>Bourque</surname>
          </string-name>
          and Richard E. Fairley.
          <article-title>Guide to the Software Engineering Body of Knowledge - SWEBOK v3.0</article-title>
          .
          <string-name>
            <surname>IEEE</surname>
            <given-names>CS</given-names>
          </string-name>
          ,
          <year>2014</year>
          version edition,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Loli</given-names>
            <surname>Burgueño</surname>
          </string-name>
          , Javier Troya, Manuel Wimmer, and Antonio Vallecillo.
          <article-title>Static Fault Localization in Model Transformations</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          ,
          <volume>41</volume>
          (
          <issue>5</issue>
          ):
          <fpage>490</fpage>
          -
          <lpage>506</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          6.
          <string-name>
            <given-names>M.</given-names>
            <surname>Cerioli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Margaria</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wermelinger</surname>
          </string-name>
          , Juan de Lara, Roswitha Bardohl, Hartmut Ehrig, Karsten Ehrig, Ulrike Prange, and
          <string-name>
            <given-names>Gabriele</given-names>
            <surname>Taentzer</surname>
          </string-name>
          .
          <article-title>Fundamental aspects of software engineering attributed graph transformation with node type inheritance</article-title>
          .
          <source>Theoretical Computer Science</source>
          ,
          <volume>376</volume>
          (
          <issue>3</issue>
          ):
          <fpage>139</fpage>
          -
          <lpage>163</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          7.
          <string-name>
            <given-names>Hartmut</given-names>
            <surname>Ehrig</surname>
          </string-name>
          , Karsten Ehrig, Ulrike Prange, and
          <string-name>
            <given-names>Gabriele</given-names>
            <surname>Taentzer</surname>
          </string-name>
          .
          <source>Fundamentals of Algebraic Graph Transformation. Monographs in Theoretical Computer Science. An EATCS Series</source>
          . Springer,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Esther</given-names>
            <surname>Guerra</surname>
          </string-name>
          , Juan de Lara, Manuel Wimmer, Gerti Kappel, Angelika Kusel, Werner Retschitzegger, Johannes Schönböck, and
          <string-name>
            <given-names>Wieland</given-names>
            <surname>Schwinger</surname>
          </string-name>
          .
          <source>Automated verification of model transformations based on visual contracts</source>
          .
          <source>Automated Software Engineering</source>
          ,
          <volume>20</volume>
          (
          <issue>1</issue>
          ):
          <fpage>5</fpage>
          -
          <lpage>46</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Esther</given-names>
            <surname>Guerra</surname>
          </string-name>
          and
          <string-name>
            <given-names>Mathias</given-names>
            <surname>Soeken</surname>
          </string-name>
          .
          <article-title>Specification-driven model transformation testing</article-title>
          .
          <source>Softw. Syst. Model.</source>
          ,
          <volume>14</volume>
          (
          <issue>2</issue>
          ):
          <fpage>623</fpage>
          -
          <lpage>644</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          10.
          <string-name>
            <surname>Frédéric</surname>
            <given-names>Jouault</given-names>
          </string-name>
          , Freddy Allilaire, Jean Bézivin, and
          <string-name>
            <given-names>Ivan</given-names>
            <surname>Kurtev</surname>
          </string-name>
          .
          <article-title>ATL: A model transformation tool</article-title>
          .
          <source>Science of Computer Programming</source>
          ,
          <volume>72</volume>
          (
          <issue>1-2</issue>
          ):
          <fpage>31</fpage>
          -
          <lpage>39</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          11.
          <string-name>
            <surname>Roberto</surname>
            Rodriguez-Echeverria and
            <given-names>Fernando</given-names>
          </string-name>
          <string-name>
            <surname>Macías</surname>
          </string-name>
          .
          <article-title>A Statistical Analysis Approach to Assist Model Transformation Evolution</article-title>
          .
          <source>In 18th International Conference on Model Driven Engineering Languages and Systems (MODELS)</source>
          , pages
          <fpage>226</fpage>
          -
          <lpage>235</lpage>
          , Ottawa, Canada,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          12. Antonio Vallecillo, Martin Gogolla, Loli Burgueño, Manuel Wimmer, and Lars Hamann. Formal Specification and
          <article-title>Testing of Model Transformations</article-title>
          .
          <source>In Formal Methods for ModelDriven Engineering</source>
          , pages
          <fpage>399</fpage>
          -
          <lpage>437</lpage>
          . Springer Berlin Heidelberg,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>