<!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>Debugging of Model Transformations and Contracts in SyVOLT</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Bentley James Oakes</string-name>
          <email>bentley.oakes@mail.mcgill.ca</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Levi Lucio</string-name>
          <email>lucio@fortiss.org</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Clark Verbrugge</string-name>
          <email>clump@cs.mcgill.ca</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hans Vangheluwe</string-name>
          <email>Hans.Vangheluwe@uantwerpen.be</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>McGill University</institution>
          ,
          <addr-line>Montreal</addr-line>
          ,
          <country country="CA">Canada</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>McGill University</institution>
          ,
          <addr-line>Montreal</addr-line>
          ,
          <country country="CA">Canada</country>
          ,
          <institution>University of Antwerp, Antwerp, Belgium</institution>
          ,
          <addr-line>Flanders Make</addr-line>
          ,
          <country country="BE">Belgium</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>fortiss GmbH</institution>
          ,
          <addr-line>München</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <abstract>
        <p>The SyVOLT tool verifies DSLTrans transformations by generating a state-space for the transformation's execution, and then proving structural contracts on that state-space. As with any verification activity, it is non-trivial to ensure that these contracts are error-free and correspond to the user's intention. SyVOLT detects and localizes errors in the input artefacts for the verification activity to provide the user with assistance in debugging the transformation and/or the contracts. This experience report details the techniques built into the analysis, monitoring, and reporting stages of the tool. These techniques include detection of invalid rules and contracts, a form of reachability analysis during state-space generation, and assisting the user in understanding why a contract fails to be satisfied.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>CCS CONCEPTS</title>
      <p>• Computing methodologies → Model verification and
validation; • Software and its engineering → Domain specific
languages; Automated static analysis;</p>
    </sec>
    <sec id="sec-2">
      <title>INTRODUCTION</title>
      <p>
        As the adoption of model-driven engineering increases in both
academia and industry, the verification of model-to-model or
modelto-text transformations becomes a critical part of software
development. Our verification research [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ] focuses on the proving
of structural contracts, which represent patterns on the input and
output models of a transformation written in the DSLTrans model
transformation language. If a contract is said to hold by our
technique, then whenever a transformation’s input model contains the
pattern specified in the pre-condition of the contract, the output
model produced by that transformation will contain the pattern
specified in the contract’s post-condition (including traceability
constraints).
      </p>
      <p>
        The SyVOLT tool [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] verifies a set of contracts on a
transformation by generating a symbolic state-space for the transformation
through the combination of rule applications. The contracts are
then proved over the state-space, yielding combinations of rules
where the contract is satisfied, and combinations where it is not.
The SyVOLT tool and its input artefacts are presented in Section 2
to provide background information.
      </p>
      <p>However, the result of the verification process only indicates
that the contracts are or are not satisfied by the transformation by
providing counter-examples. It is still a significant efort to examine
these counter-examples and localize the fault in the transformation
and/or the contracts. As well, once the fault is localized, it may be
non-trivial to modify the artefacts to obtain the desired contract
result. One particular problem, partially addressed in this paper
by the contract result analysis, is the situation where a contract is
expected to fail, but instead is reported as satisfied .</p>
      <p>The current paper addresses the dificulty in understanding the
interaction of contracts with the transformation under study. As our
contribution, we present three stages of fault detection and
localization within the SyVOLT tool, at the appropriate level of abstraction.
The first stage is analysis (Section 3), where transformation and
contracts are examined to record dependency information, and
ensure that transformations and contracts are valid before state-space
generation begins. The second stage is the monitoring of state space
generation (Section 4), where rules are examined to ensure they
symbolically execute. Finally, the reporting stage (Section 5) ofers
an explanation for why contracts have failed to be satisfied.
2</p>
    </sec>
    <sec id="sec-3">
      <title>BACKGROUND</title>
      <p>
        Our verification research concerns the creation of a symbolic
execution state-space for transformations, and verification of structural
contracts over that representation of the state-space. These
operations are performed by the SyVOLT contract verifier 1, which has
been employed in transformation verification research [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
2.1
      </p>
    </sec>
    <sec id="sec-4">
      <title>DSLTrans Transformation Language</title>
      <p>
        Our symbolic execution technique requires that the transformation
language being verified has reduced expressiveness, as in work by
Varró et al. [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. Our verification research operates on the model
transformation language DSLTrans [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], which has the properties
of termination and confluence . A full treatment of the semantics of
DSLTrans is found in the thesis of Oakes [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>The essential unit of a DSLTrans transformation is the rule. Rules
contain matching and production elements and links in the
MatchModel and the ApplyModel. In Figure 1 on the following page, the
1Available at https://github.com/levilucio/SyVOLT.</p>
      <p>MatchModel is the white box in the top half of the rule, while
the ApplyModel is the yellow box in the bottom of the rule. Rule
application begins by matching elements and links found in the
MatchModel (as well as connected elements in the ApplyModel)
onto the input model of the rule. If this can be accomplished, then
the elements and links in the ApplyModel (not connected to the
MatchModel) are created in the output model.</p>
      <p>As well, rules specify how elements of the output model were
created from specific elements of the input model during rule
application. This traceability information for the transformation is
stored as traceability links, which are built between a newly
generated element in the output model, and the elements of the input
model that originated it.</p>
      <p>The backward link construct in DSLTrans rules is used to match
over these traceability links. Figure 1 depicts a rule containing
two backward links. The backward links are denoted as dotted
lines, connecting the Country and Community elements and the
Child and Woman elements. These links enforce a dependency
that the Community element must have been produced by a rule
that matched on the Country element in an earlier layer of the
transformation.</p>
      <p>Rules are placed into layers in the transformation. The semantics
of DSLTrans specify that all rules in a layer fully apply before the
next layer is executed. Note that rules in a layer cannot match on
the output produced by another rule in the same layer.
2.2</p>
    </sec>
    <sec id="sec-5">
      <title>Path Conditions</title>
      <p>Our contract verification technique builds structures called path
conditions, which represent the symbolic application of rules in
the transformation by explicitly including the input and output
elements and links matched over or created by those rules.</p>
      <p>An example path condition is shown in Figure 2, which
represents the application of four rules in the transformation. These
rules are bounded in dashed boxes and contain elements and links
which are typed from the input and output meta-models for the
transformation.</p>
      <p>The white top-half of the path condition is the input graph, while
the grey bottom-half is the output graph. Lines between the input
graph and output graph are traceability links, which record how
the output elements were created during the execution of the
transformation. This path condition can therefore be read as: “If only
these four rules apply during a transformation execution, then (at
least) these upper elements were present in the input model, and
these lower elements are present in the output model.”
The structural contracts used in our verification research represent
patterns on the input and output models of a transformation.</p>
      <p>For example, the input graph of the contract in the upper-half
of Figure 3 contains a Family element and four connected Member
elements. The output graph of the contract in the lower-half of
the figure contains a Community element, two Man elements, and
two Woman elements. The dashed lines represent the restriction
that the output elements must have been produced by a rule that
matched over the connected input element.
2.3.1 Contract Verification. Once the set of path conditions has
been created for a transformation, then the pre-condition and
postcondition for each contract are matched over these path conditions.
In Figure 3, the pre-condition of the contract is composed of the
elements in the upper half of the contract. The post-condition of
this contract is all elements and links as shown in Figure 3.</p>
      <p>If a contract is said to be satisfied by our technique, then
whenever a transformation’s input model contains the pattern specified
in the pre-condition of the contract, the output model produced
by that transformation will contain the pattern specified in the
contract’s post-condition (including traceability constraints).
Otherwise, if the post-condition does not hold on a path condition, then
we have found a counter-example to the contract, and those rule
combinations represented by the path condition do not satisfy the
contract.</p>
      <p>The present paper focuses on how to assist the user in
understanding the result of contract satisfaction through a number of
debugging techniques.
3</p>
    </sec>
    <sec id="sec-6">
      <title>DEBUGGING STAGE 1: ANALYSIS</title>
      <p>The main operation of the SyVOLT tool is the generation of the
state-space of rule execution. However, first an analysis stage
occurs, where the transformation and contract are examined to detect
dependencies between the contract and rules in the transformation,
as well as inter-rule dependencies.</p>
      <p>This dependency analysis has three primary objectives in a
debugging context. The first objective is a sanity check to ensure that
all rules can symbolically execute and all contract elements can be
produced, such that the user is alerted to an invalid transformation
or a contract which cannot be verified. The second objective is to
record which elements of the contract and transformation depend
on which rules in the transformation, as this information will be
used when presenting the results of verification (Section 5).</p>
      <p>
        Finally, the last objective is to support a slicing optimization [
        <xref ref-type="bibr" rid="ref10 ref11">10,
11</xref>
        ], which restricts the symbolic execution of the transformation
to only those rules needed to verify a contract. This optimization
therefore improves the debugging process for the user by
winnowing away all rules that can not change the satisfaction of a contract,
and allowing the user to concentrate on the essential rules.
3.1
      </p>
    </sec>
    <sec id="sec-7">
      <title>Procedure</title>
      <p>The analysis process begins by examining all rules in the
transformation to determine if any rule produces the elements and links
in a particular contract. As well, we ensure that all backward links
between input and output elements (denoting dependencies) in the
transformation’s rules can be satisfied by earlier rules.</p>
      <p>This element-matching allows our analysis to check if there
exists an element or link in a contract or a rule that cannot be
satisfied in the transformation. In this case, even before the contract
prover executes we know that there is an error with the contract or
the transformation such that the validation process will fail. When
this occurs, the user is alerted to the precise missing element or
link in the rule or contract so that it may be fixed.
3.2</p>
    </sec>
    <sec id="sec-8">
      <title>Example</title>
      <p>Consider an intentional error in the FourMembers contract
presented in Figure 3. Instead of having Woman elements in the Output
graph (lower half) of this contract, assume that these are Female
elements in the erroneous version. This represents the contract
builder unintentionally using an old meta-model or making a typo.</p>
      <p>When the contract prover is determining which rules the
contract depends on, the output in Figure 4 will be produced. In the
section marked a), the analysis indicates that the link from the
Community element to the Female element cannot be found in the
transformation. This indicates that no path condition will exist
a) Error: Elements in contract ErrFourMembers link are missing:</p>
      <p>Community - directLink_T - Female
b) Error: Backward link might be missing in contract ErrFourMembers:</p>
      <p>Member - trace - Female
c) Looking for meta-model element: `Member'
Rule Daughter2Woman contains meta-model element:</p>
      <p>`Member' as `Child'
Rule Father2Man contains meta-model element:</p>
      <p>`Member' as `Parent'
...
d) Looking for meta-model element: `Female'
Error: Meta-model element `Female' not found in any rule!
where the contract’s post-condition can be satisfied, and thus the
contract will never hold.</p>
      <p>The output marked b) states that there is also a backward link
in the contract which cannot be satisfied by the transformation.
That is, there is no rule that matches over a Member element and
produces a Female element. To assist the user, the rules where these
elements are presented are indicated in sections c) and d).</p>
      <p>The c) section displays the transformation rules that contain a
Member element. Note that these rules may contain the element
as a sub-class instead. For example, the Father2Man rule contains a
Parent element which is a sub-class of the Member element. This
allows the user to focus on the rules which are likely candidates
for errors.</p>
      <p>Finally, the section marked d) informs the user of the error that
no rule contains a Female element. All elements of the contract
must be present in the transformation for successful verification,
otherwise the user must modify the contract or transformation
such that the element exists.
3.3</p>
    </sec>
    <sec id="sec-9">
      <title>Fixing Input Errors</title>
      <p>
        During our verification research, we noticed that our case studies
sufered from typos/inconsistencies, which meant that a number
of contracts could never be satisfied. For example, a contract for
the mbeddr case study (presented in the thesis of Oakes [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ])
contained ReferenceExpression and GlobalRefExpr elements instead of
the correct ReferenceExpr and GlobalVarRef elements.
      </p>
      <p>In this section, we wish to emphasize how crucial it is to detect
or prevent these simple errors as early as possible in the verification
process. These errors can potentially consume a large portion of
debugging time, while not addressing the “interesting” reasons for
verification failure.</p>
      <p>
        The source of these errors was the manual nature of the
Eclipsebased editing environment used to initially create the
transformations and contracts [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. In the current version of the visual editor,
the user is able to type in any name for rule elements without any
validation against the transformation meta-models.
      </p>
      <p>
        More recently, we have developed an editor plugin2 for the Meta
Programming System (MPS) editor 3. MPS is a language workbench
for the rapid creation and use of domain-specific languages (DSLs),
which can ease the development of software [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
2The plugin is available from within the MPS plugin repository under the name
DSLTrans, or at the repository site https://github.com/mbeddr/language_verification.
3https://www.jetbrains.com/MPS
      </p>
      <p>
        As part of our verification research, we created the language
constructs necessary to build DSLTrans transformations and contracts.
The explicit modelling of languages in MPS allows for desirable
features during modelling activities, such as auto-completion and
type checking in the projectional editor [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        For example, when creating DSLTrans rules or contracts,
elements and their attributes in the rule must be typed by the input
or output meta-models of the transformation. We (and others [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ])
note that this deep integration of languages allows for quick and
accurate creation of code/transformations, with fewer errors than
a manual method.
The second stage of fault detection and localization in the SyVOLT
is performed during the path condition generation process itself.
As the state-space for rule execution is constructed, the user is
informed if a rule has not been symbolically executed4.
      </p>
      <p>
        A rule not symbolically executing may indicate one of three
issues with the transformation which should be reported to the
user to investigate. The first case is where the required dependencies
for the rule were not present in the transformation. This may occur
if a backward link specifies a dependency not satisfied by any other
rules. The second case is where the user has not indicated that a
rule should symbolically execute enough times, as specified by a
dependency analysis [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>
        Finally, the third case is that there may be an undesired
interaction between the transformation and its meta-model that has
4Note that the work of Selim [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] defined this check as a series of rule reachability
contracts.
caused our pruning technique to remove all path conditions
containing that particular rule. This technique removes path conditions
if they violate the output meta-model with respect to containment
links. For example, a path condition containing Female elements in
the output model not properly contained by a Community element
would be removed. Careful use of this technique is required, as it
may remove counter-examples to contracts [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>The current implementation for the rule reachability analysis
involves checking all path conditions periodically to determine which
rules they abstract. If a rule appears in no path condition, then it
either did not execute in that layer, or it has been removed by the
pruning technique. An error is raised informing the user which rule
did not execute, as well as the dependency information generated
in the first stage of analysis (Section 3). This (rudimentary)
information allows the user to debug and understand the execution of the
rule, before further layers in the transformation are symbolically
executed.
5</p>
    </sec>
    <sec id="sec-10">
      <title>DEBUGGING STAGE 3: REPORTING</title>
      <p>The last stage of fault detection and localization is the reporting of
results to the user at the end of contract validation. Our aim is to
assist the user in understanding why a particular contract has been
or has not been satisfied by presenting the rules and rule elements
that the contract requires. This allows the user to ensure that their
intention for the contract matches the verification result, and if not,
where modifications should be made.</p>
      <p>In the contract verification step of the SyVOLT tool, we collect
two sets of path conditions for each contract. The first set ( success) is
where the contract is satisfied, and the second set ( fail) is where the
contract is not satisfied. The tool examines these sets and provides
the following information:
• rulessuccess - Rules found in all successful path conditions
• rulesfail - Rules found in all failed path conditions, and not
present in rulessuccess
• The precise elements and links that the contract requires
from the set of rules rulessuccess
• The contract is also tested against a failed path condition
– The elements and links that could not be found on this
path condition are reported
– The user can use this information and a visualization of
the path condition to better understand the failure of the
contract, as in Figure 8 on the facing page</p>
      <p>This comprehensive information allows the user to precisely
determine how the contract is succeeding or failing, and have
assurance that the result is as intended.
5.1</p>
    </sec>
    <sec id="sec-11">
      <title>Example</title>
      <p>We will present the Neg_SchoolOrdFac contract in Figure 6a as an
example for the information reported when a contract has
counterexample path conditions.</p>
      <p>Note that for this contract we expect counter-examples to be
found. This contract represents the statement ‘Every School in the
input model will produce an Ordinary Facility’. The rule
dfacilities...OrdinaryFacility which performs this production is displayed in
Figure 6b. However, the transformation also contains the
dfacilities...SpecialFacility rule, which matches over a School element with
(a) An example contract for analysing success/failure results.</p>
      <p>(b) Rule needed for contract success.
a special Service to produce a Special Facility element. Thus, the
contract is expected to fail on path conditions that include the
dfacilities...SpecialFacility rule.</p>
      <p>For the Neg_SchoolOrdFac contract, as seen in Figure 7 on the
line marked a), the contract prover indicates that there are six path
conditions where this contract holds, and three path conditions
where it does not.
a) Name: Neg_SchoolOrdFac</p>
      <p>Num Succeeded Path Conditions: 6</p>
      <p>Num Failed Path Conditions: 3
b) Explaining contract result:</p>
      <p>Good rules: (Rules in success set and not failure set)</p>
      <p>dfacilities...OrdinaryFacilityPerson
Bad rules: (Rules common to all in failure set)</p>
      <p>dfacilities...SpecialFacilityPerson
c) Contract requires elements from successful rules of type:
School</p>
      <p>OrdinaryFacility
d) Examining failed path condition:</p>
      <p>Daughter2Woman-Neigh2District-dfacilities...SpecialFacilityPerson
e) Elements of contract that fail on this path condition:
Could not find links of type:</p>
      <p>OrdinaryFacility - trace_link - School</p>
      <p>The contract result analysis indicates in the section marked
b) that the dfacilities...OrdinaryFacility rule is common to all the
successful path conditions. This is correct, as this rule must
symbolically execute for the contract’s pre- and post- condition to match.
As well, the dfacilities...SpecialFacility rule is common to all of the
failed path conditions. This is sensible as this rule produces path
conditions where the School element in the contract pre-condition
is found, but the OrdinaryFacility element is not. Note that the
analysis does not report rules that are both in the successful and
failed path conditions to assist in narrowing down causes of success
or failure.</p>
      <p>The last two analyses precisely identify why the contract fails on
the path conditions. Based on the dependency analysis performed
in Section 3, the contract prover has a record of which elements and
links the contract depends on for each rule. The analysis marked c)
specifies that the contract depends on the School and
OrdinaryFacility elements produced by the dfacilities...OrdinaryFacility rule.</p>
      <p>On the line marked d), a path condition is selected from the
failed set of path conditions to examine further. A matching is
performed with extra debugging information which indicates on
the line marked e) that the School - OrdinaryFacility traceability
link could not be found in the path condition.</p>
      <p>Match0
Daughter2</p>
      <p>Woman</p>
      <p>Family3
Apply1</p>
      <p>Match10
Neighborhood2Family14</p>
      <p>District
daughters</p>
      <p>Match19</p>
      <p>registeredIn</p>
      <p>Apply11
Child
Neighborhood
family
goesTo
schools</p>
      <p>d...SpecFacPerson</p>
      <p>School
students
special
Service</p>
      <p>Apply20</p>
      <p>District
facilities
SpecialFacility
members</p>
      <p>Woman
5.1.1 Visualization. Figure 8 shows a visualization for the failed
path condition mentioned in part d) from Figure 7. This information
is presented for the user to understand how the contract fails to
match on the path condition. However, it is dificult to comprehend
as it presents a technical, graph-based representation. In
comparison, Figure 2 on page 2 shows a hand-made (but more natural)
visualization for a diferent path condition.</p>
      <p>Another critique of this visualization is the inability to see the
structure which would allow the contract to be satisfied. For
example, the Neg_SchoolOrdFac requires a School element connected
to a Service element through an ordinary link, not the special link
shown in a pale yellow oval in the middle of Figure 8.</p>
      <p>In future work, we intend to improve our visualization
techniques by creating MPS plugins for visual viewers and editors of
transformations, contracts, and path conditions.
6</p>
    </sec>
    <sec id="sec-12">
      <title>RELATED WORK</title>
      <p>
        There is significant previous work in the general field of model
transformation verification [
        <xref ref-type="bibr" rid="ref12 ref6">6, 12</xref>
        ]. Our present work focuses on
how to relate the result of contract verification to the
transformation.
      </p>
      <p>
        The work of Burgueneo et al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] compares the elements in Tracts
to the rules in the transformation. These tracts define a set of
constraints on the source and target meta-models, a set of
sourcetarget constraints, and a tract test suite. The intention is to suggest
to the user which rules are causing constraints to fail by matching
the classes and associations in the rules and constraints.
      </p>
      <p>
        Cuadrado et al. [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] discuss a technique for statically analyzing
ATL transformations. Their technique uses type inference and other
analyses to determine potential problems in the transformation.
From this, OCL constraints are generated and used to produce
“witness” input models which precisely target the error.
      </p>
      <p>
        The thesis of Amstel [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] tackles the issue of evaluating the
quality of a model transformation. User studies are performed to rate
transformations based on qualities such as re-usability,
completeness, and conciseness. These qualitative facets of the transformation
are then correlated with quantitative metrics, such as the number
of rules or variables in the transformation, to provide a guide for
the transformation designer to build intuitive transformations.
7
      </p>
    </sec>
    <sec id="sec-13">
      <title>CONCLUSION</title>
      <p>In this paper, we have discussed three analyses implemented in the
SyVOLT tool to detect and report errors in the input
transformation and contract to the user so that these errors can be fixed and
successful verification can be achieved.</p>
      <p>
        The checks and analyses detailed in this paper arose organically
out of the development of the contract verification tool, and have
been quite successful in detecting errors as well as giving insight
into the behaviour of the contracts and transformations [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. In
the future, we aim to improve these techniques to allow for more
precise detection, visualization, and correction of errors.
      </p>
      <p>
        An especially crucial feature which is lacking in SyVOLT is the
visualization of transformation execution, both before and after the
application of rules as well as the actual matching and rewriting
steps of each rule [
        <xref ref-type="bibr" rid="ref15 ref7">7, 15</xref>
        ]. Implementing these techniques would
assist with two key questions we encountered during the
development of SyVOLT: why is this rule/contract not matching, when it
should? and why is this rule/contract matching, when it shouldn’t?
      </p>
      <p>
        We note that these debugging questions are relatively simple,
and yet the igraph and T-Core libraries used in the SyVOLT tool
lack suficiently powerful debugging mechanisms, hindering
development. For future work, we are interested in developing and
promoting reusable libraries for graph-matching visualization and
debugging in concert with the ModelVerse [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] and AToMPM [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]
      </p>
      <p>Developing a systematic approach to developing contracts is also
a goal of our research, requiring user experiments to determine how
users build contracts and what debugging information they require.
As well, an important task is to transfer our contract verification and
debugging techniques from the DSLTrans model transformation
language to others with more expressiveness.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Banafsheh</given-names>
            <surname>Azizi</surname>
          </string-name>
          , Bahman Zamani, and
          <string-name>
            <surname>Shekoufeh</surname>
          </string-name>
          Kolahdouz-Rahimi.
          <year>2017</year>
          .
          <article-title>Contract verification of ETL transformations</article-title>
          . In International Conference on Computer and Knowledge Engineering. IEEE,
          <fpage>154</fpage>
          -
          <lpage>160</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Bruno</given-names>
            <surname>Barroca</surname>
          </string-name>
          , Levi Lúcio, Vasco Amaral, Roberto Félix, and
          <string-name>
            <given-names>Vasco</given-names>
            <surname>Sousa</surname>
          </string-name>
          .
          <year>2011</year>
          .
          <article-title>DSLTrans: A Turing Incomplete Transformation Language</article-title>
          .
          <source>In International Conference on Software Language Engineering</source>
          . Springer Berlin Heidelberg,
          <fpage>296</fpage>
          -
          <lpage>305</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Loli</given-names>
            <surname>Burgueno</surname>
          </string-name>
          , Javier Troya, Manuel Wimmer, and Antonio Vallecillo.
          <year>2015</year>
          .
          <article-title>Static Fault Localization in Model Transformations</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>41</volume>
          ,
          <issue>5</issue>
          (
          <year>2015</year>
          ),
          <fpage>490</fpage>
          -
          <lpage>506</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Jesús</given-names>
            <surname>Sánchez</surname>
          </string-name>
          <string-name>
            <surname>Cuadrado</surname>
          </string-name>
          , Esther Guerra, and Juan de Lara.
          <year>2017</year>
          .
          <article-title>Static analysis of model transformations</article-title>
          .
          <source>IEEE Transactions on Software Engineering</source>
          <volume>43</volume>
          ,
          <issue>9</issue>
          (
          <year>2017</year>
          ),
          <fpage>868</fpage>
          -
          <lpage>897</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Martin</given-names>
            <surname>Fowler</surname>
          </string-name>
          .
          <year>2008</year>
          . Projectional Editing. https://martinfowler.com/bliki/ ProjectionalEditing.html.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <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>
            <surname>Wieland</surname>
          </string-name>
          . Schwinger.
          <year>2013</year>
          .
          <source>Automated Verification of Model Transformations based on Visual Contracts. Automated Software Engineering</source>
          <volume>20</volume>
          ,
          <issue>1</issue>
          (
          <year>2013</year>
          ),
          <fpage>5</fpage>
          -
          <lpage>46</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>Maris</given-names>
            <surname>Jukšs</surname>
          </string-name>
          , Clark Verbrugge, and
          <string-name>
            <given-names>Hans</given-names>
            <surname>Vangheluwe</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Transformations Debugging Transformations</article-title>
          . In MDEbug: Debugging in Model-Driven Engineering at International Conference on Model
          <source>Driven Engineering Languages and Systems.</source>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Levi</given-names>
            <surname>Lúcio</surname>
          </string-name>
          , Bentley Oakes, Cláudio Gomes, Gehan Selim, Juergen Dingel, James Cordy, and
          <string-name>
            <given-names>Hans</given-names>
            <surname>Vangheluwe</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>SyVOLT: Full Model Transformation Verification Using Contracts.</article-title>
          .
          <source>In International Conference on Model Driven Engineering Languages and Systems</source>
          .
          <volume>24</volume>
          -
          <fpage>27</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Levi</given-names>
            <surname>Lúcio</surname>
          </string-name>
          , Bentley Oakes, and
          <string-name>
            <given-names>Hans</given-names>
            <surname>Vangheluwe</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>A technique for symbolically verifying properties of graph-based model transformations</article-title>
          .
          <source>Technical Report</source>
          SOCS-TR-
          <year>2014</year>
          .
          <article-title>1</article-title>
          . McGill University.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>Bentley</given-names>
            <surname>Oakes</surname>
          </string-name>
          .
          <year>2018</year>
          .
          <article-title>A Symbolic Execution-Based Approach to Model Transformation Verification Using Structural Contracts</article-title>
          .
          <source>Ph.D. Dissertation</source>
          . McGill University.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Bentley</surname>
            <given-names>Oakes</given-names>
          </string-name>
          , Javier Troya, Levi Lúcio, and
          <string-name>
            <given-names>Manuel</given-names>
            <surname>Wimmer</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <article-title>Full contract verification for ATL using symbolic execution</article-title>
          .
          <source>Software and Systems Modeling</source>
          (
          <year>2016</year>
          ),
          <fpage>1</fpage>
          -
          <lpage>35</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>Gehan</given-names>
            <surname>Selim</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>Formal Verification of Graph-Based Model Transformations</article-title>
          .
          <source>Ph.D. Dissertation</source>
          . Queen's University.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Eugene</surname>
            <given-names>Syriani</given-names>
          </string-name>
          , Hans Vangheluwe, Raphael Mannadiar, Conner Hansen, Simon Van Mierlo,
          <string-name>
            <given-names>and Huseyin</given-names>
            <surname>Ergin</surname>
          </string-name>
          .
          <year>2013</year>
          .
          <article-title>AToMPM: A web-based modeling environment</article-title>
          .
          <source>In International Conference on Model Driven Engineering Languages and Systems</source>
          .
          <volume>21</volume>
          -
          <fpage>25</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Marinus</surname>
            <given-names>Franciscus van Amstel.</given-names>
          </string-name>
          <year>2012</year>
          .
          <article-title>Assessing and improving the quality of model transformations</article-title>
          .
          <source>Ph.D. Dissertation</source>
          . Technische Universiteit Eindhoven.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Simon Van Mierlo</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>Explicitly Modelling Model Debugging Environments.</article-title>
          .
          <source>In ACM Student Research Competition at the International Conference on Model Driven Engineering Languages and Systems</source>
          .
          <volume>24</volume>
          -
          <fpage>29</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Simon</surname>
            <given-names>Van Mierlo</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bruno Barroca</surname>
            , Hans Vangheluwe, Eugene Syriani, and
            <given-names>Thomas</given-names>
          </string-name>
          <string-name>
            <surname>Kühne</surname>
          </string-name>
          .
          <year>2014</year>
          .
          <article-title>Multi-level modelling in the Modelverse.</article-title>
          .
          <source>In International Conference on Model Driven Engineering Languages and Systems</source>
          .
          <volume>83</volume>
          -
          <fpage>92</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Simon</surname>
            <given-names>Van Mierlo</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Yentl Van Tendeloo</given-names>
            ,
            <surname>Bart Meyers</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Hans</given-names>
            <surname>Vangheluwe</surname>
          </string-name>
          .
          <year>2017</year>
          .
          <article-title>Domain-specific Modelling For Human-computer Interaction. In The Handbook of Formal Methods in Human-Computer Interaction</article-title>
          . Springer International Publishing,
          <volume>435</volume>
          -
          <fpage>463</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Daniel</given-names>
            <surname>Varró</surname>
          </string-name>
          , Szilvia Varró-Gyapai, Hartmut Ehrig, Ulrike Prange, and
          <string-name>
            <given-names>Gabriele</given-names>
            <surname>Taentzer</surname>
          </string-name>
          .
          <year>2006</year>
          .
          <article-title>Termination Analysis Of Model Transformations By Petri Nets</article-title>
          . In International Conference on Graph Transformation (
          <year>2006</year>
          ), Vol.
          <volume>4178</volume>
          . Springer,
          <fpage>260</fpage>
          -
          <lpage>274</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Markus</surname>
            <given-names>Voelter</given-names>
          </string-name>
          , Arie van Deursen,
          <string-name>
            <surname>Bernd Kolb</surname>
            , and
            <given-names>Stephan</given-names>
          </string-name>
          <string-name>
            <surname>Eberle</surname>
          </string-name>
          .
          <year>2015</year>
          .
          <article-title>Using C language extensions for developing embedded software: A case study</article-title>
          .
          <source>In ACM SIGPLAN Notices</source>
          , Vol.
          <volume>50</volume>
          . ACM,
          <volume>655</volume>
          -
          <fpage>674</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>