<!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>UmpleRun: a Dynamic Analysis Tool for Textually Modeled State Machines using Umple</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Hamoud Aljamaan</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Timothy Lethbridge</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Miguel Garzón</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Andrew Forward</string-name>
          <email>aforward@eecs.uottawa.ca</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>School of Electrical Engineering and Computer Science University of Ottawa Ottawa</institution>
          ,
          <country country="CA">Canada</country>
        </aff>
      </contrib-group>
      <fpage>16</fpage>
      <lpage>20</lpage>
      <abstract>
        <p>In this section, we will present the car transmission model</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Umple [
        <xref ref-type="bibr" rid="ref1 ref2">1,2</xref>
        ] is a model-oriented programming language
that allows modelers to model UML constructs textually or
graphically and generate high quality code in a number of
targeted programming languages. In an extension to the Umple
language, MOTL was introduced to allow trace specification at
the model level for various modeling constructs using model
level textual trace directives [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Trace specification of state
machines, for instance, has the flexibility of tracing different
state machine components such as the whole state machine,
any state (at any level of nesting), and specific events.
      </p>
    </sec>
    <sec id="sec-2">
      <title>In this paper, we are presenting the UmpleRun a tool that</title>
      <p>will allow modelers to execute textually modeled state
machines written in Umple and validate their dynamic
behavior using execution scenarios. If a modeler has written</p>
    </sec>
    <sec id="sec-3">
      <title>MOTL trace directives for the model under analysis,</title>
    </sec>
    <sec id="sec-4">
      <title>UmpleRun will generate informative execution traces in addition to the validation verdict. Execution traces can be used to analyse the system under the inspection.</title>
    </sec>
    <sec id="sec-5">
      <title>Benefits of our approach include:</title>
      <p>•
•</p>
      <p>High-level validation of model dynamFicigbuerhea8vi.1or8:</p>
    </sec>
    <sec id="sec-6">
      <title>Accomplished by running models against execution scenarios to assert model behavior.</title>
      <p>White box testing of models: Thorough analysis,
verification and debugging of the models themselves
becomes possible. Models can be traced and then
executed to produce execution traces, which can in
addition be analyzed.</p>
    </sec>
    <sec id="sec-7">
      <title>The remaining sections of this paper are organized as follows: Section 2 presents a Car transmission system example that will be used to help illustrate our approach. Section 3 describes the UmpleRun tool and execution scenarios. Section</title>
      <p>Exercises
selectFirst</p>
      <p>selectSecond
First
selectFirst</p>
      <p>Neutral
reachSecondSpeed
[driveSelected]
dropBelowSecondSpeed
[driveSelected]</p>
      <p>Second
selectSecond
selectReverse
selectNeutral
selectNeutral
reachThirdSpeed
[driveSelected]
dropBelowThirdSpeed</p>
      <p>Reverse
Third
State diagram foFirga.1c.arC’saaruTtroamnsamtiiscstiornanSstamteisMsiaocnhisnheo[4w]ing substates</p>
      <p>The notation reachSecondSpeed[driveSelected] illustrates the use of a gu
condTithieon.CaTrhetranssymstiesmsionwisllystoemnly berhesapvoionrd wtaos tehxetuailnlydicated ev
(mreoadcehlSeedconudsSipnegedU)imftphle caosndshitoiownnininsqLuiasrteinbgra1ck.eLtsinisestru3e.toIn2F9igure 8.18, t
irsepurseesdenttothperevceanrt trtahnes mtraisnssimonisssitoantusfrosmtatechmanagcihnigneg.eLarinief t4he driver h
mshaonwusaltlyhesesletactteednfaimrset,orwsheicleonldingeea1r4. Adegculaarrdescothnadtittihoenrediifsfearsnfrom the ty
oexfictoancdtiitoinonaswseocsiaawteidnwFiigthurtehi8s.1s4ta:tae.gLuainrde c1o9nidsiatinonexisa monpllyeeovfaaluated when
agsusaorcdieadtedeveevnetn. tInoclcinuers3.0 we are doing a code injection to event
selFeicgtuDreri8v.e19toshows how</p>
      <p>set the Bowoelehaanveatctorinbvuetrete‘ddrFivigeuSreele8c.1te4dt’o tuosetrnueested substat
Ntoodwifwfeerennetieadtetoit sfhroomw othnelymoanneuaclantcreiglgterrainnsgiticoanusaenddboyneevreenqtuestToRegis
‘selectFirst’ which indicates the manual diving mode.
transition. Note that the ‘Planned’ state has a transition that points directly
the ‘NotEnoughStudents’ substate, and both the transitions to the ‘Closed’ st
comes directly from the inner ‘EnoughStudents’ state. Finally, note that we h
added an activity to the ‘Canceled’ state that deletes all registrations.</p>
    </sec>
    <sec id="sec-8">
      <title>Listing 1: Car transmission Umple code</title>
      <p>Umple
}
drive {
exit / { driveSelected = false;}
selectNeutral -&gt; neutral;
selectFirst -&gt; first;
selectSecond -&gt; second;
first {
reachSecondSpeed [driveSelected] -&gt; second;
}
second {
reachThirdSpeed [driveSelected] -&gt; third;
dropBelowSecondSpeed [driveSelected] -&gt; first;
}
third {</p>
      <p>dropBelowThirdSpeed -&gt; second;</p>
    </sec>
    <sec id="sec-9">
      <title>Using MOTL, we can write trace directives for trace</title>
      <p>
        specification of attributes and state machine. Listing 2 presents
an example of trace directives for the car transmission system.
Using Umple’s mixin capability, we can write MOTL trace
directives independent of the model. Line 2 indicates that we
are interested in tracing any changes to the value of Boolean
attribute ‘driveSelected’. Line 3 traces any incoming or
outgoing transitions from or into state ‘neutral’. The directive
in line 4 will trace whenever event ‘selectReverse’ is triggered
causing a transition. More details on MOTL syntax can be
found here [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
    </sec>
    <sec id="sec-10">
      <title>Listing 2: MOTL trace directive examples</title>
      <sec id="sec-10-1">
        <title>Umple</title>
        <sec id="sec-10-1-1">
          <title>1 class CarTransmission {</title>
        </sec>
        <sec id="sec-10-1-2">
          <title>2 trace driveSelected;</title>
        </sec>
        <sec id="sec-10-1-3">
          <title>3 trace neutral;</title>
        </sec>
        <sec id="sec-10-1-4">
          <title>4 trace selectReverse; 5 }</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-11">
      <title>III. UMPLERUN</title>
    </sec>
    <sec id="sec-12">
      <title>UmpleRun is our tool for running a set of execution</title>
      <p>scenarios against a targeted model. This takes as input an
execution scenario, a template for which is shown in Fig. 2.
Line 1 of any scenario has the keyword ‘command’, then a set
of query methods to execute at every step of execution. Lines 2
and onwards are of a set of commands to be executed to drive
the scenario, along with assertions of the expected return
values of the query methods. The commands can be object
constructor invocations, or method calls such as state machine
event calls.</p>
    </sec>
    <sec id="sec-13">
      <title>Listing 3: Execution scenario template</title>
      <sec id="sec-13-1">
        <title>Execution Scenario</title>
        <p>command, method_calls_after_commands ...
command_1, values_from_method_calls ...
command_2, values_from_method_calls ...
...
command_n, values_from_method_calls ...</p>
      </sec>
    </sec>
    <sec id="sec-14">
      <title>UmpleRun interprets and executes the commands in an</title>
      <p>execution scenario to produce a model validation verdict,
including the failed assertions.</p>
      <p>The dynamic validation process in this architecture is
presented in Fig. 2 and described below:
1. Compilation: The input is an Umple model (named
uModel). At this stage, uModel is parsed, analyzed
and a Java system is created from the input model by
the Umple compiler.
2. Packaging: The Java classes are then packaged into a
container (JAR).
3. Loading the model into memory: A dynamic loader
is created using the previously obtained JAR that will
allow creating new instances of the classes previously
generated by our input model.</p>
    </sec>
    <sec id="sec-15">
      <title>4. Validation: The commands in the execution scenario are run against the class instances and the assertions are validated. The validation verdict is produced at this final stage.</title>
    </sec>
    <sec id="sec-16">
      <title>The command used to validate models dynamic behavior using UmpleRun is:</title>
      <p>java -jar umplerun.jar model.ump exeScenario.cmd</p>
    </sec>
    <sec id="sec-17">
      <title>IV. CAR TRANSMISSION DYNAMIC ANALYSIS</title>
      <p>In this section, we illustrate the application of our tracing
tool and UmpleRun to the Car transmission model we outlined
earlier. First, we will create execution scenarios to verify the
behavior of the Car transmission state machine and explore
successful validation cases of model dynamic behavior. Then,
we will introduce a bug in the Car transmission state machine
and study the validation verdict and inject trace directives to
produce execution traces from UmpleRun.</p>
      <p>A. Successful validation verdict</p>
    </sec>
    <sec id="sec-18">
      <title>We created two execution scenarios to validate the Car</title>
      <p>transmission model behavior as seen in Listing 4 and Listing 6,
with each representing a sequence of commands executed
against the model and then we assert the model constructs
values after each command.</p>
    </sec>
    <sec id="sec-19">
      <title>The execution scenario in Listing 4 follows the template</title>
      <p>described in Listing 3. The first line shows the three ‘get’
method calls that are invoked after every command; these
query the current state of Car transmission state machine, the
current state in the composite state ‘drive’ and the value of</p>
    </sec>
    <sec id="sec-20">
      <title>Boolean attribute ‘driveSelected’.</title>
    </sec>
    <sec id="sec-21">
      <title>Each subsequent line from 2 to 8 begins with a command to</title>
      <p>be executed and then the expected values after completing the
executed command. The command on Line 2 creates a new Car
transmission object. Upon creation of this we expect that we
will be in initial state ‘neutral’, with the nested state value of</p>
    </sec>
    <sec id="sec-22">
      <title>Null since we haven’t entered any nested state. The Boolean</title>
      <p>attribute should be the initialized value, which is false.</p>
      <p>Line 3 executes a ‘selectReverse’ event with the resulting
state expected to be ‘reverse’, and the Boolean attribute value
remains false. Line 5 in the execution scenario specifies that
event ‘selectDrive’ will be triggered and that we should enter
the composite state ‘drive’ with initial state expected to be
‘first’, and Boolean attribute value changes to true, which
means that transmission will be automatic.</p>
    </sec>
    <sec id="sec-23">
      <title>Listing 4: Execution scenario (1)</title>
      <p>Execution Scenario
1 command,getStatus,getStatusDrive,getDriveSelected
2 new CarTransmission, neutral, Null, false
3 selectReverse, reverse, Null, false</p>
      <sec id="sec-23-1">
        <title>4 selectNeutral, neutral, Null, false</title>
      </sec>
      <sec id="sec-23-2">
        <title>5 selectDrive, drive, first, true</title>
      </sec>
      <sec id="sec-23-3">
        <title>6 reachSecondSpeed, drive, second, true</title>
      </sec>
      <sec id="sec-23-4">
        <title>7 reachThirdSpeed, drive, third, true</title>
      </sec>
      <sec id="sec-23-5">
        <title>8 selectNeutral, neutral, Null, false</title>
      </sec>
    </sec>
    <sec id="sec-24">
      <title>Overall, this execution scenario provides the means for</title>
      <p>modelers to assert the dynamic behavior of their state machines
and alert them by detecting if there is any unexpected behavior.</p>
    </sec>
    <sec id="sec-25">
      <title>We executed the previously explained execution scenario on the Car transmission state machine using UmpleRun and we received a detailed validation result as shown in Listing 5.</title>
    </sec>
    <sec id="sec-26">
      <title>If the validation using UmpleRun is not successful, then the modeler can do a detailed step-by-step examination of the more detailed trace output to obtain clues as to what might have gone wrong, as we will see in the next section.</title>
    </sec>
    <sec id="sec-27">
      <title>Listing 5: Successful dynamic validation result (1)</title>
      <sec id="sec-27-1">
        <title>Compiling CarTrans.ump... success.</title>
      </sec>
      <sec id="sec-27-2">
        <title>Building model... success.</title>
      </sec>
      <sec id="sec-27-3">
        <title>Loading model into memory... success.</title>
      </sec>
      <sec id="sec-27-4">
        <title>Running commands:</title>
      </sec>
      <sec id="sec-27-5">
        <title>Created CarTransmission</title>
        <p>getStatus = neutral
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-27-6">
        <title>Executed #selectReverse</title>
        <p>getStatus = reverse
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-27-7">
        <title>Executed #selectNeutral</title>
        <p>getStatus = neutral
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-27-8">
        <title>Executed #selectDrive</title>
        <p>getStatus = drive
getStatusDrive = first
getDriveSelected = true</p>
      </sec>
      <sec id="sec-27-9">
        <title>Executed #reachSecondSpeed</title>
        <p>getStatus = drive
getStatusDrive = second
getDriveSelected = true</p>
      </sec>
      <sec id="sec-27-10">
        <title>Executed #reachThirdSpeed</title>
        <p>getStatus = drive
getStatusDrive = third
getDriveSelected = true</p>
      </sec>
      <sec id="sec-27-11">
        <title>Executed #selectNeutral getStatus = neutral getStatusDrive = Null getDriveSelected = false</title>
        <p>Done.</p>
      </sec>
    </sec>
    <sec id="sec-28">
      <title>We created another execution scenario as seen in Listing 6, where an event ‘selectFirst’ will force the Car transmission into manual.</title>
    </sec>
    <sec id="sec-29">
      <title>Listing 6: Execution scenario (2)</title>
      <p>Execution Scenario</p>
      <sec id="sec-29-1">
        <title>1 command,getStatus,getStatusDrive,getDriveSelected</title>
      </sec>
      <sec id="sec-29-2">
        <title>2 new CarTransmission, neutral, Null, false</title>
      </sec>
      <sec id="sec-29-3">
        <title>3 selectReverse, reverse, Null, false</title>
      </sec>
      <sec id="sec-29-4">
        <title>4 selectNeutral, neutral, Null, false</title>
      </sec>
      <sec id="sec-29-5">
        <title>5 selectFirst, drive, first, false</title>
      </sec>
      <sec id="sec-29-6">
        <title>6 selectNeutral, neutral, Null, false</title>
      </sec>
    </sec>
    <sec id="sec-30">
      <title>We ran the previous execution scenario using UmpleRun, and received the following successful validation verdict.</title>
    </sec>
    <sec id="sec-31">
      <title>Listing 7: Successful dynamic validation result (2)</title>
      <sec id="sec-31-1">
        <title>Compiling CarTrans.ump... success.</title>
      </sec>
      <sec id="sec-31-2">
        <title>Building model... success.</title>
      </sec>
      <sec id="sec-31-3">
        <title>Loading model into memory... success.</title>
      </sec>
      <sec id="sec-31-4">
        <title>Running commands:</title>
      </sec>
      <sec id="sec-31-5">
        <title>Created CarTransmission</title>
        <p>getStatus = neutral
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-31-6">
        <title>Executed #selectReverse</title>
        <p>getStatus = reverse
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-31-7">
        <title>Executed #selectNeutral</title>
        <p>getStatus = neutral
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-31-8">
        <title>Executed #selectFirst</title>
        <p>getStatus = drive
getStatusDrive = first
getDriveSelected = false</p>
      </sec>
      <sec id="sec-31-9">
        <title>Executed #selectNeutral getStatus = neutral getStatusDrive = Null getDriveSelected = false</title>
        <p>Done.</p>
        <p>B. Failed validation verdict</p>
        <p>In this section, we present the dynamic validation of a
failing behavior by introducing a defect in the design of the Car
transmission state machine and by running the previous
execution scenario in Listing 4 against the faulty model. A
model defect has been created by removing the code injection
for the setting of Boolean attribute ‘driveSelected’. Thus,
making guarded events non triggerable. After execution of the
scenario on the Car transmission state machine, UmpleRun
produces a validation verdict indicating failed assertions.</p>
      </sec>
    </sec>
    <sec id="sec-32">
      <title>Listing 8 displays the UmpleRun verdict output signifying</title>
      <p>five failed assertions from the expected state machine behavior.</p>
    </sec>
    <sec id="sec-33">
      <title>The assertions indicate that after the triggering of event</title>
      <p>selectDrive the value of Boolean attribute is not as expected.</p>
    </sec>
    <sec id="sec-34">
      <title>Then, after entering composite state ‘drive’ and the triggering</title>
      <p>of event reachSecondSpeed, the resulting state should be
‘second’, but the failed assertion indicated that the current state
‘first’. A similar situation occurred in the fourth failed
assertion. Indicating there have been non-triggerable events.</p>
    </sec>
    <sec id="sec-35">
      <title>Listing 8: Failed dynamic validation result</title>
      <sec id="sec-35-1">
        <title>Compiling CarTrans.ump... success.</title>
      </sec>
      <sec id="sec-35-2">
        <title>Building model... success.</title>
      </sec>
      <sec id="sec-35-3">
        <title>Loading model into memory... success.</title>
      </sec>
      <sec id="sec-35-4">
        <title>Running commands:</title>
      </sec>
      <sec id="sec-35-5">
        <title>Created CarTransmission</title>
        <p>getStatus = neutral
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-35-6">
        <title>Executed #selectReverse</title>
        <p>getStatus = reverse
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-35-7">
        <title>Executed #selectNeutral</title>
        <p>getStatus = neutral
getStatusDrive = Null
getDriveSelected = false</p>
      </sec>
      <sec id="sec-35-8">
        <title>Executed #selectDrive</title>
        <p>getStatus = drive
getStatusDrive = first
!!! ASSERTION FAILED on getDriveSelected,
EXPECTED true, ACTUAL false</p>
      </sec>
      <sec id="sec-35-9">
        <title>Executed #reachSecondSpeed getStatus = drive</title>
        <p>!!! ASSERTION FAILED on getStatusDrive,
EXPECTED second, ACTUAL first</p>
        <p>!!! ASSERTION FAILED on getDriveSelected,
EXPECTED true, ACTUAL false</p>
      </sec>
      <sec id="sec-35-10">
        <title>Executed #reachThirdSpeed getStatus = drive</title>
        <p>!!! ASSERTION FAILED on getStatusDrive,
EXPECTED third, ACTUAL first</p>
        <p>!!! ASSERTION FAILED on getDriveSelected,
EXPECTED true, ACTUAL false</p>
      </sec>
      <sec id="sec-35-11">
        <title>Executed #selectNeutral getStatus = neutral getStatusDrive = Null getDriveSelected = false</title>
        <p>Done.</p>
      </sec>
    </sec>
    <sec id="sec-36">
      <title>To study the failed validation verdict further, we wrote a</title>
      <p>trace directive to examine the failed modeling element as
presented in Listing 9. The trace directive will trace composite
state ‘drive’ and record the value of Boolean attribute
‘driveSelected’ at the same time.</p>
    </sec>
    <sec id="sec-37">
      <title>Listing 9: Trace directive for defect investigation</title>
      <sec id="sec-37-1">
        <title>Umple</title>
        <sec id="sec-37-1-1">
          <title>1 class CarTransmission {</title>
        </sec>
        <sec id="sec-37-1-2">
          <title>2 trace drive record driveSelected; 3 }</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-38">
      <title>Adding the above trace specification to the model, and then</title>
      <p>rerunning the validation using UmpleRun, we obtain the
execution trace in comma-separated-value (CSV) form as
shown in Listing 10 (we have replaced the system time and the
object hash code values with * to save space in the paper).</p>
      <p>The operation code 'sm_t' in line 2 shows that this trace was
recorded when a state event was triggered named ‘selectDrive’
that made a transition from state ‘neutral’ to state ‘drive’, and
reported the value of the Boolean attribute was false. The next
event triggered in composite state ‘drive’ was an exit transition
by event ‘selectNeutral’, confirming that none of the events
inside composite state ‘drive’ was triggered.</p>
    </sec>
    <sec id="sec-39">
      <title>Listing 10: Execution trace</title>
      <sec id="sec-39-1">
        <title>Execution trace </title>
        <p>Time,Thread,UmpleFile,LineNumber,Class,Object,Operation,Name,Value 
*,1,CarTrans.ump,6,CarTransmission,*,sm_t,neutral,selectDrive,drive,false 
*,1,CarTrans.ump,6,CarTransmission,*,sm_t,drive,selectNeutral,neutral,false </p>
      </sec>
    </sec>
    <sec id="sec-40">
      <title>V. RELATED WORK</title>
    </sec>
    <sec id="sec-41">
      <title>Derezińska and Pilitowski [5] presented an execution</title>
      <p>framework (FXU) for UML state machines to verify their
correctness. FXU consists of two components: a code generator
and a run time library. Execution is realized by transforming
UML classes and state machines into a C# implementation as
follows: First, a modeler creates a UML model using any
modeling tool, then the model is exported as an XMI file. Next,
code for the targeted programming language (i.e. C#) is
generated from the model. Third, the generated code is
modified, compiled, and linked to a run time library. Finally,
code is executed to reflect model behavior.
specification, without the need to instrument generated code
and allow the generation of execution traces referencing
modeling constructs.</p>
      <p>
        As an extension to FXU, FXU tracer [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] a graphical
interface extension to FXU has been implemented showing a
tree representation of the UML model, and a textual
information about the tracing process. FXU tracer requires the
generation of trace logs from the FXU framework during state
machine execution. After generation of trace logs, these logs
are fed to the FXU tracer and tracing is conducted either
stepby-step or stopping at inserted breakpoints. The FXU tracer
suffers from design flaws and certain other limitations. The
mechanism for trace logs creation in the FXU environment
wasn’t specified and information collected during state
machine execution is not explained. Obviously, as state
machines get more complex, the size of trace logs becomes a
concern and the authors didn’t address it in the FXU
environment. Furthermore, as indicated by the authors, not all
events are supported and code generation is limited to C#.
      </p>
    </sec>
    <sec id="sec-42">
      <title>StateForge [7] is a tool that transforms state machine</title>
      <p>models expressed in XML into C, C++, and Java source code.</p>
    </sec>
    <sec id="sec-43">
      <title>StateForge includes some implemented observer classes that</title>
      <p>observe and record state machine behavior. Further, more
observers can be created by implementing an observer
interface. However, modelers using StateForge can’t limit the
scope of observations to substates, transition, etc.</p>
    </sec>
    <sec id="sec-44">
      <title>In the area of model execution via virtual machines,</title>
      <p>
        Mayerhofer et al. [
        <xref ref-type="bibr" rid="ref8 ref9">8,9</xref>
        ] proposed extensions to the standardized
fUML virtual machine to enable the debugging of models at
run time. These extensions aim to overcome the limitations of
fUML in monitoring the models’ runtime behavior. Three
models were proposed: (1) Trace model, a dedicated trace
metamodel capable of recording the model execution carried
out by the fUML virtual machine. (2) Event model, monitors
run time state and triggers events based on changes to run time
state. (3) Command API: a set of commands that enables the
control of models execution.
      </p>
    </sec>
    <sec id="sec-45">
      <title>VI. CONCLUSION</title>
      <p>This paper presented our approach for model dynamic
analysis for modelers and other developers performing model
driven development. UmpleRun is a tool to automatically drive
execution of scenarios to validate dynamic behavior. The
software engineer drives execution using UmpleRun; if
execution is not as expected, then he or she can examine the
detailed execution trace. A key benefit of this work is that it
allows analysis of behavior of a system generated from a UML
As future work, we are investigating automatically
generating a comprehensive set of execution scenarios and
using this to validate model dynamic behavior. We anticipate
enhancing UmpleRun so that the expected output to be
matched can examine details of the tracer output, including
using pattern matching. Finally, this work can be further
extended by building tools that can formally verify
conformance of traces to the specified UML models.</p>
    </sec>
    <sec id="sec-46">
      <title>ACKNOWLEDGMENT</title>
    </sec>
    <sec id="sec-47">
      <title>Hamoud Aljamaan would like to thank King Fahd</title>
    </sec>
    <sec id="sec-48">
      <title>University of Petroleum and Minerals (KFUPM) for their</title>
      <p>financial support during his PhD studies.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Garzón</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Aljamaan</surname>
          </string-name>
          , and T. Lethbridge, “Umple 
          <article-title> : A Framework for Model Driven Development of Object-Oriented Systems</article-title>
          ,” in
          <source>22nd IEEE International Conference on Software Analysis, Evolution, and Reengineering (SANER)</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>A.</given-names>
            <surname>Forward</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Badreddin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. C.</given-names>
            <surname>Lethbridge</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Solano</surname>
          </string-name>
          , “
          <article-title>Modeldriven rapid prototyping with Umple,”</article-title>
          <string-name>
            <surname>Softw. Pract. Exp.</surname>
          </string-name>
          , vol.
          <volume>42</volume>
          , no.
          <issue>7</issue>
          , pp.
          <fpage>781</fpage>
          -
          <lpage>797</lpage>
          , Jul.
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>H.</given-names>
            <surname>Aljamaan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. C.</given-names>
            <surname>Lethbridge</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Badreddin</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          <article-title>Guest, and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Forward</surname>
          </string-name>
          , “
          <article-title>Specifying Trace Directives for UML Attributes</article-title>
          and State Machines,”
          <source>in 2nd International Conference on Model-Driven Engineering and Software Development</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>79</fpage>
          -
          <lpage>86</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>T.</given-names>
            <surname>Lethbridge</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Laganiere</surname>
          </string-name>
          ,
          <article-title>Object-Oriented Software Engineering: Practical Software Development using UML and Java</article-title>
          , 2nd ed.
          <article-title>McGrawHill, Inc</article-title>
          .,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Derezinska</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Pilitowski</surname>
          </string-name>
          , “
          <article-title>Correctness issues of UML class and state machine models in the C# code generation and execution framework</article-title>
          ,” in
          <source>2008 International Multiconference on Computer Science and Information Technology</source>
          ,
          <year>2008</year>
          , pp.
          <fpage>517</fpage>
          -
          <lpage>524</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>A.</given-names>
            <surname>Derezinska</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Szczykulski</surname>
          </string-name>
          , “
          <article-title>Tracing of state machine execution in the model-driven development framework</article-title>
          ,
          <source>” in 2nd International Conference on Information Technology (ICIT)</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>109</fpage>
          -
          <lpage>112</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>“</surname>
            <given-names>StateForge -</given-names>
          </string-name>
          <article-title>State machine generator &amp; state diagram editor</article-title>
          .” [Online]. Available: http://www.stateforge.com/. [Accessed:
          <fpage>09</fpage>
          -Jun-2014].
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>T.</given-names>
            <surname>Mayerhofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Langer</surname>
          </string-name>
          , and G. Kappel, “
          <article-title>A runtime model for fUML,”</article-title>
          <source>in Proceedings of the 7th Workshop on Models@run.time - MRT '12</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>53</fpage>
          -
          <lpage>58</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>T.</given-names>
            <surname>Mayerhofer</surname>
          </string-name>
          , “
          <article-title>Testing and debugging UML models based on fUML,”</article-title>
          <source>in Proceedings of the 34th International Conference on Software Engineering</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>1579</fpage>
          -
          <lpage>1582</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>