<!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>Exploring Model-Based Development for the Verification of Real-Time Java Code</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Niusha Hakimipour</string-name>
          <email>niusha@itee.uq.edu.au</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Paul Strooper</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Roger Duke</string-name>
          <email>rduke@itee.uq.edu.au</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Queensland</institution>
          ,
          <addr-line>St. Lucia, Queensland</addr-line>
          ,
          <country country="AU">Australia</country>
        </aff>
      </contrib-group>
      <fpage>71</fpage>
      <lpage>81</lpage>
      <abstract>
        <p>Many safety- and security-critical systems are real-time systems and, as a result, tools and techniques for verifying real-time systems are extremely important. Simulation and testing such systems can be exceedingly time-consuming and these techniques provide only probabilistic measures of correctness. There are a number of model-checking tools for real-time systems. However, they provide formal verification for models, not programs. To increase the confidence in real-time programs written in real-time Java, this paper takes a modelling approach to the design of such programs. First, models can be mechanically verified, to check whether they satisfy particular properties, by using current real-time model-checking tools. Then, programs are derived from the model by following a systematic approach. To illustrate the approach we use a nontrivial example: a gear controller.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Real-time [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] is a broad term used to describe applications that have timing
requirements. Many safety- and security-critical systems are real-time systems
and, as a result, tools and techniques for verifying real-time systems are
extremely important. The traditional ways of ensuring that real-time systems
operate correctly have been simulation and testing. However, in many cases
these techniques are exceedingly time-consuming and provide only probabilistic
measures of correctness. Formal methods advocate the use of mathematical
reasoning as an alternative; one of the most promising of these methods has been
model-checking [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        There are a number of model-checking tools for real-time systems [
        <xref ref-type="bibr" rid="ref3 ref4 ref5 ref6">3–6</xref>
        ].
However, they provide formal verification for models, and no systematic
approach for deriving programs from those models. This means it is still necessary
to show that the programs that implement those models satisfy the properties
as well.
      </p>
      <p>
        Real-time systems have to generate their output within a finite and
predicable time. Therefore, the specification of the language in which real-time systems
are implemented is as important as verifying such systems. Real-Time
Specification for Java (RTSJ) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] was proposed in January 2002. Sun has developed a
simulator, Java Real-Time System (Java RTS) 2.0 [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], for simulating real-time
Java code that is compliant with the RTSJ.
      </p>
      <p>
        To verify real-time Java code which is compliant with the RTSJ, an approach
based on JPF (Java PathFinder) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] has been proposed by Lindstrom et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
JPF is a Java model-checker which has a state-exploring JVM (Java Virtual
Machine) at its core. However, the approach based on JPF to verify real-time
Java code has not been implemented yet, and it only supports properties that
are specified as normal Java assertions, without timing constraints.
      </p>
      <p>
        A real-time model is a simplified representation of a real-time system.
Models focus on system behaviour and abstract many details of programs [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. More
importantly, these models can be verified mechanically with real-time
modelcheckers. This paper investigates a modelling approach to design real-time
programs written in RTSJ, by means of an industrial example. In this approach,
Timed Automata [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] are used as the modelling language, since Timed Automata
have well-defined mathematical properties and a simple graphical representation.
Moreover, Timed Automata can capture both qualitative and quantitative
features of real-time systems [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. The next step is to mechanically verify the model
using the UPPAAL model-checker [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. UPPAAL has a graphical user interface;
it is well-used and well-supported. After verifying the model, a mapping between
the model features and RTSJ are used to derive the RTSJ code from the model.
This approach can increase the confidence in the correctness of the program.
      </p>
      <p>In this paper, we present an initial application of the proposed approach
to a nontrivial example. The RTSJ code for this example is derived by hand,
following the systematic approach. The current mapping we propose does not
deal with timing constraints on specific time values (rather than lower- or
upperbounds) which are described in Section 3. We have also left the mapping of a
number of challenging Timed Automata features for future work.</p>
      <p>
        In the next section, theories and languages that have been proposed for
modelling real-time systems and related work on real-time model-checking are
reviewed. In Section 3, we investigate an approach to implement the behaviour
exhibited by real-time models in RTSJ. A realistic industrial case study, a gear
controller [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], is used as an example in this section. Section 4 provides the
verification result of the gear controller and discusses the limitations of our
approach, and Section 5 concludes the paper.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>Traditional formalisms for temporal reasoning deal with the qualitative aspect
of time, that is, the order of certain system events (an example of a qualitative
time property is: event A occurs before event B). However, real-time systems
often require quantitative aspects of time. This means they need to consider the
actual difference in time between certain system events.</p>
      <p>
        Timed Automata [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] provide a formalism for the modelling and verification
of real-time systems. Examples of other formalisms are Timed Petri Nets [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ],
Time Petri Nets [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], Timed Process Algebras [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], and Real-time Logics [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>
        Model-checking of Timed Automata representations has become popular for
the analysis of real-time systems [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. In the last decade, there have been a
number of tools developed based on Timed Automata to model and verify real-time
systems, notably Kronos [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], UPPAAL [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], RT-Spin [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] and MOCHA [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Timed
Automata can capture both qualitative and quantitative features of real-time
systems [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. For instance, liveness, fairness and nondeterminism are qualitative
features and bounded response and timing delays are quantitative features that
can be captured with Timed Automata. Timed Automata also have well-defined
mathematical properties and a simple graphical representation.
      </p>
      <p>
        A Timed Automaton is a finite-state automaton extended with a finite set
of real-valued variables modelling clocks. Timed words in a Timed Automaton
are infinite sequences in which a real-valued time of occurrence is associated
with each symbol [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Each clock can be reset to zero with the transitions of
the automaton, and keeps track of the time elapsed since the last reset. The
transitions of the automaton put certain constraints on the clock values. A
transition may be taken only if the current values of the clocks satisfy the associated
constraints.
      </p>
      <p>
        Figure 1 shows the Timed Automata used by the UPPAAL model checker
for a clutch specified by Lindahl et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. The UPPAAL Timed Automata [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]
extends Timed Automata with a number of additional features such as bounded
integers, arrays and urgent locations, as discussed in Section 3.
      </p>
      <p>The Clutch provides services to open or close the clutch in 100 to 150μs. In
the case that opening or closing the clutch takes more than 150μs, the clutch will
stop in an error state. This example will later be used to illustrate our proposed
approach.</p>
      <p>Channels in Timed Automata are used to synchronize and communicate.
For Channel CName, CName? represents receiving a message and CName!
represents sending a message. In Figure 1, a message is sent via OpenClutch! and two
messages are received via ClutchIsOpen? and ClutchIsClosed?. OpenClutch?,
ClutchIsOpen! and ClutchIsClosed! are in another Timed Automaton not
shown in Figure 1. Timer is a clock and Timer==150 is a guard. A guard in
UPPAAL is a side-effect-free statement which evaluates to a boolean. The
transition from the Opening to the ErrorOpen can be taken if and only if Timer==150
is enabled. In the Opening state, Timer&lt;=150 is an invariant. The Automaton
needs to leave Opening before this invariant is violated.
3</p>
    </sec>
    <sec id="sec-3">
      <title>From Models To Implementations</title>
      <p>
        A Model is a simplified representation of the system. We use Timed Automata
to describe models. These models represent the behaviour of real-time programs
written in RTSJ and they can be verified mechanically with the UPPAAL
modelchecker. Then, we apply our approach on these models to design real-time
programs which still satisfy the properties. Figure 2 shows an overview of this
model-based approach, which is similar to the model-based approach proposed
by Magee and Kramer to design concurrent Java programs from FSP models [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
3.1
      </p>
      <sec id="sec-3-1">
        <title>RTSJ</title>
        <p>
          Real Time Specification of Java (RTSJ) [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] was introduced in January 2002.
RTSJ is designed to support both hard and soft real-time applications. RTSJ
adds several features to Java, such as Clocks, Time, Scoped Memory Areas
which provide guarantees on allocation time, Fixed Priority Scheduling Policy,
Asynchronous Events and Real-Time Threads.
        </p>
        <p>Figure 3 shows part of the RTSJ code for the clutch Timed Automaton
discussed in Section 2. The details of mapping the Clutch Timed Automaton to
the real-time Java code are described in Section 3.3.</p>
        <p>
          Clutch is a real-time thread. Two classes, NonHeapRealtimeThread and
RealtimeThread, are defined in RTSJ to support real-time threads. Non-heap
real-time threads are not targeted by the garbage collector [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ].
        </p>
        <p>ClutchClock is declared as a clock. Clocks in RTSJ are derived from an
abstract class called Clock. There are three types of clocks in RTSJ:
– A “monotonic” clock progresses at a constant rate, suitable for timeouts.
– A “countdown” clock can be reset to zero, paused or continued.
– A “CPU execution time” clock counts the amount of time that is being
consumed by a particular thread.</p>
        <p>MaxTimeClutch and CurrentTime are a relative and absolute time respectively.
In RTSJ, time is defined by three classes:
– a duration measured by a particular clock is ”relative” time;
– “absolute” time is a time relative to some epoch, such as system start-up
time;
– “rational” time is a subclass of relative time to represent the rate of certain
event occurrences.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Model-based approach</title>
        <p>An overview of the mapping for different features and expressions in UPPAAL
Timed Automata is shown in Tables 1 and 2. The details of the mapping are
provided in Section 3.3.
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Mapping Details</title>
        <p>Timed Automaton: Every Timed Automaton is mapped to a non-heap
realtime Java thread. As non-heap real-time Java threads are not targeted by the
garbage-collector, programs using such threads have no non-determinism due
to garbage-collection delays or memory allocations. Each thread has a state
1.public class Clutch extends NonHeapRealTimeThread{
2. public void run(){
3. Environment env = new Environment();
4. Clock ClutchClock = Clock.getRealtimeClock(); // Timer
5. RelativeTime MaxTimeClutch = new RelativeTime(0,150);
6. RelativeTime MinTimeClutch = new RelativeTime(0,100);
7. AbsoluteTime CurrentTime = ClutchClock.getTime();
8. String state = "Closed";
9. while(true){
10. if(state == "Closed"){
11. if(env.IsReadyOpenClutch){
12. env.IsReadyOpenClutch = false;
13. env.ChannelAcknowledgeOpenClutch = true;
14. CurrentTime = ClutchClock.getTime();
15. state = "Opening";
16. continue;
17. }
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31. }
32. }
33. if(state == "Open"){...}
34. if(state == "Closing"){...}
35. }/*while*/
36. }/*run*/
37.}/*class*/
}
if(state == "Opening"){
if(((ClutchClock.getTime().subtract(CurrentTime)).compareTo(MaxTimeClutch) &gt;= 0)){
env.ErrStat = 2;
state = "ErrorOpen";
continue;
}
if(((ClutchClock.getTime().subtract(CurrentTime)).compareTo(MinTimeClutch) &gt; 0)){
env.ChannelAcknowledgeClutchIsOpen = false;
env.IsReadyClutchIsOpen = true;
while(!env.ChannelAcknowledgeClutchIsOpen);//busy loop
state = "Open";
continue;
variable that is initialised to the initial state of the Automaton. The behaviour
for the Automaton is encoded in an infinite loop in the thread run method.
This loop contains several if statements on the state variable and each if
statement contains the behaviour of the Timed Automaton in a state with at
least one outgoing edge. As an example, Figure 3 shows the real-time thread
corresponding to the Clutch Timed Automaton. Inside the run method of the
Clutch thread in Figure 3, the string variable state represents the state, which
is initialised to Closed. The infinite while loop contains four if statements
corresponding to the four states with at least one outgoing edge: Closed, Open,
Closing and Opening.</p>
        <p>Global Variables and Broadcast Channels: To model global variables, one
additional class, Environment, is introduced to implement the environment.
The Environment contains global variables as static variables and all threads
that need to access global variables create an instance of the Environment
object. Broadcast Channels are considered as global variables, since they are
nonblocking. For example, inside the run method of the Clutch thread in Figure 3,
an instance of Environment is created to access the shared variable, ErrStat.</p>
        <p>Binary synchronisation: In order to model a synchronous channel C, two
boolean variables are introduced, IsReadyC and ChannelAcknowledgeC. The
variable IsReadyC is set to true by the sender to inform the receiver that a new
message is put in the channel C and receiver sets this boolean to false whenever it
reads a new value from the channel variable. The ChannelAcknowledgeC ensures
that the sender will not progress until the receiver receives the message.
Whenever the sender sets its channel variable, it also sets the ChannelAcknowledgeC
to false and will not continue until this variable is true again. Receiver sets
this ChannelAcknowledgeC to true when it has read the message. The initial
value of ChannelAcknowledgeC and IsReadyC are true and false respectively.
In Figure 3, the clutch is the receiver for the OpenClutch channel. A
transition from Closed to Opening is taken when a new message is put in the
OpenClutch channel (line 11). When the clutch receives the OpenClutch
message, it sets IsReadyOpenClutch to false to be ready for the next message and
also sets ChannelAcknowledgeOpenClutch to true to inform the sender that it
received the message (lines 12 and 13). On the other hand, the clutch is the
sender for the ClutchIsOpen channel. It sets the IsReadyClutchIsOpen and
ChannelAcknowledgeClutchIsOpen variables (lines 26 and 27) and it waits
until the receiver receives this message (line 28).</p>
        <p>Urgent Locations: Time is not allowed to pass when the system is in an urgent
or committed location. For a Timed Automaton, this is semantically equivalent
to a location with incoming edges resetting the Timed Automaton clock and
labelled with the invariant Clock&lt;=0. However, interleavings with normal states
are allowed. To model urgent locations we will add an assignment that saves the
value of the clock after all lines of code that lead to an urgent location and then
set back the clock to this value when the program leaves the code corresponding
to such a location. However, the discrepancy between model and code must be
noted and analysed. This feature does not occur in the gear-controller example.</p>
        <p>Urgent Synchronisation: In an Urgent Synchronisation, if a synchronisation
transition on an urgent channel is enabled, delays must not occur. In RTSJ,
a priority scheduler is defined and the priority of an object that extends the
Schedulable class can be set. However, even running the object with the highest
priority will take some amount of time after it is enabled. The problem is even
more challenging when the model contains more than one Urgent
Synchronisation. We have not dealt with this feature as it did not occur in the gear-controller
example.</p>
        <p>
          Committed Locations: Committed Locations are urgent Locations that can
not be delayed when they are enabled. Therefore, the discrepancy between model
and code must be noted and analysed. This feature occurred in one Automaton,
Controller, of our example [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. The RTSJ code for this Automaton is available
online [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ].
        </p>
        <p>Clocks: Each instance of a clock in a Timed Automaton is mapped to a clock
in RTSJ. To check an upper- or lower-bound on a clock, a relative time is declared
in Java for each bound. In addition, every thread contains an absolute time and
a clock. To check the time elapsed from a particular moment, the absolute time
is set to the current value of the clock. Then, the difference between the current
value of the clock and the absolute time will be checked with the corresponding
relative time. For example, a clock, two relative times and an absolute time
are introduced for timing issues in Figure 3 (lines 4-7). In the Clutch Timed
Automaton, when the transition from Closing to Opening is taken, the clock
will be reset. The corresponding code for this action is shown in line 14, in
which the absolute time CurrentTime is set to the current value of the clock
ClutchClock. Therefore, the time elapsed from this moment will be measured.
Inside the else statement, the program checks if the time is more than 100μs
(line 25).</p>
        <p>
          Guards: A transition from one state to another state can be taken if and
only if the guard on the transition is enabled. A Guard is translated to an if
statement. The code inside the if block corresponds to the transition updates
(assignments). In Timed Automata constraints on the value of the clocks or
clock differences are only compared to integer expressions; guards over clocks
are essentially conjunctions [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. Line 20 in Figure 3 indicates that if the time
elapsed since the last time at which the variable CurrentTime is set is equal to
or more than the relative time MaxTimeClutch, 150, the ErrStat will be set to
2 and the state will be set to ErrorOpen. However, in the Timed Automaton,
the guard on the transition from the Opening to the ErrorOpen is Timer==150
and not Timer &gt;= 150. Since there is no guarantee that the thread will execute
this code at exactly one time, we need to be more flexible in the code than in the
model. However, in this case, rather than noting and analysing the difference
between model and code, we can actually modify (re-engineer) the model to
match the code and then repeat the analysis of the properties we want to check
on the modified model.
        </p>
        <p>
          Dealing with non-determinism: A Timed Automaton can contain more than
one transition with an enabled guard. If a state contains more than one outgoing
edge with an enabled guard, one of them will be taken non-deterministically.
Following the standard notion of refinement, an implementation can be more
deterministic than the model. However, if we want to implement the non-determinism
we can use a random variable in RTSJ. This feature occurred in one Automaton,
Interface, of our example [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. The RTSJ code for this Automaton is available
online [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ].
        </p>
        <p>Invariants: The Automaton needs to leave a state before its state invariant
is violated. In other words, Timed Automaton must take one of the enabled
transitions if the current state invariant is violated. In RTSJ we cannot
guarantee that the thread has a CPU before a certain time limit. However, we can
accumulate the upper-bound of the run time of RTSJ code. To accumulate this
run time upper-bound we can assign a fixed RTSJ run-time (based on the
version of RTSJ and the hardware we use) to each line of code. We can then add
these times to accumulate the run time of code corresponding to a state with an
invariant. In Figure 1, the Opening has a state invariant, Timer&lt;=150.
Therefore, the clutch cannot stay in the Opening more than 150 ms and it needs to
go to either ErrOpen or Open before this invariant is violated. This invariant is
an assumption that should independently verified for a particular hardware and
version of the RTSJ to check opening the clutch should take no more than 150
ms. In other words, executing the code in lines 14-16, 19-20 and 25 or lines 14-16
and 19-21 in Figure 3 should take less than 150μs.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Verification result</title>
      <p>
        To illustrate the applicability of the proposed method, we applied this approach
to the gear-controller [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. The model presented by Lindahl et al. contains 5
Timed Automata with a total of 63 states and 83 transitions. We recreated this
model and verified it with UPPAAL. However, the verification results were not
entirely consistent with the result provided by Lindahl et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. We had to add
the timing invariants on all states and increase the time bounds in the timing
properties to satisfy them. The RTSJ derived from the Timed Automaton had
5 Java threads, 1320 lines of code and 16 assumptions for 16 time invariants in
the model. The Timed Automata for the gear controller and the RTSJ code are
both available online [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ].
      </p>
      <p>We unintentionally made an error in the UPPAAL model (when the clutch
Automaton transitions from Opening to ErrOpen, we did not set ErrStat to 2).
As a result, one of the system properties was violated. This property required
the gear controller to notice that the clutch reached ErrOpen, before 300μs.
UPPAAL detected this error and we fixed the model. We wanted to see whether
the same error would be detected in RTSJ. Therefore, we removed line 22 from
Figure 3. However, the error was not detected since the offending code was not
executed in the simulator as the timer never exceeds 150μs. Then, we changed
the invariant on Opening from 150μs to 50μs (line 20) and the error was
detected. This shows why the model-checking approach is useful, as it detected an
error in the model that is more difficult to detect in the code.</p>
      <p>To demonstrate the discrepancy between the models, in which we make
assumptions about invariants, and the code, where lines of code take a certain
amount of time to execute, we changed the timing in both the model and
implementation. In the original model, the invariant on the Opening state is 150μs
and the transaction to Open can only be made after 100μs. These properties are
used to prove that if the clutch transits to ErrOpen, then the gear controller
notices this before 300μs. We changed the invariant 150μs to 2μs and the guard
on transition to Open to 1μs. In the model this is still sufficient to prove the
gear controller notices the error before 4μs. However, if we make these changes
in the code, then the error is only detected after 50μs.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>In this paper, a nontrivial real-time example, a gear controller, was used to
investigate a model-based approach to derive an RTSJ program from an
UPPAAL model. We started from an existing UPPAAL Timed Automata for the
gear controller, model checked it and followed our systematic approach to derive
an RTSJ program from it. However, this approach has some limitations. As an
example, when the model contains specific time values, rather than upper- or
lower-bounds, it cannot be straightforwardly mapped to RTSJ code. Some other
features, such as urgent synchronisation, were also left for future work.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Andy</given-names>
            <surname>Wellings</surname>
          </string-name>
          .
          <article-title>Concurrent and Real-Time Programming in Java</article-title>
          . John Wiley and Sons Ltd,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Jr. Edmund M. Clarke</surname>
          </string-name>
          , Orna Grumberg, and
          <string-name>
            <surname>Doron</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Peled</surname>
          </string-name>
          . Model Checking. MIT Press,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>Sergio</given-names>
            <surname>Yovine</surname>
          </string-name>
          .
          <article-title>Kronos: a verification tool for real-time systems</article-title>
          .
          <source>Journal on Software Tools for Technology Transfer</source>
          ,
          <volume>1</volume>
          (
          <issue>1</issue>
          -2):
          <fpage>123</fpage>
          -
          <lpage>133</lpage>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Kim</surname>
            <given-names>G.</given-names>
          </string-name>
          <string-name>
            <surname>Larsen</surname>
            , Paul Pettersson, and
            <given-names>Wang</given-names>
          </string-name>
          <string-name>
            <surname>Yi</surname>
          </string-name>
          .
          <article-title>UPPAAL in a nutshell</article-title>
          .
          <source>Int. Journal on Software Tools for Technology Transfer</source>
          ,
          <volume>1</volume>
          (
          <issue>1</issue>
          -2):
          <fpage>134</fpage>
          -
          <lpage>152</lpage>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Stavros</given-names>
            <surname>Tripakis</surname>
          </string-name>
          and
          <string-name>
            <given-names>Costas</given-names>
            <surname>Courcoubetis</surname>
          </string-name>
          .
          <article-title>Extending Promela and Spin for real time</article-title>
          .
          <source>In Tools and Algorithms for Construction and Analysis of Systems</source>
          , pages
          <fpage>329</fpage>
          -
          <lpage>348</lpage>
          . Kluwer Academic Publishers,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Rajeev</given-names>
            <surname>Alur</surname>
          </string-name>
          , Thomas A.
          <string-name>
            <surname>Henzinger</surname>
          </string-name>
          ,
          <string-name>
            <surname>Freddy Y. C. Mang</surname>
          </string-name>
          , Shaz Qadeer,
          <string-name>
            <surname>Sriram K. Rajamani</surname>
            , and
            <given-names>Serdar</given-names>
          </string-name>
          <string-name>
            <surname>Tasiran</surname>
          </string-name>
          . MOCHA:
          <article-title>Modularity in model checking</article-title>
          . In Computer Aided Verification, pages
          <fpage>521</fpage>
          -
          <lpage>525</lpage>
          . Kluwer Academic Publishers,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Java</surname>
            <given-names>SE</given-names>
          </string-name>
          <article-title>real-time system - evaluation downloads</article-title>
          . http://java.sun.com/javase/technologies/ realtime/rts/.
          <source>Date accessed: 20 August</source>
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>G.</given-names>
            <surname>Brat</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Havelund</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Park</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Visser</surname>
          </string-name>
          .
          <article-title>Java PathFinder - a second generation of a Java model checker</article-title>
          .
          <source>In Proceedings of the Workshop on Advances in Verification</source>
          , pages
          <fpage>164</fpage>
          -
          <lpage>169</lpage>
          . World Scientific Publishing Company,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Gary</given-names>
            <surname>Lindstrom</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Peter</given-names>
            <surname>Mehlitz</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Willem</given-names>
            <surname>Visser</surname>
          </string-name>
          .
          <article-title>Model checking real time Java using Java PathFinder</article-title>
          .
          <source>In 3rd Int'l Symposium on Automated Technology for Verification and Analysis</source>
          , pages
          <fpage>444</fpage>
          -
          <lpage>456</lpage>
          . Springer-Verlag,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>Jeff</given-names>
            <surname>Magee</surname>
          </string-name>
          and
          <string-name>
            <given-names>Jeff</given-names>
            <surname>Kramer</surname>
          </string-name>
          .
          <source>Concurrency State Models and Java Programs</source>
          . John Wiley and Sons Ltd,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>Johan</given-names>
            <surname>Bengtsson</surname>
          </string-name>
          and
          <string-name>
            <given-names>Wang</given-names>
            <surname>Yi</surname>
          </string-name>
          .
          <article-title>Timed automata: Semantics, algorithms and tools</article-title>
          .
          <source>In Lecture Notes on Concurrency and Petri</source>
          Nets. W. Reisig and G. Rozenberg (eds.),
          <source>LNCS 3098</source>
          , pages
          <fpage>89</fpage>
          -
          <lpage>90</lpage>
          . Springer-Verlag,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>Rajeev</given-names>
            <surname>Alur</surname>
          </string-name>
          and
          <string-name>
            <given-names>David L.</given-names>
            <surname>Dill</surname>
          </string-name>
          .
          <article-title>A theory of timed automata</article-title>
          .
          <source>Theor. Comput. Sci.</source>
          ,
          <volume>126</volume>
          (
          <issue>2</issue>
          ):
          <fpage>183</fpage>
          -
          <lpage>235</lpage>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Magnus</surname>
            <given-names>Lindahl</given-names>
          </string-name>
          , Paul Pettersson, and
          <string-name>
            <given-names>Wang</given-names>
            <surname>Yi</surname>
          </string-name>
          .
          <article-title>Formal design and analysis of a gear controller: an industrial case study using UPPAAL</article-title>
          .
          <source>Technical Report ASTEC 97/09</source>
          , Advanced Software Technology, Uppsala University,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>C.</given-names>
            <surname>Ramchandani</surname>
          </string-name>
          .
          <article-title>Analysis of asynchronous concurrent systems by Timed Petri Nets</article-title>
          .
          <source>Technical Report TR120</source>
          , MIT (Massachusetts Institute of Technology),
          <year>1974</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>Bernard</given-names>
            <surname>Berthomieu</surname>
          </string-name>
          and
          <string-name>
            <given-names>Michel</given-names>
            <surname>Diaz</surname>
          </string-name>
          .
          <article-title>Modeling and verification of time dependent systems using Time Petri Nets</article-title>
          .
          <source>IEEE Trans. Softw</source>
          . Eng.,
          <volume>17</volume>
          (
          <issue>3</issue>
          ):
          <fpage>259</fpage>
          -
          <lpage>273</lpage>
          ,
          <year>1991</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>Anton</given-names>
            <surname>Wijs</surname>
          </string-name>
          .
          <article-title>Achieving discrete relative timing with untimed process algebra</article-title>
          .
          <source>In ICECCS '07: Proceedings of the 12th IEEE International Conference on Engineering Complex Computer Systems (ICECCS</source>
          <year>2007</year>
          ), pages
          <fpage>35</fpage>
          -
          <lpage>46</lpage>
          . IEEE Computer Society,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17. Rajeev Alur and
          <string-name>
            <given-names>Thomas A.</given-names>
            <surname>Henzinger</surname>
          </string-name>
          .
          <article-title>A really temporal logic</article-title>
          .
          <source>In IEEE Symposium on Foundations of Computer Science</source>
          , pages
          <fpage>164</fpage>
          -
          <lpage>169</lpage>
          . IEEE Computer Society,
          <year>1989</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Gerd</surname>
            <given-names>Behrmann</given-names>
          </string-name>
          , Kim G. Larsen, and
          <string-name>
            <surname>Jacob</surname>
            <given-names>I. Rasmussen.</given-names>
          </string-name>
          <article-title>Optimal scheduling using priced timed automata</article-title>
          .
          <source>SIGMETRICS Perform. Eval. Rev.</source>
          ,
          <volume>32</volume>
          (
          <issue>4</issue>
          ):
          <fpage>34</fpage>
          -
          <lpage>40</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Gerd</surname>
            <given-names>Behrmann</given-names>
          </string-name>
          , Alexandre David, and
          <string-name>
            <given-names>Kim G.</given-names>
            <surname>Larsen</surname>
          </string-name>
          .
          <article-title>A tutorial on UPPAAL. www</article-title>
          .it.uu.se/research/group/darts/papers/texts/new-tutorial.pdf,
          <year>2004</year>
          . Date accessed: 15 May
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Niusha</surname>
          </string-name>
          <article-title>Hakimipour's home page</article-title>
          . http://itee.uq.edu.au/∼niusha/GearControler.rar.
          <source>Date accessed: 1 May</source>
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>