<!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>Towards Testing Model Transformation Chains Using Precondition Construction in Algebraic Graph Transformation</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Elie Richa</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Etienne Borde</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Laurent Pautet</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matteo Bordin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>José F. Ruiz</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>AdaCore</institution>
          ,
          <addr-line>46 Rue d'Amsterdam 75009 Paris</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Institut Telecom; TELECOM ParisTech; LTCI - UMR 5141</institution>
          <addr-line>46 Rue Barrault 75013 Paris</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Complex model-based tools such as code generators are typically designed as chains of model transformations taking as input a model of a software application and transforming it through several intermediate steps and representations. The complexity of intermediate models is such that testing is more conveniently done on the integrated chain, with test models expressed in the input language. To achieve a high test coverage, existing transformation analyses automatically generate constraints guiding the generation of test models. However, these so called test objectives are expressed on the complex intermediate models. We propose to back-propagate test objectives along the chain into constraints and test models in the input language, relying on precondition construction in the theory of Algebraic Graph Transformation. This paper focuses on a one-step back-propagation.</p>
      </abstract>
      <kwd-group>
        <kwd>testing</kwd>
        <kwd>model transformation chains</kwd>
        <kwd>algebraic graph transformation</kwd>
        <kwd>weakest precondition</kwd>
        <kwd>ATL</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Tools used in the production of critical software, such as avionics applications,
must be thoroughly verified: an error in a tool may introduce an error in the
critical software potentially putting equipment and human lives at risk. Testing
is one of the popular methods for verifying that such tools behave as specified.
When testing critical applications, a primary concern is to ensure high coverage
of the software under test (i.e. ensure that all features and different behaviors
of the software are tested). The recommended way to achieve this is to consider
each component separately, identify its functionalities, and develop dedicated
tests (unit testing ). This guideline is therefore reflected in industrial software
quality standards such as DO-330 [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] for tools in the avionics domain.
      </p>
      <p>
        However, with complex model transformation tools such as code generators,
applying unit testing is very costly and impractical. In fact, such tools are often
designed as a chain of several model transformations taking as input a model
developed by the user in a high-level language and transforming it through several
steps. Unit testing then boils down to testing each step of the chain
independently. In practice, intermediate models increase in detail and complexity as
transformations are applied making it difficult to produce test models in the
intermediate representations: manual production is both error-prone because of
the complexity of the languages and tedious since intermediate languages do not
typically have model editors [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. It is often easier for the tester to create a model
in the input language of the chain, with elements that he knows will exercise a
particular feature down the chain. Existing approaches [
        <xref ref-type="bibr" rid="ref11 ref7 ref8">7,8,11</xref>
        ] can automate the
production of tests for model transformations, thus producing unit tests.
However, when a test failure uncovers an error, analyzing the complex intermediate
representations is difficult for the developer.
      </p>
      <p>
        Given these factors, we propose an approach to the testing of model
transformation chains that aims to ensure test coverage of each step while preserving
the convenience of using test models in the input language. First we rely on
existing analyses [
        <xref ref-type="bibr" rid="ref11 ref7 ref8">7,8,11</xref>
        ] to generate a set of so-called test objectives that must
be satisfied by test models to ensure sufficient coverage. Then we propose to
automatically propagate these test objectives backward along the chain into
constraints over the input language. The back-propagation relies on the construction
of preconditions in the theory of Algebraic Graph Transformation (AGT) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        Within this general approach, we focus in this paper on the translation of
postconditions of one ATL transformation step to preconditions, which is a key
operation in the propagation of test objectives. We thus propose a first
translation of the ATL semantics into the AGT semantics where we use the theoretical
construction of weakest preconditions [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] . We illustrate our proposal on a
realistic code generation transformation using a prototype implementation based on
the Henshin3 and AGG 4 frameworks. This first prototype allowed us to
backpropagate test objectives across one transformation step.
      </p>
      <p>In the remainder of the paper, section 2 gives an overview of the testing
approach, explaining the role of precondition construction. Section 3 recalls the
main concepts of ATL and AGT. Section 4 introduces an example of ATL
transformation that will serve to illustrate (i) the translation of ATL to AGT in
section 5 and (ii) the construction of preconditions in section 6. Finally, we present
our prototype in section 7 and conclude with our future plans in section 8.
2</p>
    </sec>
    <sec id="sec-2">
      <title>General Approach</title>
      <p>
        As highlighted in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], one of the major challenges in achieving thorough testing
is producing test models that are relevant, i.e. likely to trigger errors in the
implementation. Several approaches address this challenge for standalone
transformations. In [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] and [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], the authors propose to consider a transformation
      </p>
      <sec id="sec-2-1">
        <title>3 The Henshin project, http://www.eclipse.org/henshin</title>
        <p>4 The Attributed Graph Grammar development environment, http://user.cs.
tu-berlin.de/~gragra/agg</p>
        <p>Input Models</p>
        <p>OCL
Precondition</p>
        <p>Graph
Constraint
Precondition</p>
        <p>ATL semantics
AGT semantics</p>
        <p>ATL2AGT
uses</p>
        <p>OCL2GC</p>
        <sec id="sec-2-1-1">
          <title>ATL Transformation</title>
          <p>rule R1
rule R2</p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Graph Transformation</title>
          <p>Type Graph</p>
          <p>Instantiation Resolving
rule R1_Inst rule R1_Res
rule R2_Inst</p>
          <p>Output Models</p>
          <p>OCL
Postcondition</p>
          <p>Graph</p>
          <p>
            Constraint
Post2Pre Postcondition
and analyse one or more of (i) the input metamodel, (ii) the transformation
specification and (iii) the transformation implementation. This analysis results in a
set of constraints, each describing a class of models that are relevant for finding
errors in the transformation. We refer to such constraints as test objectives in the
remainder of the paper. Constraint satisfaction technologies such as the Alloy
Analyzer5 and EMFtoCSP [
            <xref ref-type="bibr" rid="ref6">6</xref>
            ] are then used to produce model instances such
that each test objective is satisfied by at least one test model.
          </p>
          <p>
            Let us now consider a transformation chain Mi T!i Mi+1 for 0 i &lt; N
where an input model M0 is processed by N successive transformation steps Ti
into intermediate models Mi and ultimately into the final output model MN .
Focusing on an intermediate transformation Ti such that i &gt; 0, we can apply
the above approaches to obtain a set of test objectives ftoi;j j 0 jg ensuring
the thoroughness of the testing of Ti. Each test objective toi;j is a constraint
expressed over the input metamodel of Ti. At this point we want to produce
a model M0 at the beginning of the chain, which ultimately satisfies toi;j after
being processed by the sequence T0 ; ; Ti 1. We propose to automate this
operation by transforming toi;j into a test objective toi 1;j at the input of Ti 1
and thus iterate the process until we obtain to0;j that can serve to produce a
model M0. The key challenge of this paper is to devise an analysis that takes as
input a constraint toi;j and a transformation specification Ti 1, and produces
as output a constraint toi 1;j . Such a method exists in the formal framework of
Algebraic Graph Transformation (AGT) [
            <xref ref-type="bibr" rid="ref5">5</xref>
            ] in the context of the formal proof
of correctness of graph programs. It is the transformation of postconditions into
preconditions [
            <xref ref-type="bibr" rid="ref9">9</xref>
            ] that we propose to adapt and reuse in our context. Since we
consider transformations specified in ATL [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ], a translation to AGT is necessary.
          </p>
          <p>As shown in Figure 1, we propose to translate the ATL transformation Ti 1
into a graph transformation program (ATL2AGT arrow) and toi;j into a graph</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>5 Alloy language and tool, http://alloy.mit.edu/</title>
        <p>
          constraint (OCL2GC arrow). Assuming the constraint is a postcondition of Ti 1,
we automatically compute the precondition toi 1;j that is sufficient to satisfy
the postcondition (Post2Pre arrow) using the formal foundation of AGT. Since
ATL embeds OCL constraints, ATL2AGT also uses OCL2GC. However this is a
complex translation [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] that will not be addressed given the space limitations.
We thus focus on a first proposal of ATL2AGT in section 5 and Post2Pre in
section 6, both limited to the structural aspects of the semantics and constraints.
First, we recall the main elements of ATL and AGT in the next section.
3
3.1
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Semantics of ATL and AGT</title>
      <p>
        ATL and OCL
ATL [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is a model-to-model transformation language combining declarative
and imperative approaches in a hybrid semantics. A transformation consists of
a set of declarative matched rules, each specifying a source pattern and a target
pattern. The source pattern is a set of objects of the input metamodel and an
optional OCL6 constraint acting as a guard. The target pattern is a set of
objects of the output metamodel and a set of bindings that assign values to the
attributes and references of the output objects. The execution of a
transformation consists of two main phases. First, the matching phase searches in the input
model for objects matching the source patterns of rules (i.e. satisfying their
filtering guards). For each match of a rule’s source pattern, the objects specified
in the target pattern are instantiated. A tuple of source objects may only match
one rule, otherwise an error is raised. For this reason the order of application of
rules is irrelevant. Second, the target elements’ initialization phase executes the
bindings for each triggered rule. Bindings map scalar values to target attributes,
target objects (instantiated by the same rule) to target references, or source
objects to target references. In the latter case, a resolve operation is automatically
performed to find the rule that matched the source objects, and the first output
object created by that rule (in the first phase) is used for the assignment. If no
or multiple resolve candidates are found, the execution stops with an error.
      </p>
      <p>
        As the current proposal is limited to structural aspects, we only consider
bindings of target references and not those of attributes. OCL constraints are not
considered as OCL2GC (Figure 1) is too complex to address within this paper
[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Instead, we will use test objectives in the form of AGT graph constraints.
3.2
      </p>
      <p>
        AGT and Graph Constraints
Several graph transformation approaches are proposed in the theory of Algebraic
Graph Transformation [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. We will be using the approach of Typed Attributed
Graph Transformation with Inheritance which we found suitable to our needs and
which is supported in the AGG tool allowing for concrete experimentation of our
proposals (see section 7). There are 3 main elements to a graph transformation:
6 Object Constraint Language (OCL), http://www.omg.org/spec/OCL
a type graph, a set of transformation rules, and a high-level program specifying
the order of execution of rules.
      </p>
      <p>
        Graphs consist of nodes connected with directed edges. Much like models
conform to metamodels, typed graphs conform to a type graph. As introduced in
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], metaclasses, references and metaclass inheritance in metamodels correspond
to node types, edge types, and node type inheritance in type graphs which allows
an easy translation between the two. Even though multiplicities and containment
constraints are not addressed in type graphs, they are supported in AGG.
      </p>
      <p>A graph transformation is defined as a set of productions or rules executed in
a graph rewriting semantics. There are two major approaches to defining rules
and their execution. Even though the theory we use is based on the Double
Pushout (DPO) approach, we will use the simpler Single Pushout (SPO)
approach and notation which is also the one implemented in AGG. A rule consists
of a morphism from a Left-Hand Side (LHS) graph to a Right-Hand Side (RHS)
graph. The LHS specifies a pattern to be matched in the transformed graph.
Elements mapped by the morphism are preserved and elements of the RHS that
are not mapped by the morphism are new elements added to the transformed
graph. We do not address element deletion since our translation will not need it
(see section 5). Thus the execution of a rule consists in finding a match of the
LHS in the transformed graph and adding the new nodes and edges.</p>
      <p>
        With the transformation rules defined above, we can construct so called
highlevel programs [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] consisting of the sequencing or the iteration of rules. A program
can be (1) elementary, consisting of a rule p, (2) the sequencing of two programs
P and Q denoted by (P ; Q), or (3) the iteration of a program P as long as
possible, denoted by P #, which is equivalent to a sequencing (P ; (P ; (P )
until the rule no longer applies.
      </p>
      <p>Graph constraints are similar to OCL constraints for models. They are
defined inductively as nested conditions, but for the sake of simplicity we consider
a very basic form 9(C) where C is a graph. A graph G satisfies such a constraint
if G contains a subgraph isomorphic to C. This form is suitable to express test
objectives which typically require particular patterns to exist in models.</p>
      <p>Next, we present the example that will help us illustrate our proposal.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Example: Code Generation</title>
      <p>We aim to apply our approach to a realistic code generator from Simulink7 to
Ada/C source code, under development in the collaborative research project
Project P 8. Simulink is a synchronous data flow language widely used by
industrials for the design of control algorithms. The code generator consists of a
chain of up to 12 model transformations (depending on configuration options),
including flattening of nested structures, sequencing, code expansion and
optimisation. We consider the Code Model Generation (CMG) transformation step of
7 MathWorks Simulink, http://www.mathworks.com/products/simulink/
8 Project P, http://www.open-do.org/projects/p/</p>
      <p>SMElement</p>
      <p>1 srcPort</p>
      <p>Outport
inports *</p>
      <p>Sum</p>
      <p>Block outports *</p>
      <p>UnitDelay</p>
      <p>VarExp
CMElement</p>
      <p>Variable
variable 1</p>
      <p>Expression Statement
rightExp 1
leftExp 1</p>
      <p>AsgnStmt
this chain to illustrate our translation to the AGT semantics. Then, considering
a postcondition on the output of CMG, we construct a precondition on its input.</p>
      <p>CMG transforms a Simulink model into a model of imperative code. A
simplified version of the input metamodel is shown on the left side of Figure 2.
Computation blocks such as Sum or UnitDelay receive data through their
Inport s and send the result of their computation through their Outport s. Signal s
convey data from a source Outport to a target Inport. The output metamodel
of CMG shown on the right side of Figure 2 features variables (Variable),
expressions (Expression), references to variables (VarExp) and imperative code
statements. In particular, an assignment statement (AsgnStmt ) assigns its
rightExp expression to its leftExp which typically is a reference to a variable.</p>
      <p>Listing 1.1: The Code Model Generation ATL transformation
1 rule O2Var { from oport : SMM!Outport
2 to var : CMM!Variable }
3
4 rule S2VExp { from sig : SMM!Signal
5 to varExp : CMM!VarExp (variable &lt;- sig.srcPort) }
6
7 rule UDel {
8 from block
9 to assgnStmt
10
11
12
13 memVar
14 outVarExp
15 memVarExp1
16 memVarExp2
: SMM!UnitDelay
: CMM!AsgnStmt (rightExp &lt;- outVarExp,</p>
      <p>leftExp &lt;- memVarExp1),
memAssgnStmt : CMM!AsgnStmt( rightExp &lt;- memVarExp2,</p>
      <p>leftExp &lt;- block.inports-&gt;at(1).inSignal), -- Resolve
: CMM!Variable,
: CMM!VarExp(variable &lt;- block.outports-&gt;at(1)), -- Resolve
: CMM!VarExp(variable &lt;- memVar),
: CMM!VarExp(variable &lt;- memVar) }
-- Resolve</p>
      <p>The ATL implementation of the CMG transformation consists of the 3 matched
rules in Listing 1.1. The first rule creates a Variable for each Outport of the
input model, and the second one creates a VarExp for each Signal. Note that the
second rule requires resolving the Outport at line 5 into a Variable and will be
used to illustrate our modeling of the resolve mechanism in AGT. The last rule
creates 2 assignment statements referencing a Variable created by the same rule
at line 13, a VarExp resolved at line 12, and a Variable resolved at line 14.</p>
      <p>As for the test objective, we consider it directly in the graph constraint form
in Figure 3. It requires that an assignment statement exists where both the source
9</p>
      <p>!
and the target of the assignment are references to variables. This pattern matches
the objects created by ATL rule UDel, and thus requires resolve operations.
5</p>
    </sec>
    <sec id="sec-5">
      <title>ATL to Algebraic Graph Transformation</title>
      <p>
        This section introduces our main contribution, the translation of ATL
transformations to artifacts of an algebraic graph transformation: a type graph, graph
transformation rules and a high-level program. Given the rewriting semantics of
AGT and the exogeneous nature of the transformations we consider, we choose
to model the ATL transformation as a rewriting of the input graph that adds the
output elements. Consequently, the type graph includes types corresponding to
both the input and the output metamodels. As explained in Section 3.2, the
correspondence of metamodel elements to graph type elements is straightforward
[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], and the resulting type graph is depicted in Figure 4. In addition, tracing
node types are added to support the ATL resolve mechanism. First, an abstract
Trace node relates source objects (SMElement ) to target objects (CMElement )
of ATL rules. Second, for each ATL rule, a concrete trace node (named
&lt;atlrulename&gt;_Trace) references the actual source and target types of this rule. These
trace nodes will be used by the graph transformation rules, as explained next.
      </p>
      <p>Fig. 4: Resulting Type Graph in AGG</p>
      <p>Much like the execution semantics of ATL, the graph transformation starts
with a set of instantiation rules that create output nodes without linking them.
For example, O2Var_Inst in Figure 5a matches an Outport and creates a
Variable and a concrete trace O2Var_Trace relating the source and target nodes
(numbers indicate mapping by the rule morphism). Then, a second set of
resolving rules rely on the trace nodes produced in the first phase to link output nodes.
For example, S2VExp_Res in Figure 5b matches an Outport and a Trace node
to find the resulting Variable and create the variable edge. Thus the elements
created in the RHS of Figure 5a (O2Var_Trace and Variable) are matched later
by the LHS in Figure 5b (Trace and Variable). Note the use of abstract Trace
nodes in the resolving rules to allow resolving with any rule as long as the number
and types of source and target elements match, as per the ATL semantics.</p>
      <p>Finally, a high-level program implements the two phases by iterating
instantiation rules first and resolving rules second, yielding the following for CMG:
P = O2V ar_Inst #; S2V Exp_Inst #; U Del_Inst #; S2V Exp_Res #;
U Del_Res #
(a) O2Var_Inst
(b) S2VExp_Res</p>
      <p>Having translated the ATL transformation to the AGT semantics, we next
explain how we use precondition construction to back-propagate test objectives.
6</p>
    </sec>
    <sec id="sec-6">
      <title>Transformation of Postcondition to Precondition</title>
      <p>
        In [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], Habel, Pennemann and Rensink formally define a construction of weakest
precondition for high-level programs in the interest of proving transformation
correctness. Given a program and a postcondition, the weakest precondition is
a constraint that characterizes all possible input graphs that lead to the
termination of the program with a final graph satisfying the postcondition. A
precondition construction is defined for one rule application and applied inductively
to the sequence of rules defined by the program. In the case of P # programs
each number of iterations of P from 0 to 1 must be considered, making the
construction theoretically infinite.
      </p>
      <p>However, in contrast with proof of correctness, we actually do not need to
compute the weakest precondition. Since the final goal is to find a test model
satisfying the test objective, computing one sufficient precondition would be
enough. To do so, we limit iterations of rules in the program to a bounded
number, making the precondition construction finite (the choice of bounds remains
an open point at this stage). For example we can bound the CMG
transformation to two applications of O2Var and one application of each of the other rules:
P = O2V ar_Inst; O2V ar_Inst; S2V Exp_Inst; U Del_Inst; S2V Exp_Res;
U Del_Res</p>
      <p>As for the precondition construction of each rule, the theoretical
construction requires to consider all possible overlaps of the RHS of the rule with the
graph of the postcondition. Each overlap represents a way in which the rule
may contribute to the postcondition. For each overlap, we perform an operation
similar to a backwards execution of the rule9 and thus construct a sufficient
precondition.
7</p>
    </sec>
    <sec id="sec-7">
      <title>Prototype and Results</title>
      <p>We have prototyped our approach using the Henshin and AGG frameworks.
ATL2AGT is implemented with the Henshin API, and an existing service is used
to export the artifacts to AGG. Precondition construction is not readily available
in AGG, so we have implemented Post2Pre using the existing services such as
generating overlaps of two graphs and constructing a pushout complement. For
the example test objective introduced in Figure 3, two of the preconditions we
obtain are shown in Figure 6. The existence of one of these patterns in input
models ensures that the UDel rule is able to execute and resolve the necessary
elements to produce the pattern required by the test objective.
9
!
9
!
In this paper we have approached the problem of testing model transformation
chains with two main concerns: achieving high test coverage and using test
models in the input language of the chain to ease the analysis of detected errors. To
this end, we have proposed to extend existing approaches of test objective
generation with a method to propagate intermediate test objectives back to the input
language. Central to this method is the transformation of postconditions of one
transformation step into preconditions, which was the focus of this paper. We
have contributed a first translation from ATL semantics into the AGT semantics
and adapted the theoretical precondition construction to achieve our goal.
9 the formal construction is a pushout complement</p>
      <p>
        In future work, we plan to investigate the OCL2GC step of our approach
and alleviate the limitation to structural aspects by handling object attributes
based on works such as [
        <xref ref-type="bibr" rid="ref12 ref14 ref4">4,12,14</xref>
        ]. Moreover, we plan to work towards test-suite
minimality [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] by allowing a test model to cover several test objectives across
the chain and only back-propagating non-satisfied test objectives.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>B.</given-names>
            <surname>Baudry</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ghosh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Fleurey</surname>
          </string-name>
          , R. France,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Le Traon</surname>
          </string-name>
          , and J.
          <string-name>
            <surname>-M. 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="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>E.</given-names>
            <surname>Bauer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Küster</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Engels</surname>
          </string-name>
          .
          <article-title>Test suite quality for model transformation chains</article-title>
          . In Objects, Models, Components, Patterns, volume
          <volume>6705</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>3</fpage>
          -
          <lpage>19</lpage>
          . Springer Berlin Heidelberg,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>E.</given-names>
            <surname>Biermann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ermel</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Taentzer</surname>
          </string-name>
          .
          <article-title>Formal foundation of consistent EMF model transformations by algebraic graph transformation</article-title>
          .
          <source>Software &amp; Systems Modeling</source>
          ,
          <volume>11</volume>
          (
          <issue>2</issue>
          ):
          <fpage>227</fpage>
          -
          <lpage>250</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Clarisó</surname>
          </string-name>
          , E. Guerra, and J. de Lara.
          <article-title>Synthesis of OCL pre-conditions for graph transformation rules</article-title>
          .
          <source>In Theory and Practice of Model Transformations</source>
          , volume
          <volume>6142</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>45</fpage>
          -
          <lpage>60</lpage>
          . Springer Berlin Heidelberg,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>H.</given-names>
            <surname>Ehrig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Ehrig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Prange</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Taentzer</surname>
          </string-name>
          .
          <article-title>Fundamentals of algebraic graph transformation</article-title>
          , volume
          <volume>373</volume>
          . Springer,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>C.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Buttner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Clariso</surname>
          </string-name>
          , and
          <string-name>
            <surname>J. Cabot.</surname>
          </string-name>
          <article-title>EMFtoCSP: A tool for the lightweight verification of EMF models</article-title>
          .
          <source>In Software Engineering: Rigorous and Agile Approaches (FormSERA)</source>
          ,
          <source>2012 Formal Methods in</source>
          , pages
          <fpage>44</fpage>
          -
          <lpage>50</lpage>
          ,
          <year>June 2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>C.</given-names>
            <surname>González</surname>
          </string-name>
          and
          <string-name>
            <surname>J. Cabot.</surname>
          </string-name>
          <article-title>ATLTest: A white-box test generation approach for ATL transformations</article-title>
          .
          <source>In Model Driven Engineering Languages and Systems, Lecture Notes in Computer Science</source>
          , pages
          <fpage>449</fpage>
          -
          <lpage>464</lpage>
          . Springer Berlin Heidelberg,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>E.</given-names>
            <surname>Guerra</surname>
          </string-name>
          .
          <article-title>Specification-driven test generation for model transformations</article-title>
          .
          <source>In Theory and Practice of Model Transformations</source>
          , volume
          <volume>7307</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>40</fpage>
          -
          <lpage>55</lpage>
          . Springer Berlin Heidelberg,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>A.</given-names>
            <surname>Habel</surname>
          </string-name>
          ,
          <string-name>
            <surname>K.-H. Pennemann</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Rensink</surname>
          </string-name>
          .
          <article-title>Weakest preconditions for high-level programs</article-title>
          .
          <source>In Graph Transformations</source>
          , volume
          <volume>4178</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>445</fpage>
          -
          <lpage>460</lpage>
          . Springer Berlin Heidelberg,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <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</article-title>
          .
          <source>In Satellite Events at the MoDELS 2005 Conference</source>
          , volume
          <volume>3844</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>128</fpage>
          -
          <lpage>138</lpage>
          . Springer Berlin Heidelberg,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>J.-M. Mottu</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Sen</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Tisi</surname>
            , and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Cabot</surname>
          </string-name>
          .
          <article-title>Static analysis of model transformations for effective test generation</article-title>
          .
          <source>In Software Reliability Engineering (ISSRE)</source>
          ,
          <source>2012 IEEE 23rd International Symposium on</source>
          , pages
          <fpage>291</fpage>
          -
          <lpage>300</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>C. M. Poskitt</surname>
            and
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Plump</surname>
          </string-name>
          .
          <article-title>A Hoare calculus for graph programs</article-title>
          .
          <source>In Graph Transformations</source>
          , volume
          <volume>6372</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>139</fpage>
          -
          <lpage>154</lpage>
          . Springer Berlin Heidelberg,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. RTCA. DO-
          <volume>330</volume>
          : Software Tool Qualification Considerations.
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>J. Winkelmann</surname>
            , G. Taentzer,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Ehrig</surname>
            , and
            <given-names>J. M.</given-names>
          </string-name>
          <string-name>
            <surname>Küster</surname>
          </string-name>
          .
          <article-title>Translation of restricted OCL constraints into graph constraints for generating meta model instances by graph grammars</article-title>
          .
          <source>Electronic Notes in Theoretical Computer Science</source>
          ,
          <volume>211</volume>
          (
          <issue>0</issue>
          ):
          <fpage>159</fpage>
          -
          <lpage>170</lpage>
          ,
          <year>2008</year>
          . Proceedings of the Fifth International Workshop on Graph Transformation and
          <article-title>Visual Modeling Techniques (GT-VMT</article-title>
          <year>2006</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>