<!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>On the Specification of Non-Functional Properties of Systems by Observation</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Javier Troya</string-name>
          <email>av@lcc.uma.es</email>
          <email>javiertc@lcc.uma.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jose´ E. Rivera</string-name>
          <email>rivera@lcc.uma.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Antonio Vallecillo</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>GISUM/Atenea Research Group. Universidad de Ma ́laga</institution>
          ,
          <country country="ES">Spain</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Domain specific languages play a cornerstone role in Model-Driven Engineering (MDE) for representing models and metamodels. So far, most of the MDE community efforts have focused on the specification of the functional properties of systems. However, the correct and complete specification of some of their non-functional properties is critical in many important distributed application domains, such as embedded systems, multimedia applications or ecommerce services. In this paper we present an approach to specify QoS requirements, based on the observation of the system actions and of the state of its objects. We show how this approach can be used to extend languages which specify behavior in terms of rules, and how QoS characteristics can be easily expressed and reused across models. We show as well how this approach enables the specification of other important properties of systems, such as automatic reconfiguration of the system when some of the QoS properties change.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Domain specific languages (DSLs) play a cornerstone role in Model-Driven
Engineering (MDE) for representing models and metamodels. The Software Engineering
community’s efforts have been progressively evolving from the specification of the
structural aspects of a system to modeling its dynamics, a current hot topic in MDE. Thus, a
whole set of proposals already exist for modeling the structure and behavior of a system.
Their goal is not only to generate code, but also to conduct different kinds of analysis
on the system being modeled including, e.g., simulation, animation or model checking.</p>
      <p>The correct and complete specification of a system also includes other aspects. In
particular, the specification and analysis of its non-functional properties, such as QoS
usage and management constraints (performance, reliability, etc.), is critical in many
important distributed application domains, such as embedded systems, multimedia
applications or e-commerce services and applications.</p>
      <p>
        In order to fill this gap, in the last few years the research has faced the challenge of
defining quantitative models for non-functional specification and validation from
software artifacts [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Several methodologies have been introduced, all sharing the idea
of annotating software models with data related to non functional aspects, and then
translating the annotated model into a model ready to be validated [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. However, most
of these proposals specify QoS characteristics and constraints using a prescriptive
approach, i.e., they annotate the models with a set of requirements on the behavior of
the system (response time, throughput, etc). These requirements state how the system
should behave. Examples of these approaches include the majority of the UML Profiles
for annotating UML models with QoS information, e.g., [
        <xref ref-type="bibr" rid="ref3 ref4 ref5">3,4,5</xref>
        ].
      </p>
      <p>In this paper we present an alternative approach to specify QoS requirements, based
on the observation of the system actions and of the state of its constituent objects. We
show how this approach can be used to extend DSLs which specify behavior in terms of
rules (that describe the evolution of the modeled artifacts along some time model), and
how QoS characteristics can be easily expressed and reused across models. In particular,
we focus on performance and reliability characteristics.</p>
      <p>We show as well how this approach enables the specification of other important
features of systems, such as the automatic reconfiguration of the system when the value
of some of the QoS properties change.</p>
      <p>Finally, the approach has an additional benefit when it comes to generate the system
code. The “observers” that monitor the system behavior and compute the QoS metrics
can be used to generate the instrumentation code that monitors the actual behavior of
the system, too.</p>
      <p>After this introduction, Section 2 briefly describes one proposal for modeling the
functional aspects of systems, which also contemplates time-dependent behavior. It
presents an example that will be used throughout the paper to illustrate our approach.
Section 3 introduces the main concepts of our proposal, and how they can be used to
specify QoS properties. In particular, we show how the throughput, jitter and mean-time
between failures of the system are specified. Then, Section 4 shows how the
specifications produced can be used to analyse the system, to specify self-adaptation
mechanisms for alternative behaviors of the system, and to generate probes. Finally, Section 5
compares our work with other related proposals and Section 6 draws some conclusions.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Specifying Functional Properties</title>
      <p>
        One way of specifying the dynamic behavior of a DSL is by describing the evolution of
the modeled artifacts along some time model. In MDE, this can be done using model
transformations supporting in-place update [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The behavior of the DSL is then
specified in terms of the permitted actions, which are in turn modeled by the transformation
rules.
      </p>
      <p>
        There are several approaches that propose in-place model transformations to deal
with the behavior of a DSL, from textual to graphical (see [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] for a brief survey). This
approach provides a very intuitive way to specify behavioral semantics, close to the
language of the domain expert and the right level of abstraction [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. In-place
transformations are composed of a set of rules, each of which represents a possible action of
the system. These rules are of the form l : [NAC]∗ × LHS → RHS, where l is the rule’s
label (its name); and LHS (left-hand side), RHS (right-hand side), and NAC (negative
application conditions) are model patterns that represent certain (sub-)states of the
system. The LHS and NAC patterns express the precondition for the rule to be applied,
whereas the RHS one represents its postcondition, i.e., the effect of the corresponding
action. Thus, a rule can be applied, i.e., triggered, if an occurrence (or match) of the
LHS is found in the model and none of its NAC patterns occurs. Generally, if several
matches are found, one of them is non-deterministically selected and applied,
producing a new model where the match is substituted by the appropriate instantiation of its
RHS pattern (the rule’s realization). The model transformation proceeds by applying
the rules in a non-deterministic order, until none is applicable — although this behavior
can be usually modified by some execution control mechanism [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] we also showed how time-related attributes can be added to rules to
represent features like duration, periodicity, etc. Moreover, we also included the explicit
representation of action executions, which describe actions currently executing.
      </p>
      <p>We have two types of rules to specify time-dependent behavior, namely, atomic and
ongoing rules. Atomic rules represent atomic actions, with a specific duration. They
can be cancelled, but cannot be interrupted. Ongoing rules represent interruptible
continuous actions. Atomic rules can be periodic, and atomic and ongoing rules can be
scheduled, or be given an execution interval, by rules’ lower and upper bounds.</p>
      <p>A special kind of object, named Clock, represents the current global time elapse.
This allows designers to use it in their timed rules.</p>
      <sec id="sec-2-1">
        <title>A running example</title>
        <p>Let us show a very simple example to illustrate how the behavior of a system can be
modeled using our visual language. The system models the transmission of a sound
via a media, the Internet for instance. It consists of a soundmaker (e.g., a person) who,
periodically, transmits a sound to a microphone. This one is connected to a media (the
Internet), which transports the sound to a speaker. Finally, when the sound reaches the
speaker, it is amplified. Fig. 1 shows the metamodel of the system. For the time being,
Coder and Decoder metaclasses can be ignored; they will be mentioned in Sect. 4. The
initial state of the system is shown in Fig. 2. The position of objects in the initial model
has been omitted for simplicity reasons.</p>
        <p>In addition to the metamodel and the initial model of our system, we also need to
describe the behavior of the system. This is done in terms of the possible actions, which
in our proposal are represented by in-place transformation rules.</p>
        <p>The GenSound periodic rule (Fig. 3) makes the soundmaker emit a sound every 3
time units. This rule makes use of an action execution element. This way, we explicitly
forbid the execution of the rule (see the NAC1 pattern) if the same soundmaker is
emitting another sound. This action execution states that the element sm (the soundmaker)
is participating in an execution of the rule GenSound, so the rule cannot be applied if
there is a match of this NAC. In the RHS, we can see that the sound is now in the
microphone, so it acquires its position. The sound has 20 decibels. The duration of the action
modeled by this rule is one time unit.</p>
        <p>Fig. 4 shows the rule which makes the sound reach the speaker. As we can see in
the LHS pattern, this rule is executed when the microphone has a sound. This
microphone has to be connected to a media which should be, in turn, connected to a speaker.
The number of sounds that the media is currently transporting has to be lower than its
capacity. When the rule is realized, the sound reaches the speaker (RHS pattern). When
this happens, the sound decibels are quadruplicated and the position of the sound is
changed to be the same as the position of the speaker. The time the media consumes in
transporting the sound (i.e., the time consumed by the rule) is given by the Manhattan
distance between the microphone and the speaker.</p>
        <p>Fig. 5 shows the OverLoad rule. It is triggered when the soundmaker has produced
a sound which is now at the microphone, and the media is already transporting more
sounds than its capacity allows. Thus, the sound appearing in the LHS pattern cannot
be transported and it is lost (i.e., it is not included in the RHS pattern).</p>
        <p>So far, these three rules are enough for modeling the behavior of this simple system.
Let us see now how to add QoS information to these specifications about the
performance and reliability properties of the system.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Specifying QoS Properties by Observation</title>
      <p>The correct and complete specification of a system should include the specification and
analysis of its non-functional properties. An approach to specify QoS requirements,
based on the observation of the system actions and of the state of its constituent objects,
is presented in this section. In particular, we introduce three QoS parameters which have
to be updated with the passing of time.</p>
      <p>
        – Throughput (th): The amount of work that can be performed or the amount of
output that can be produced by a system or component in a given period of time.
Throughput is defined as th = n/t , where n is the amount of work the system
has performed and t is the time the system has been working. The work the system
performs depends on the kind of system we are dealing with. In our example, it is
the number of successful packets transmitted.
– Mean time between failures (MTBF): the arithmetic mean (average) time between
failures of a system. MTBF = t /f , where t is the time the system has been working
and f is the number of failures of the system.
– Jitter (j ): in the context of voice over IP, it is defined as a statistical variance of
the RTP data package inter-arrival time [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. RTP (Real Transport Protocol)
provides end-to-end network transport functions suitable for applications transmitting
real-time data, such as audio, video or simulation data, over multicast or unicast
network services. To estimate the jitter after we receive an i -th packet, we calculate
the change of inter-arrival time, divide it by 16 to reduce noise, and add it to the
previous jitter value. The division by 16 helps to reduce the influence of large
random changes. The formula used is: j (i ) = j (i −1)+(| D (i −1, i ) | −j (i −1))/16,
where j (i ) is the current jitter value and j (i − 1) is the previous jitter value. In this
jitter estimator formula, the value D (i , j ) is the difference of relative transit times
for the two packets. The difference is computed as D (i , j ) = (Rj −Ri )−(Sj −Si ),
where Sj (Sendj ) is the time the package j appears in the system (that is, the time
at which it is sent by the transmitter) and Rj (Receivej ) is the time the package
j leaves the system because it has been processed (that is, the time at which it is
received by the receiver).
3.1
      </p>
      <sec id="sec-3-1">
        <title>Defining observers</title>
        <p>To calculate the value of these QoS properties we propose the use of observers. An
observer is an object whose objective is to monitor the value of one of these parameters.
We identify two kinds of observers, depending on whether they monitor specific objects
or the state and behavior system as a whole. In the first case, observers are created with
the objects they monitor, and destroyed with them. In the second case, observers are
present for the whole life of the system. As a first approach, we have extended our
Sound System metamodel with four observers, which inherit from an Observer class
(Fig. 6). Each of them has a specific purpose:
– ThroughPutOb. Calculates the current value of throughput in the system, which
is stored in its variable tp. Attribute packages counts the number of successful
packages, i.e., those that have reached their destinations.
– MTBFOb. Calculates the MTBF of the system (mtbf attribute). Attribute fails stores
the number of lost packages.
– JitterOb. This is a general observer that is used to compute the jitter of the system.</p>
        <p>It has three attributes: prevJitter contains the latest jitter value, prevTS stores the
time the latest package appeared in the system, and prevArrival stores the time the
latest package left the system.
– JitterIndOb. These observers are associated to individual sounds (Fig. 6). They
compute the jitter when their associated sounds reach their destination.</p>
        <p>Thus, we have added to the initial metamodel depicted in Fig. 2 a set of initial
observers (see Fig. 7). They will be present throughout the execution of the system and
their values will be changing depending on the state of the system. The other elements
are the same as shown in Fig. 2.
Once the observers have been added to a system, we can define their behavior using the
rules described in Section 2. In this section we show how the throughput, jitter and mean
time between failures can be updated by means of the rules that specify the behavior of
the system.</p>
        <p>In Fig. 8, an observer has been added to action GenSound. Now, the rule associates
a JitterIndOb observer to a newly generated sound. The time this sound appears in the
system is stored in attribute timeStamp.</p>
        <p>In Fig. 9, the MTBFOb observer has been added to action OverLoad, to be able to
update its attribute fails every time a sound disappears.</p>
        <p>Fig. 10 shows how the value of the jitter is calculated when a sound reaches its
destination and how the number of successful packages is updated. As we can see, a
JitterIndOb observer is associated to the sound. Observers ThroughPutOb and JitterOb
appear in the LHS part of the rule. When the sound reaches the speaker (RHS part),
the number of successful packages of the system is increased. The jitter attribute of
the JitterIndOb associated to the sound is computed, using the value of its timeStamp
attribute and the three attributes of the JitterOb observer.</p>
        <p>Fig. 11 shows an atomic rule which has been added to this new system with
observers. It is triggered when a sound reaches the speaker, i.e., after the SoundFlowSlow
rule has been executed. In the LHS part, the JitterIndOb associated with the sound
contains the current jitter. This rule updates the values of the attributes of JitterOb in the
RHS part and makes the sound disappear (because it has reached its destination).</p>
        <p>Fig. 12 shows an ongoing rule, required to calculate the throughput and MTBF of
the global system. It is an ongoing rule and therefore it progresses with time. In this
way both observers always store correct and up-to-date QoS values at any moment in
time.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Making Use of the Observers</title>
      <p>Apart from computing the QoS values for the system, observers can be very useful for
defining alternative behaviors of the system, depending on the QoS levels. For instance,
the system can self-adapt under certain conditions, since we are able to search for states
of the system in which some attributes of the observers take certain values.</p>
      <p>
        Fig. 13 shows a rule where the media that transmits the sound changes when the
throughput value is less than a threshold value (1.5 in this case). In particular, we add
one coder and one decoder to the system. Thus, when there is a match of the LHS part,
the system self-adapts to accomplish the requirements.
Several approaches have proposed a procedure for monitoring and measuring
nonfunctional properties of a system. Some of them are similar to the one presented here,
although all of them have a different focus. For example, Liao and Cohen [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
introduced a high level program monitoring and measuring system which supported very
high level languages. In [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] and [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] they propose two frameworks for performance
measurement. In the first case, Mike et al. designed and implemented Pinpoint, a
framework for problem determination in Internet service environments. It was implemented
on top of the J2EE middleware platform, a network sniffer, and an analyzer based on
standard data clustering techniques. In the second one, Matthias Rohr et al. present
Kieker, which allows continuous monitoring, analysis, and visualization of Java
applications. It supports to create Sequence Diagrams, Markov chains, Timing Diagrams,
and Component Dependency Graphs from monitoring data. Our approach contains
similar characteristics to these frameworks. On the one hand, it can be used to determine
problems in systems by looking up the state of the observers. In our example, the sound
system changed when the throughput was too low. On the other hand, our approach
allows continuous monitoring of the system, as observers are constantly updated.
      </p>
      <p>
        Compilers supporting aspect-oriented programming (AOP), such as AspectJ [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]
and AspectC++ [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], may be considered source-level instrumentation tools. In AOP, it
concerns that cross-cut modules are factored out into modular aspects. AOP tools have
been used to instrument programs with debugging and monitoring code [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], as well as
to instrument programs with code to check temporal invariants [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. As a shortcoming,
AOP techniques can only be applied at well-defined join points and can be used for
instrumentation only. With our approach, instead, non-functional parameters can be
measured at any time and at any point in the system. In addition, our proposal remains
at a very high level of abstraction, without being tied to any programming language or
concrete technology platform.
      </p>
      <p>
        Observers are not a new concept. They have been defined in different proposals for
monitoring the execution of systems and to reason about some of their properties. For
example, the OMG defines different kinds of observers in the MARTE specification [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
Among them, TimedObservers are conceptual entities that define requirements and
predictions for measures defined on an interval between a pair of user-defined observed
events. They must be extended to define the measure that they collect (e.g., latency or
jitter), and aim at providing a powerful mechanism to annotate and compare timing
constraints over UML models against timing predictions provided by analysis tools. In this
sense they are similar to our observers. The advantage of incorporating them into DSLs
using our approach is that we can also reason about their behavior, and not only use
them to describe requirements and constraints on models. In addition, we can use our
observers to dynamically change the system behavior, in contrast with the more “static”
nature of MARTE observers.
      </p>
      <p>
        General frameworks for self-adaptive systems are presented in [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ],
featuring inter-related monitoring, analysis and adaptation tiers. Diaconescu et al. [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]
add a transparent software layer between components and middleware. This framework
aligns with [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], while specifically targeting enterprise applications based on
contextual composition middleware. Our approach presents a way to make systems
self-adaptive as well, although we deal with the monitoring of QoS parameters using
observers at high level of abstraction, and again independently from the underlying
platform or language.
      </p>
      <p>In both cases we see that our approach could be easily mapped to the ones
mentioned here, hence provided platform-independent models that could be transformed
into these platform-specific approaches, as we plan to do as part of our future work.
6</p>
    </sec>
    <sec id="sec-5">
      <title>Conclusions and Future Work</title>
      <p>The correct and complete specification of the non-functional properties of a system
is critical in many important distributed application domains. In this paper we have
presented a platform independent approach to specify QoS properties and requirements,
and shown its use to specify three of them: throughput, jitter and mean time between
failures. In particular, we have shown that the use of observers that monitor the state and
behavior of the system can be very useful to enrich some kinds of high-level behavioral
specifications with QoS information.</p>
      <p>
        The QoS parameters calculated by observers can be used for many additional
purposes. We have shown how our approach can also serve to easily specify self-adaptive
behaviors depending on the values of the system QoS properties. Please also note that
our proposal is built on top of the underlying language (e-Motions [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] in this case),
hence allowing users to make use of all the analysis possibilities available for that
environment [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] for free. Another advantage of our proposal is that it can serve to monitor
not only the states of the objects of the system, but also their actions. The fact that
action executions are first-class citizens of the e-Motions visual language enables their
monitorization by our observers.
      </p>
      <p>As part of our future work we would like to define additional observers, with the
advantage that once defined they can be re-used across models. For this purpose, we
would like to create libraries into e-Motions with these observers. This way,
designers can merge both metamodels: their original one and the metamodel with observers
provided by the libraries. This makes the designers tasks easier when including QoS
properties to their systems. We would also like to study the connection of these
specifications with other notations (e.g., SysML or MARTE) so that transformations can be
defined between them. In addition, we would also like to explore the automatic
instrumentation of the standard code generated by model-transformation approaches, with
the aim of being able to generate monitors and probes associated to the code, too.</p>
      <p>Acknowledgements. The authors would like to thank the anonymous referees for
their insightful comments and very constructive suggestions. This work has been
supported by Spanish Research Projects TIN2008-031087 and P07-TIC-03184.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Balsamo</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marco</surname>
            ,
            <given-names>A.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Inverardi</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Simeoni</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Model-based performance prediction in software development: A survey</article-title>
          .
          <volume>30</volume>
          (
          <issue>5</issue>
          ) (
          <year>2004</year>
          )
          <fpage>295</fpage>
          -
          <lpage>310</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Cortellessa</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marco</surname>
            ,
            <given-names>A.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Inverardi</surname>
            ,
            <given-names>P.:</given-names>
          </string-name>
          <article-title>Integrating performance and reliability analysis in a non-functional MDA framework</article-title>
          .
          <source>In: Proc. of FASE 2007. Number 4422 in LNCS</source>
          , Springer-Verlag (
          <year>2007</year>
          )
          <fpage>57</fpage>
          -
          <lpage>71</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. OMG:
          <article-title>UML Profile for Schedulability, Performance, and Time Specification</article-title>
          . OMG,
          <string-name>
            <surname>Needham</surname>
          </string-name>
          (MA), USA. (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4. OMG:
          <article-title>UML Profile for Modeling Quality of Service and Fault Tolerance Characteristics and Mechanisms</article-title>
          . OMG,
          <string-name>
            <surname>Needham</surname>
          </string-name>
          (MA), USA. (
          <year>2004</year>
          ) ptc/
          <fpage>04</fpage>
          -09-01.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5. OMG:
          <article-title>A UML Profile for MARTE: Modeling and Analyzing Real-Time and Embedded Systems</article-title>
          . OMG,
          <string-name>
            <surname>Needham</surname>
          </string-name>
          (MA), USA. (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Czarnecki</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Helsen</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Classification of model transformation approaches</article-title>
          .
          <source>In: OOPSLA'03 Workshop on Generative Techniques in the Context of MDA</source>
          . (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Rivera</surname>
            ,
            <given-names>J.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Guerra</surname>
          </string-name>
          , E.,
          <string-name>
            <surname>de Lara</surname>
          </string-name>
          , J.,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Analyzing rule-based behavioral semantics of visual modeling languages with Maude</article-title>
          .
          <source>In: Proc. of SLE'08. Number 5452 in LNCS</source>
          , Tolouse, France, Springer (
          <year>2008</year>
          )
          <fpage>54</fpage>
          -
          <lpage>73</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. de Lara, J.,
          <string-name>
            <surname>Vangheluwe</surname>
          </string-name>
          , H.:
          <article-title>Translating model simulators to analysis models</article-title>
          .
          <source>In: Proc. of FASE 2008. Number 4961 in LNCS</source>
          , Springer (
          <year>2008</year>
          )
          <fpage>77</fpage>
          -
          <lpage>92</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Rivera</surname>
            ,
            <given-names>J.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vallecillo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , Dura´n, F.:
          <article-title>Formal specification and analysis of domain specific languages using Maude. Simulation: Transactions of the Society for Modeling</article-title>
          and Simulation
          <string-name>
            <surname>International</surname>
          </string-name>
          (To appear in
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Rivera</surname>
            ,
            <given-names>J.E.</given-names>
          </string-name>
          , Dura´n,
          <string-name>
            <given-names>F.</given-names>
            ,
            <surname>Vallecillo</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          :
          <article-title>A graphical approach for modeling time-dependent behavior of dsls</article-title>
          .
          <source>In: Proc. of the IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC'09)</source>
          , Corvallis,
          <source>Oregon (US)</source>
          ,
          <source>IEEE Computer Society</source>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Toncar</surname>
          </string-name>
          , V.: VoIP Basics: About Jitter. (
          <year>2007</year>
          ) http://toncar.cz/Tutorials/ VoIP/VoIP_Basics_Jitter.html.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Liao</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cohen</surname>
            ,
            <given-names>D.:</given-names>
          </string-name>
          <article-title>A specification approach to high level program monitoring and measuring</article-title>
          .
          <volume>18</volume>
          (
          <issue>11</issue>
          ) (
          <year>1992</year>
          )
          <fpage>969</fpage>
          -
          <lpage>978</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>M.Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kiciman</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fratkin</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fox</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Brewer</surname>
          </string-name>
          , E.:
          <article-title>Pintpoint: Problem determination in large, dynamic internet services</article-title>
          .
          <source>In: Proceedings of the 2002 International Conference on Dependable Systems and Networks</source>
          , IEEE Computer Society, Washington, DC, USA (
          <year>2002</year>
          )
          <fpage>595</fpage>
          -
          <lpage>604</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Rohr</surname>
          </string-name>
          , M.,
          <string-name>
            <surname>van Hoorn</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Matevska</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sommer</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stoever</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Giesecke</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hasselbring</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Kieker: Continuous monitoring and on demand visualization of Java software behavior</article-title>
          .
          <source>In: Proceedings of the IASTED International Conference on Software Engineering</source>
          <year>2008</year>
          , ACTA Press (
          <year>2008</year>
          )
          <fpage>80</fpage>
          -
          <lpage>85</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Kiczales</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hilsdale</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hugunin</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kersten</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Palm</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Griswold</surname>
            ,
            <given-names>W.:</given-names>
          </string-name>
          <article-title>An overview of AspectJ</article-title>
          .
          <source>In: Proc. of ECOOP 2001</source>
          .
          <article-title>Volume 2072 of LNCS</article-title>
          . (
          <year>2001</year>
          )
          <fpage>327</fpage>
          -
          <lpage>353</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Spinczyk</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gal</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schroder-Preikschat</surname>
            ,
            <given-names>W.:</given-names>
          </string-name>
          <article-title>AspectC++: an aspect-oriented extension to the C++ programming language</article-title>
          .
          <source>In: Proc. of 40th International Conference on Tools Pacific</source>
          . (
          <year>2002</year>
          )
          <fpage>53</fpage>
          -
          <lpage>60</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Mahrenholz</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Spinczyk</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schroeder-Preikschat</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Program instrumentation for debugging and monitoring with Aspectc++</article-title>
          .
          <source>In: Proc. of ISORC'02</source>
          . (
          <year>2002</year>
          )
          <fpage>249</fpage>
          -
          <lpage>256</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Gibbs</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Malloy</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Weaving aspects into C++ applications for validation of temporal invariants</article-title>
          .
          <source>In: Proc. of SMR'03</source>
          . (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Garlan</surname>
          </string-name>
          , D., Cheng, S.,
          <string-name>
            <surname>Schmerl</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Increasing system dependability through architecturebased self-repair</article-title>
          .
          <source>In: Architecting Dependable Systems</source>
          , Springer-Verlag (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Oreizy</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gorlick</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Taylor</surname>
          </string-name>
          , R.,
          <string-name>
            <surname>Heimbigner</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          , Johnson, G.,
          <string-name>
            <surname>Medvidovic</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Quilici</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rosenblum</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wolf</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>An architecture-based approach to self-adaptive software</article-title>
          .
          <source>In: IEEE Intelligent Systems</source>
          . (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Diaconescu</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mos</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Murphey</surname>
            ,
            <given-names>J.:</given-names>
          </string-name>
          <article-title>Automatic performance management in component based systems</article-title>
          .
          <source>In: Proc. of ICAC'04</source>
          . (
          <year>2004</year>
          )
          <fpage>214</fpage>
          -
          <lpage>221</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>