<!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>Symbolic Execution of Satellite Control Procedures in Graph-Transformation-Based EMF Ecosystems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Nico Nachtigall</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Benjamin Braatz</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Thomas Engel</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universit ́e du Luxembourg</institution>
          ,
          <country country="LU">Luxembourg</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2013</year>
      </pub-date>
      <fpage>61</fpage>
      <lpage>66</lpage>
      <abstract>
        <p>Symbolic execution is a well-studied technique for analysing the behaviour of software components with applications to test case generation. We propose a framework for symbolically executing satellite control procedures and generating test cases based on graph transformation techniques. A graph-based operational symbolic execution semantics is defined and the executed procedure models are used for generating test cases by performing model transformations. The approach is discussed based on a prototype implementation using the Eclipse Modelling Framework (EMF), Henshin and ECLiPSe-CLP tool ecosystem.</p>
      </abstract>
      <kwd-group>
        <kwd>symbolic execution</kwd>
        <kwd>graph transformation</kwd>
        <kwd>test case generation</kwd>
        <kwd>triple graph grammars</kwd>
        <kwd>EMF henshin</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Symbolic execution [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] is a well-studied technique for analysing the behaviour of
software components with applications to test case generation. The main idea is
to abstract from possibly infinite or unspecified behaviour. Uninitialised input
variables or external function calls are represented by symbolic variables with the
sets of possible concrete input values as value domains. Consequently, symbolic
program execution is rather based on symbols than on concrete values leading to
symbolic expressions which may restrict the value domains of the symbols. For
each execution path, a path constraint (PC) is defined by a dedicated boolean
symbolic expression. Solving the expression, i.e., finding a valuation for all
contained symbolic variables so that the expression is evaluated to true, provides
concrete input values under which the corresponding path is traversable. An
execution path is traversable as long as its path constraint is solvable.
      </p>
      <p>
        In this paper, we propose a framework for symbolically executing satellite
control procedures (SCPs) and generating test cases based on graph
transformation techniques [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. We successfully apply graph transformation techniques
in an industrial project with the satellite operator SES (Soci´et´e Europ´eenne des
Satellites) for an automatic translation of SCPs from proprietary programming
languages to SPELL (Satellite Procedure Execution Language &amp; Library) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
The safety-critical nature of SCPs implies that extensive testing is required after
translation. The presented approach allows us to generate tests without leaving
this graph-transformation-based ecosystem. We define a graph-based operational
semantics for symbolically executing SCPs for a subset of the SPELL language.
The executed procedure models are used for generating test cases by performing
model transformations. We discuss our approach based on a prototype
implementation using the EMF Henshin [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] and ECLiPSe-CLP [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] tools.
      </p>
      <p>Sec. 2 introduces the symbolic execution framework. In Sec. 3, the
graphbased operational symbolic execution semantics is defined. Sec. 4 presents model
transformation rules for test case generation and a prototype implementation for
the approach. Sec. 5 concludes the paper and compares with related work.
2</p>
      <p>
        Models &amp; Symbolic Execution Framework
The symbolic execution framework in Fig. 1 uses the abstract syntax tree (AST)
of a procedure, which defines a typed attributed graph [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The AST can be
constructed by parsing the source code with appropriate tools (see Sec. 4). The AST
graph is symbolically executed using two graph transformation systems (GTSs).
A GTS is a set of graph transformation rules where each rule may create or delete
nodes and edges or update attribute values. In phase one, the GTS GTS F low
is used to annotate AST with execution flow information leading to graph
AF = AST + FLOW . In phase two (symbolic execution), the GTS GTS Sym
is exhaustively applied to AF leading to graphs Statei = AF + SYM i, i = 1..n
representing the status of the execution.
      </p>
      <p>
        Fig. 2 shows the running example in a small subset of the SPELL language
[
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. SCP “Charge Batteries” retrieves the state of charge (SC) of both batteries
of a satellite, defines a minimal threshold min of 50%, and switches to the battery
with higher SC if it exceeds min. Otherwise, an alert is issued. Meta-model SCP
specifies the general syntax of ASTs for such procedures. A procedure Proc
consists of a list of statements Stmnt (assignments Asg, function calls FnCall,
definitions FnDef or branching If structures) with explicit next pointers. Function calls
contain a list of arguments (arg) and function definitions contain a list of
parameters (pm). An assignment contains a variable (var) and an assigned expression
(ex). Expressions (Expr) are either numbers (Number), variables (Var) or Boolean
expressions (Bool) with operator (&lt;, &lt;=, &gt;, &gt;=, and, or) and operands (left (le)
and right (ri)). Complex statements (If,FnDef) contain a block (B) that references
a list of statements. Furthermore, If statements have a boolean condition cond
and may have else and ElIf structures (edge el). The AST for the procedure is a
graph typed over meta-model SCP. Graph FLOW represents the flow annotation
of AST . Places P are assigned (dotted edges asg) to nodes in AST that should
      </p>
    </sec>
    <sec id="sec-2">
      <title>Graph based SCP Model</title>
      <p>AST</p>
      <sec id="sec-2-1">
        <title>Annotate</title>
      </sec>
      <sec id="sec-2-2">
        <title>E-Flow</title>
      </sec>
      <sec id="sec-2-3">
        <title>Information</title>
        <p>(apply GTSFlow )
AF
ASAStSTaTPtP0e01..n</p>
      </sec>
      <sec id="sec-2-4">
        <title>Stepwise</title>
      </sec>
      <sec id="sec-2-5">
        <title>Symbolic</title>
      </sec>
      <sec id="sec-2-6">
        <title>Execution</title>
        <p>(apply GTSSym )</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Model checking</title>
      <p>invariant properties
Detection of unreachable
(„dead“) model fragments
Test case generation</p>
      <sec id="sec-3-1">
        <title>Bool Op op le,ri</title>
      </sec>
      <sec id="sec-3-2">
        <title>Number Int i Var Id v</title>
      </sec>
      <sec id="sec-3-3">
        <title>Expr ex</title>
        <p>var pm</p>
        <p>cond
Pm Arg arg IFdnfCnall
arg
pm
1 DEF switch &amp; charge (x ,
2 y ,
3 min ):
4 IF x &gt;y AND
5 x &gt; min :
6 Send ( ’ SWITCH_B1 &amp;
7 CHARGE_B2 ’)
8
9 ELIF y &gt; min :
10 Send ( ’ SWITCH_B2 &amp;
11 CHARGE_B1 ’)
12
13 s0 = GetTM ( ’ SC1 ’)
14 s1 = GetTM ( ’ SC2 ’)
15 min =50
16
17 switch &amp; charge (s0 ,
18 s1 ,
19 min )
20
21 IF s0 &lt;= min AND
22 s1 &lt;= min :
23 Alert ()
first :Proc</p>
        <p>:FnDef
fn=switch&amp;charge</p>
        <p>pm :Pm
bod..y. pm v=‘x‘</p>
        <p>:B
f :If
1
1
1
isen con:dBool
l next le op=AND ..r.i
le :oBpo=o&gt;l ri
...</p>
      </sec>
      <sec id="sec-3-4">
        <title>FnDef</title>
        <p>Id fn</p>
        <p>body
el ...
bl ...
asg
:P
f</p>
      </sec>
      <sec id="sec-3-5">
        <title>B bl,else If</title>
        <p>Stmnt next Proc</p>
        <p>first
el</p>
        <p>Asg
on
:P
f
l
:P n</p>
        <p>...</p>
        <p>:P n l ...
f,l :P l ...</p>
        <p>f hi lo</p>
        <p>:P l
f
f :P nl ...
:P n ...</p>
        <p>f
... c
l
…
)
…1
,
n S&gt;
e S0
:koT lrt=eu (and…2=</p>
        <p>vae c=p sym
c c
:Var 0
.lil-se423131nn.e.n.xentv.xe.=at.x‘rtxg‘afrn:gF=ns:vCAw::=IasAfi‘g.lrs.lg0.‘var...ex... ..nn. :::nPPP :Pf,fl n l...... nc nx:Sybm:Sybmt rtS=emrtS=em1 lst</p>
        <p>AST FLOW SYMn
Fig. 2. SCP meta-model (top), SCP “Charge Batteries” (left), SCP model (AST), flow
annotation (FLOW) and symbolic execution elements (SYMn)
be executed. P nodes can be connected by f,l or n edges in order to indicate which
other nodes need to be executed at first, next or last before finishing the
execution of a node, e.g., in order to execute the procedure (node Proc), the assignment
in line 13 (node Asg) needs to be executed first. For each execution path, a Token
representing the current execution point with path constraint is created (in total
six Tokens for the example). In graph SYM n, the Token node on place P that
is assigned to node Proc indicates that the procedure was evaluated (eval=true)
with path constraint pc=and(and(S0&gt;S1,S0&gt;50),not(and(S0&lt;=50,S1&lt;=50))) and
symbolic variables S0, S1 (Symb) for GetTM(’SC1’) and GetTM(’SC2’) by
entering line 6 but not line 23. The resulting graphs State1..n can be used for model
checking invariants, detection of dead model fragments or test generation.
3</p>
        <p>
          Operational Execution Semantics
The execution semantics is divided into the execution flow of the AST graph
and the token semantics for traversing all flow paths. Fig. 3 shows the rules of
GTS F low and GTS Sym in short-hand notation, i.e., nodes and edges marked
with &lt;+&gt; are created, those marked with &lt;-&gt; are deleted and attribute values of
the form [x=&gt;y] are updated from x to y when applying the rule. Nodes marked
with &lt;tr&gt; have a “hidden” translation attribute that is updated [false=&gt;true]
during rule application so that the rule is only applied once. A more formal
definition of graph transformation in general is given in [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
        <p>Rule Init1 specifies that the first statement of a procedure needs to be
executed first. An initial token is put on the first place with path constraint true
and eval=false. Rule Stmnt1 defines that successive statements need to be
executed successively. Note that the first statement in Fig. 2 is a FnDef. Therefore,
another rule defines that the succeeding statement needs to be executed first
until there is no more FnDef. Rule Asg1 defines that the expression of an
assignment needs to be evaluated first before assigning the resulting value. The rule
for blocks is defined analogously. Rule Bool1 defines that the left operand has to
be evaluated before the right operand. Rule If1, branches the flow - the condition
is evaluated before executing the block (hi - positive condition) or an “empty”
place (lo - negative condition). Rule ElIf1 links the “empty” place of rule If1 to
the alternative If. Rule Else1 is defined analogously.</p>
        <p>Rule TFst2 moves the token to the first child place (edge f) as long as possible.
Rule TNxt2 moves the token of an evaluated place to the next place (edge n) and
changes attribute eval to false. The rules implement a left-most inner-most
evaluation strategy. Rule GetTM2 evaluates each GetTM-FnCall to a path-wide unique
symbolic variable (Symb) Si (uniqueness is given by token attribute sym which is
increased by one). Note that Symbs are ordered in their occurence of evaluation
which is important for a later test generation. Rule GetTM2 requires that a last
Symb already exists. An analogue rule creates a last Symb if not existent. Rule
Asg2 assigns the term of the evaluated expression to the variable Var and sets the
assignment as evaluated by moving token edge on. Rule BoolAnd2 concatenates
Init1
:Token&lt;+&gt;
eval=false &lt;+&gt;
spycm=t=r0ue on
:P
&lt;+&gt;
&lt;+&gt;
:Proc
&lt;tr&gt;
&lt;+&gt;
f,l
first
:P
&lt;+&gt;
&lt;+&gt;
:Stmnt
&lt;tr&gt;</p>
        <p>Stmnt1
:P &lt;+&gt; l
l &lt;-&gt;
:P
n :P
&lt;+&gt; &lt;+&gt;</p>
        <p>&lt;+&gt;
next
:Stmnt :Stmnt
&lt;tr&gt;</p>
        <p>Asg1
:P
:P
&lt;+&gt;
f,l
&lt;+&gt;</p>
        <p>&lt;+&gt;
:Asg
ex
:Expr
&lt;tr&gt;
:P
&lt;+&gt;
Bool1
:P
&lt;+&gt;
&lt;+&gt;
n
&lt; &lt;+f&gt; :P &lt;+l&gt; &lt;
+&gt; +&gt;</p>
        <p>:Bool
le</p>
        <p>ri
:Expr :Expr
&lt;tr&gt; &lt;tr&gt;</p>
        <p>If1
&lt;+&gt;hi :P lo&lt;+&gt;</p>
        <p>&lt;+&gt;
&lt;:+P&gt; f +&gt;&lt;&lt;:+P&gt;
&lt;+&gt;&lt;+&gt;l :P l &lt;+&gt;
bl :If cond
&gt;
+
&lt;
:Bool
&lt;tr&gt;</p>
        <p>ElI:fP1 lo
f
:P l</p>
        <p>:P
:If
el
:If
&lt;tr&gt;</p>
        <p>TNxt2
:P n :P
&lt;-&gt;on on&lt;+&gt;</p>
        <p>:Token
eval=[true
=&gt;false]</p>
        <p>GetTM2 :FnCall</p>
        <p>:P fn='GetTM'
&lt;+&gt; c :Symb&lt;+&gt; &lt;n+x&gt;t :Symb
on &lt;+&gt; c:Totkeernm=Si lst&lt;+&gt;
eval=[false=&gt;true]
sym=[i=&gt;i+1]
&lt;-&gt;</p>
        <p>l :P
:Term
term=t on&lt;+&gt;
c
:Token
eval=true
:Asg</p>
        <p>:Var
var Id v
:Var&lt;+&gt;
in&lt;+&gt; vnaalm=te=v
lst
Branch2 :P</p>
        <p>:Var
name=v
val=vt
in</p>
        <p>:Terhmi :P lo :P :nVaamr&lt;e+=&gt;v
&lt;+&gt;on termc=t c &lt;o-n&gt; &lt;+&gt;on val=vt
eval=[:tTruoek=e&gt;ncheck] e:vTaolk=ecnh&lt;e+c&gt;k &lt;+ &gt;in
pc=[pc=&gt;and(pc,t)] pc=[pc=&gt;
sym=i and(pc,</p>
        <p>c not(t))]
:Symb &lt;+c&gt; sym=i</p>
        <p>Check2
]
e
koen lfsck=&gt;ae )(rtc=epu
:T l[c=ah c=p sa</p>
        <p>t
v c
e p
:B
&lt;tr&gt;
:P
c
Asg2
on
&lt;-&gt;
&gt;
+
&lt;
both evaluated operands with and. Analogue rules for boolean expressions with
other operators (or,&lt;,&gt;,etc.) are defined. Amalgamated rule Branch2 duplicates
the token with all connected variables and symbols, negates the condition (not(t))
for the lo path and concatenates the condition with the path constraint. Rule
Check2 checks, if the path constraints of duplicated tokens are still satisfiable
after a branch (attribute condition sat(pc)=true). If the path constraint of a token
becomes unsatisfiable, the token status eval remains check and the token can not
be moved any more. After simulating the example in Fig. 2, three tokens from
six possible paths are assigned to node Proc with eval=true while the other three
tokens remain at the last If statement with unsolvable path constraints. Only
tokens that are assigned to node Proc with eval=true are considered during test
case generation (they represent execution paths with solvable path constraints).
Additional rules are defined for annotating and traversing function calls and
definitions. A function is traversed every time it is called so that global side effects
in execution can be respected, e.g., operations on call by reference arguments.
4</p>
        <p>
          Implementation &amp; Test Case Generation
A procedure is parsed with Xtext [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] to an EMF AST graph first. Then, the EMF
Henshin tool [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] is used in combination with the ECLiPSe constraint solver [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] to
execute the AST graph by automatic rule applications and satisfiability checking
/ solving constraints. The AST graph is completely preserved during execution.
Correspondences between symbolic variables of path constraints (nodes of type
Symb) and AST graph structures are used for test generation by applying the
forward model transformation (FT) rules in Fig. 4. An FT rule [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] consists of
a source graph GS , correspondence graph GC and target graph GT . While GS
is parsed, nodes and edges in GC , GT are created. Applying the rules yields a
graph that is serialised to test case files with Xtext. Rule Proc2Test creates a Test
suite for a procedure. Rule Token2Case creates a test case for each execution path
with solvable path constraint. Rule LstSymb2KeyElem adds a key tm for each last
(edge lst) evaluated GetTM(tm) function call of an execution path to the test
case with a list containing a test input valuation for symbolic variable s as first
(edge fst) element so that path constraint pc is satisfied (solve(s,pc)). A second
rule handles all previous symbolic variables. Symbolic variables are ordered in
order to reflect the sequential execution order of the represented GetTM function
calls which is needed for proper test generation with test inputs in correct order.
Proc2Test
GS
:Proc
&lt;tr&gt;
        </p>
        <p>GC GT
&gt;:C &gt;:&lt;T+e&gt;st
&lt;+ +&gt; &lt;+
&lt;</p>
        <p>Token2Case
GS
:Proc</p>
        <p>GC GT
:C
)
&lt;+&gt; ,scp
m (e
lEe lvo
ts s=
i:L lva</p>
        <p>Conclusion &amp; Related Work
We have presented a framework for symbolically executing simple satellite
procedures. The approach preserves the correspondences between symbolic variables
and the AST, so that the result graph can be used for test case generation by
performing model transformations afterwards. A prototype implementation for
the symbolic execution and test case generation framework has been presented.</p>
        <p>
          In contrast to interpreter based symbolic execution engines [
          <xref ref-type="bibr" rid="ref1 ref3">1,3</xref>
          ] of
programming languages, our graph-transformation-based approach allows symbolic
execution on a more abstract level enabling its formal analysis and application to
other languages and behavioural diagrams in future work. In [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ], an abstract
symbolic execution framework based on term rewriting is proposed. In contrast
to our approach, the correspondences between symbolic variables and the
program term are not preserved. Research on how to transfer and enhance results
from term to graph rewriting approaches for symbolic execution is topic of future
work. In [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], the execution of UML state machines is presented but diagram–
path-constraint correspondences are not specified explicitly.
        </p>
        <p>
          In future work, we plan to extend the symbolic execution semantics for
applicability to industrial SPELL SCPs [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] and analyse its correctness w.r.t. a
formal SPELL semantics that needs to be defined first. We will investigate
important properties of symbolically executed models that should be preserved
during model refactorings and how to ensure their preservation. Moreover, we
will assess the scalability of our approach.
        </p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Anand</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pasareanu</surname>
            ,
            <given-names>C.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Visser</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>JPF-SE: A symbolic execution extension to java pathfinder</article-title>
          .
          <source>In: TACAS</source>
          . pp.
          <fpage>134</fpage>
          -
          <lpage>138</lpage>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Arusoaie</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lucanu</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rusu</surname>
          </string-name>
          , V.:
          <article-title>A Generic Approach to Symbolic Execution</article-title>
          .
          <source>Tech. Rep. RR-8189</source>
          , INRIA (Dec
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Cadar</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dunbar</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Engler</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Klee: unassisted and automatic generation of high-coverage tests for complex systems programs</article-title>
          .
          <source>In: Proceedings of the 8th USENIX conference on Operating systems design and implementation</source>
          . pp.
          <fpage>209</fpage>
          -
          <lpage>224</lpage>
          . OSDI'08,
          <string-name>
            <given-names>USENIX</given-names>
            <surname>Association</surname>
          </string-name>
          , Berkeley, CA, USA (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Cadar</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sen</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Symbolic execution for software testing: three decades later</article-title>
          .
          <source>Commun. ACM</source>
          <volume>56</volume>
          (
          <issue>2</issue>
          ),
          <fpage>82</fpage>
          -
          <lpage>90</lpage>
          (
          <year>Feb 2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. The Eclipse Foundation: Xtext (
          <year>2013</year>
          ), http://www.eclipse.org/Xtext/
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Ehrig</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ehrig</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Prange</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taentzer</surname>
          </string-name>
          , G.:
          <article-title>Fundamentals of Algebraic Graph Transformation</article-title>
          , vol.
          <source>EATCS Monographs in Theoretical Computer Science</source>
          . Springer (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>EMF</given-names>
            <surname>Henshin</surname>
          </string-name>
          (
          <year>2013</year>
          ), http://www.eclipse.org/modeling/emft/henshin/
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. Hermann,
          <string-name>
            <given-names>F.</given-names>
            ,
            <surname>Gottmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Nachtigall</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            ,
            <surname>Braatz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Morelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            ,
            <surname>Pierre</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Engel</surname>
          </string-name>
          ,
          <string-name>
            <surname>T.</surname>
          </string-name>
          :
          <article-title>On an Automated Translation of Satellite Procedures Using Triple Graph Grammars</article-title>
          .
          <source>In: Proc. ICMT'13, LNCS</source>
          , vol.
          <volume>7909</volume>
          , pp.
          <fpage>50</fpage>
          -
          <lpage>51</lpage>
          . Springer (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Schimpf</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shen</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Eclipse - from lp to clp</article-title>
          .
          <source>Theory and Practice of Logic Programming</source>
          <volume>12</volume>
          ,
          <fpage>127</fpage>
          -
          <lpage>156</lpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Zurowska</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dingel</surname>
          </string-name>
          , J.:
          <article-title>Symbolic execution of UML-RT State Machines</article-title>
          .
          <source>In: Proc. of SAC '12</source>
          . pp.
          <fpage>1292</fpage>
          -
          <lpage>1299</lpage>
          . SAC '12,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>