<!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>Morpheus: A Degradation Framework for Resilient IoT Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jörg Domaschka</string-name>
          <email>joerg.domaschka@uni-ulm.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Alexander Heß</string-name>
          <email>alexander.hess@uni-ulm.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Franz J. Hauck</string-name>
          <email>franz.hauck@uni-ulm.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>David Mödinger</string-name>
          <email>david.moedinger@uni-ulm.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jakob Pietron</string-name>
          <email>jakob.pietron@uni-ulm.de</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matthias Tichy</string-name>
          <email>matthias.tichy@uni-ulm.de</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Distributed Systems, Ulm University</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Institute of Information Resource Management, Ulm University</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Institute of Software Engineering and Programming Languages, Ulm University</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2021</year>
      </pub-date>
      <fpage>21</fpage>
      <lpage>25</lpage>
      <abstract>
        <p>Graceful degradation is an established concept to improve the resilience of systems, especially when other resilience mechanisms have failed. Its implementation is often heavily tied to the application code and, thus, cumbersome and error prone. As IoT systems get not only ubiquitous but also critical, reliable graceful degradation would be ideal. In this paper, we present the Morpheus framework that provides a TypeScript-internal DSL to enable a systematic development of degradable IoT systems. The design of the framework is based on the concept of separation of concerns by providing distinct yet linked languages to specify hierarchical components and their connections; the components' operating modes and transfer functions between them; as well as state machines for the specification of the components' behaviour in each operating mode. The operating modes for each component serve as degradation levels. Automatic degradation of a component is triggered in case of failures of connected components. With recovery from underlying failures, the component is automatically upgraded back to a higher level. We illustrate our framework using a simplified prototype of an entrance barrier of a parking garage.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>The Internet of Things (IoT) has made huge progress from a generic vision to concrete
realisations. IoT systems are becoming more and more ubiquitous and pervasive. Simultaneously,
our daily lives depend even more on them, e.g., smart homes, smart cities as well as smart
transportation, delivery, and manufacturing processes. By their nature, IoT systems can directly
influence the real world and as a consequence their failures can cause harm and even fatalities.
Thus, it is important that they are highly resilient and particularly, never enter undefined states.</p>
      <p>While IoT systems are conceptually close to distributed applications that have been planned,
implemented, and operated for decades, significant diferences exist: (i) IoT systems span
nEvelop-O
large geographical regions; (ii) they consist of a large number of heterogeneous, even
batterypowered, devices with diferent capabilities, network bandwidths, and failure characteristics;
(iii) depending on the region, replacing failed devices and patching broken software may be a
matter of days and weeks instead of minutes and hours as with Web-like distributed systems.</p>
      <p>
        Graceful degradation is a known approach to reduce a system’s capabilities in a controlled
manner [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Degradation thus can step in when classical approaches to fault tolerance are
unavailable or can no longer mask failures. While classical approaches to resilience, e.g.,
replication or checkpointing, can be provided by libraries in an application-agnostic way, degradation
has to be interlaced with application code. This makes the design and implementation of a
degradable IoT system cumbersome, error prone, time intensive, and hard to test and maintain.
      </p>
      <p>
        To overcome these limitations, we propose Morpheus, a degradation framework for IoT
systems as extension of our previous work [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] within the SORRIR project—an internal DSL for
IoT systems built in TypeScript, which allows the definition of components, their ports and
connections, as well as the behaviour of components using state machines. The contribution
of this paper is an extension that supports developers of IoT systems with the integration of
graceful degradation into their systems. Morpheus ensures automatic degradation and upgrade
of a component, as soon as developer-defined constraints are met. By design, our DSL ensures
the principle of separation of concerns, by splitting the definition of a component’s behaviour
into diferent operation modes that can serve as degradation levels.
      </p>
      <p>Section 2 discusses related work, while Section 3 introduces previous work and a running
example used throughout the text. Section 4 introduces Morpheus’ concepts and illustrates
their use via the running example. Section 5 concludes and presents future work.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Work</title>
      <p>
        With graceful degradation, an IoT system is able to sustain some functionality when faults can
no longer be tolerated by other resilience mechanisms [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]: the application copes with partial
failures and adapts. Examples include to retain reduced functionality at the edge in case of
loss of connectivity between cloud and edge. The degraded service could even abstain from
executing certain tasks. Thus, the degradation can afect function, quality and performance.
      </p>
      <p>
        Graceful degradation approaches are well known for design and operation of distributed
embedded systems [
        <xref ref-type="bibr" rid="ref1 ref4 ref5">4, 5, 1</xref>
        ], but have recently also been introduced for IoT scenarios, e.g., for
a video surveillance application [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], a smart-ofice case study [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], and a drone application [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
Degradation often depends on defining a set of diferent service levels that determine the
graduations of quality-of-service (QoS) a system can operate at. This results in an application
specific mechanism, as the levels and their interpretation are specific to their application domain.
      </p>
      <p>
        A degraded system may automatically switch back to the originally desired service level,
or at least to a better level, if the cause of the degradation has disappeared or changed. This
graceful upgrade is addressed in only few related works [
        <xref ref-type="bibr" rid="ref4 ref9">9, 4</xref>
        ].
      </p>
      <p>
        Degradation is supported by various modelling approaches such as the Architecture Analysis
&amp; Design Language (AADL) and its error annex [
        <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
        ]. Bozzano et al. extend AADL to enable
the specification of multiple modes for components to define normal and degraded behaviour
using event-data automata [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. The approach supports formal analysis of such models by
model checking as well as safety analyses like generation of fault trees. A similar approach has
been presented in the area of self-adaptive systems where Borda and Koutavas [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] present a
formal approach which supports the specification of adaptation transitions between automata.
The approach supports the formal verification of safety requirements by a translation to CSP.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Background</title>
      <sec id="sec-3-1">
        <title>3.1. Modelling System</title>
        <p>
          Morpheus builds upon our previous work—an internal Domain Specific Language [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] developed
in TypeScript [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]—that covers the two relevant aspects: structure and behaviour. The structure
of the IoT system is defined as an architecture covering the most relevant structural elements
of an architectural description language based on [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. Particularly, it provides atomic and
hierarchical components, ports and connections. Components interact with one another by
exchanging events over connections which connect two ports.
        </p>
        <p>
          Each atomic component contains internal state consisting of a discrete finite state as in
automata and local data structures (similar to the state in abstract state machines [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]) as well
as a user-developed TypeScript-function which takes this internal state, the contents of the
event queue, and updates state and queue. This basic definition of behaviour is complemented
by a framework, which allows the specification of state machines using TypeScript data
structures and TypeScript as action language and includes an interpreter for these state machines.
Hierarchical components do not have their own behaviour, but aggregate the behaviour of their
subcomponents to simplify the design of systems, particularly, the definition of degradation.
        </p>
        <p>
          Our experience as presented in our previous paper [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] has been very positive. The usage of
TypeScript as “meta-modelling” and action language streamline the development. Our result
ifts very nicely into the overall JavaScript/TypeScript ecosystem. For example, we can easily
reuse libraries for communication via MQTT and HTTP as well as logging. Another advantage
is our ability to use IDEs and all of their features, including debugging facilities.
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Running Example</title>
        <p>In order to demonstrate the capabilities of Morpheus, we implemented a physical prototype1 of
a Smart Entrance Barrier (SEB) that could be deployed in a parking garage. Customers of the
garage reserve a parking spot through an online reservation system using credit card details
and license plate number. The SEB automatically recognises customers on entrance and exit.
Our SEB prototype is composed of multiple dependent sub-components: a barrier unit B U , a
barrier sensor B S , a car sensor C S , a card reader C R , and a camera C A M . Further, it uses two external
software components: a plate recognition service P R S and a parking management system P M S .</p>
        <p>When a car approaches the S E B , the car sensor detects its presence and the camera scans the
license plate. The image is then sent to the P R S , which extracts the license plate number in text
format. This information is used to query the P M S , and if a valid reservation is found, the S E B will
open. In this seamless authentication process with multiple interacting components, a faulty
component shall not prevent a car from passing the barrier. The prototype is equipped with
1The prototype uses an ESP8266-based microcontroller and a Raspberry Pi Zero-based camera OctoCam.
degradation functionality: Morpheus adjusts the S E B ’s functionality based on the availability of
internal and external components as detailed in Section 4.</p>
        <p>PRS(:PEyxthtoenrn-baalCseodmCpVo)nent
camera: ExternalComponent
barrierUnit: ExternalComponent</p>
        <p>barrierMCU
barrierSensor: ExternalComponent
barrierMCU
cardReader: ExternalComponent
barrierMCU
carSensor: ExternalComponent</p>
        <p>barrierMCU
smartEntranceBarrier: Component
parkManagementSystem: Component</p>
        <p>Connections</p>
        <p>MQTT
REST (internal)
REST (external)</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Morpheus Degradation</title>
      <sec id="sec-4-1">
        <title>4.1. Operating Mode</title>
        <p>In Morpheus, an operating mode defines a component’s functionality. By default, each
component implements the operating mode O f f , which specifies that the component is currently
unable to provide any reasonable functionality. This operating mode is entered if essential
sub-components are unreachable or have failed, or the component itself sufers from internal
faults. It is required that each component is equipped with at least one additional non-trivial
operating mode, which implements the component’s intended feature set. Developers can now
define further operating modes that provide a graduated subset of the component’s capabilities.
In order to ensure that the specified functionality can actually be provided, it has to be defined
which dependant sub-components have to be available.</p>
        <p>Our example uses the following operating modes for the S E B :
• O f f : The S E B does not provide any reasonable functionality.
• B l o c k e d : The S E B is locked, no car can enter or leave, e.g., to lock the garage.
• O p e n : The S E B is open and allows entrance and exit of cars, e.g., for maintenance.
• M a n u a l : The S E B requires manual authentication with a credit card for every car.
• A u t o m a t i c : The S E B automatically recognises cars by their licence plates, authenticates
the user, and authorises entrance.
operation modes O n and O f f , which means that they are either fully functional or not available
at all. Further, D C (don’t care) entries indicate that the operating mode of the given component
is irrelevant. A u t o m a t i c requires all other components to be O n except the card reader, as it is
not used. In case the camera C A M , the car sensor C S or the plate recognition service P R S are
faulty, the automatic authentication procedure is unavailable and therefore the SEB should be
operated in M a n u a l . If further the card reader C S is also unavailable, the S E B can not provide
reasonable service and should be operated in B l o c k e d , which efectively closes the gate to the
garage. If the parking garage utilises multiple entrance barriers, the garage could proceed to
operate with degraded performance. The operating mode O p e n is intended for maintenance or
free parking campaigns, because the barrier will remain open until it is manually reconfigured.
In case either the barrier unit BU or the barrier sensor BS sufer from a mechanical failure, none
of the pre-conditions can be fulfilled which leads to the operating mode O f f . In this case only
the physical state of the barrier is unknown and has to be inspected by a technician, but the
application logic is still in a well-defined state.</p>
        <p>
          Implementation – Framework: A component can be switched into one of the available
operating modes either by human operators, software logic, or Morpheus. To realise these
features, we first extend the basic type A b s t r a c t S t a t e [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] with an o p e r a t i n g M o d e value, as shown
in Listing 1. Additionally, the D e g r a d a b l e S t a t e is equipped with a d e g r a d a t i o n H i s t o r y field that
can be used to track the component’s degradation behaviour.
        </p>
        <p>We further introduced a new type called D e p d e n c y F u n c t i o n that is used to define the
preconditions for each operating mode. Essentially, this is a boolean function that takes the
components current state and the sub-component’s operating modes into account. These are
called Shadow Modes since it can not be reliably determined wether an external component is
unavailable due to a hardware failure or because of an interrupted network connection. We
choose to realize this as a generic function, which evaluates declarative conditions like Table 4.1,
while still providing great freedom, e.g., to perform arbitrary calculations.</p>
        <p>Listing 1: The datatypes that are used to store a component’s state.
1 t y p e D e p e n d e n c y F u n c t i o n &lt; S , E , P , D &gt; = (
2 s t a t e : D e g r a d a b l e S t a t e &lt; S , E , P , D &gt; ,
3 s h a d o w M a p : M a p &lt; s t r i n g , s t r i n g &gt;
4 ) = &gt; b o o l e a n ;</p>
        <p>Listing 2: The D e p e n d e n c y F u n c t i o n is used to define pre-conditions for an operating mode.</p>
      </sec>
      <sec id="sec-4-2">
        <title>Implementation – Running Example: An example usage of the D e p e n d e n c y F u n c t i o n is</title>
        <p>shown in Listing 3, which provides a snippet of the dependency map implementation for the
S E B . In essence, this map stores the pre-conditions for each operating mode. The snippet shows
an example implementation for the operating mode A u t o m a t i c .
1 e n u m M o d e s { L 0 = ” O F F ” , L 1 = ” B L O C K E D ” , L 2 = ” O P E N ” , L 3 = ” M A N U A L ” , L 4 = ” A U T O M A T I C ” } ;
2 e n u m S h a d o w M o d e s { O F F = ” O F F ” , O N = ” O N ” } ;
3 e n u m S u b C o m p { C A M = ” C A M ” , C S = ” C S ” , B U = ” B U ” , B S = ” B S ” , C R = ” C R ” , P R S = ” P R S ” , P M S = ” P M S ” } ;
4 c o n s t d e p e n d e n c y M a p = n e w M a p &lt; M o d e s , D e p e n d e n c y F u n c t i o n &lt; a n y , E v e n t s , P o r t s , M o d e s » ( [
5 [ M o d e s . L 4 , ( s t a t e , s h a d o w M a p ) = &gt; {
6 i f ( s h a d o w M a p . g e t ( S u b C o m p . C A M ) = = = S h a d o w M o d e s . O N &amp; &amp;
7 s h a d o w M a p . g e t ( S u b C o m p . C S ) = = = S h a d o w M o d e s . O N &amp; &amp;
8 s h a d o w M a p . g e t ( S u b C o m p . B U ) = = = S h a d o w M o d e s . O N &amp; &amp;
9 s h a d o w M a p . g e t ( S u b C o m p . C R ) = = = S h a d o w M o d e s . O N &amp; &amp;
10 s h a d o w M a p . g e t ( S u b C o m p . P R S ) = = = S h a d o w M o d e s . O N &amp; &amp;
11 s h a d o w M a p . g e t ( S u b C o m p . P M S ) = = = S h a d o w M o d e s . O N ) {
12 r e t u r n t r u e ;
13 }
14 r e t u r n f a l s e ;
15 } ] , / / f u r t h e r D e p e n d e n c y F u n c t i o n s f o l l o w h e r e
16 ] ) ;</p>
        <p>Listing 3: Implementation of a D e p e n d e n c y F u n c t i o n for the operating mode A u t o m a t i c .</p>
      </sec>
      <sec id="sec-4-3">
        <title>4.2. Degradation DAG</title>
        <p>At any given time, each component  has a target operation mode. Under normal circumstances
this is the operating mode that provides the full intended feature set (A u t o m a t i c in our example).
Yet, due to external dependencies to other components,  may not be able to provide this ideal
mode. In this case, Morpheus picks another operation mode for  for which all dependencies
are met. We refer to this operation mode as  ’s degradation level. For enabling Morpheus to
select an appropriate degradation level Morpheus requires a developer to specify a directed
acyclic graph (DAG) for each degradable component. The graph connects the component’s
implemented operating modes, such that each of them is directly or indirectly degradable to
operating mode O f f . Morpheus selects the next degradation level along the graph that fulfils its
preconditions, and executes adjacent transitions. Operating modes that are connected through a
path that leads to the operating mode O f f should provide a graduated subset of the component’s
functionality. Whenever the operating mode of a subcomponent changes, Morpheus first checks
if the current operating mode/degradation level can be kept and if not selects a new operation
mode to degrade/upgrade to. Further, based on the DAG, it determines the path to reach that
state and iteratively degrades/updates along the path from one operation mode to the next until
the selected mode has been reached.</p>
        <p>Implementation – Framework: For each operation mode associated with its own state
machine, a mechanism is needed to not only switch between modes, but also to transfer the
state of one state-machine to the state of another. This functionality can be implemented using
the T r a n s f e r F u n c t i o n whose signature is provided in Listing 4. While the main task of a transfer
functions is to take one operating mode as an input and output another one, it can be used to
perform additional tasks. First, it is possible to save a component’s internal state on a stack, such
that it can be restored if the operating mode is reached later again. Second, the component’s
degradation path can be recorded and analysed in order to make fine-grained adjustments to
the component state.
1 t y p e T r a n s f e r F u n c t i o n &lt; S , E , P , D &gt; =
2 ( c u r r e n t : D e g r a d a b l e S t a t e &lt; S , E , P , D &gt; ) = &gt; D e g r a d a b l e S t a t e &lt; S , E , P , D &gt; ;
Listing 4: The T r a n s f e r F u n c t i o n is used for the state transfer between two operating modes.</p>
        <p>Morpheus now provides the u p d a t e O p e r a t i n g M o d e function, which automatically selects the
optimal operating mode for the component based on the defined pre-conditions, the
degradation DAG and the availability of the dependent subcomponents. The implementation of this
function is provided in Listing 5. Internally, it evaluates the implemented D e p e n d e n c y F u n c t i o n s
in descending order. If a function returns true, it is checked whether the degradation level of the
assigned operating mode is higher or lower than the degradation level of the current operating
mode. If the degradation level is lower, the internal d e g r a d e function is executed, which performs
a depth-first search on the degradation DAG, that produces an array of T r a n s f e r F u n c t i o n s . This
array of T r a n s f e r F u n c t i o n s is then iteratively processed, and the function finally returns the
degraded state. In case no path could be found the state is returned unaltered. The
implementation of the u p g r a d e function is quite similar. This function is executed if the degradation
level of the new operating mode is higher than the degradation level of the current operating
mode. However, it additionally guarantees that an upgrade path is only executed if it leads to
the component’s target operating mode. This property is especially important if only a partial
upgrade can be performed, i.e. if the component can be upgraded, but the target operating
mode can not be reached yet.
Implementation – Running Example: Figure 2 shows an example DAG for the S E B , based
on the conditions from Table 4.1. If the S E B ’s current operating mode is A u t o m a t i c and the
conditions are no longer true, e.g., the P R S switched to mode O f f , then the next possible mode
is considered in the DAG. Concretely, operating mode M a n u a l is the first degradation level for
target operating mode A u t o m a t i c . Further, the operating mode O p e n can only be reached through
manual reconfiguration, if it is assumed that A u t o m a t i c is the standard target operating mode.
Listing 6 provides a snippet that shows how the T r a n s f e r F u n c t i o n can be used to implement
the transition from A u t o m a t i c to M a n u a l . Here, we utilise the d e g r a d a t i o n H i s t o r y to record the
component’s current operating mode and internal state.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusion</title>
      <p>
        In this paper we presented Morpheus, a framework that aims to assist developers in realising
graceful degradation and automatic recovery. Morpheus provides lightweight integration into
our previously presented internal DSL based on operating modes of interconnected components.
In our previous internal DSL [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] we provided integrated state-space exploration. Currently, this
exploration is not realised for Morpheus, as the automatic recovery algorithm and transfer
functions complicate the state-transition exploration. Otherwise, Morpheus provides a functional
extension of our previous results. Morpheus allows developers to separate their concerns on
the levels of functionality and interdependence of components, while providing clear guidance
for realising resilience through graceful degradation and upgrade.
      </p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgments</title>
      <p>The authors acknowledge the financial support by the Federal Ministry of Education and
Research of Germany (BMBF grant nr. 01IS18068, SORRIR). Further, this work was partially funded
by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) – 435878599 ;
453895475.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Glass</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Lukasiewycz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Haubelt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Teich</surname>
          </string-name>
          ,
          <article-title>Incorporating graceful degradation into embedded system design</article-title>
          ,
          <source>in: Des. Autom. Test in Eur. Conf. &amp; Exh. (DATE)</source>
          ,
          <year>2009</year>
          , pp.
          <fpage>320</fpage>
          -
          <lpage>323</lpage>
          .
          <source>doi:1 0 . 1 1 0 9 / D A T E . 2 0</source>
          <volume>0 9 . 5 0 9 0 6 8 1 , ISSN</volume>
          :
          <fpage>1558</fpage>
          -
          <lpage>1101</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Tichy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Pietron</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Mödinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Juhnke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F. J.</given-names>
            <surname>Hauck</surname>
          </string-name>
          ,
          <article-title>Experiences with an internal DSL in the iot domain</article-title>
          ,
          <source>in: STAF Worksh. Proc: 4th Worksh. on Model-Driv. Eng. for the Intern. of Things (MDE4IoT)</source>
          , volume
          <volume>2707</volume>
          <source>of CEUR Workshop Proceedings</source>
          ,
          <year>2020</year>
          . URL: http://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>2707</volume>
          /mde4iotpaper1.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>C.</given-names>
            <surname>Berger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Eichhammer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H. P.</given-names>
            <surname>Reiser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Domaschka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F. J.</given-names>
            <surname>Hauck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Habiger</surname>
          </string-name>
          ,
          <article-title>A survey on resilience in the IoT: Taxonomy, classification and discussion of resilience mechanisms</article-title>
          , ACM Comp. Surv. (
          <year>2021</year>
          ).
          <source>doi:1 0 . 1 1</source>
          <volume>4 5 / 3 4 6 2 5 1 3</volume>
          , accepted for publication.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>W.</given-names>
            <surname>Nace</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Koopman</surname>
          </string-name>
          ,
          <article-title>A product family approach to graceful degradation</article-title>
          ,
          <source>in: Architecture and Design of Distributed Embedded Systems: IFIP WG10.3/WG10.4/WG10.5 Int. Worksh. on Distr. and Par. Emb. Sys. (DIPES)</source>
          ,
          <string-name>
            <surname>Springer</surname>
            <given-names>US</given-names>
          </string-name>
          ,
          <year>2001</year>
          , pp.
          <fpage>131</fpage>
          -
          <lpage>140</lpage>
          .
          <source>doi:1 0 . 1 0</source>
          <volume>0 7 / 9 7 8 - 0 - 3 8 7 - 3 5 4 0 9 - 5</volume>
          _
          <fpage>1</fpage>
          3 .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Knight</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. A.</given-names>
            <surname>Strunk</surname>
          </string-name>
          ,
          <article-title>Achieving critical system survivability through software architectures, in: Architecting Dependable Systems II</article-title>
          , volume
          <volume>3069</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2004</year>
          , pp.
          <fpage>51</fpage>
          -
          <lpage>78</lpage>
          .
          <source>doi:1 0 . 1 0</source>
          <volume>0 7 / 9 7 8 - 3 - 5 4 0 - 2 5 9 3 9 - 8</volume>
          _
          <fpage>3</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>H.</given-names>
            <surname>Chang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mukherjee</surname>
          </string-name>
          , T. Lakshman,
          <article-title>Bringing the cloud to the edge</article-title>
          ,
          <source>in: IEEE Conf. on Comp. Comm. Worksh</source>
          .
          <article-title>(INFOCOM WKSHPS)</article-title>
          , IEEE,
          <year>2014</year>
          , pp.
          <fpage>346</fpage>
          -
          <lpage>351</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Willocx</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Bohé</surname>
          </string-name>
          , V. Naessens,
          <article-title>QoS-by-design in reconfigurable IoT ecosystems</article-title>
          ,
          <source>in: 2019 IEEE 5th World Forum on Internet of Things (WF-IoT)</source>
          , IEEE,
          <year>2019</year>
          , pp.
          <fpage>628</fpage>
          -
          <lpage>632</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>M.-K. Yoon</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Liu</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Hovakimyan</surname>
          </string-name>
          , L. Sha,
          <article-title>VirtualDrone: Virtual sensing, actuation, and communication for attack-resilient unmanned aerial systems</article-title>
          ,
          <source>in: 8th Int. Conf. on Cyber-Phys. Sys. (ICCPS)</source>
          , ACM,
          <year>2017</year>
          , p.
          <fpage>143</fpage>
          -
          <lpage>154</lpage>
          .
          <source>doi:1 0 . 1 1</source>
          <volume>4 5 / 3 0 5 5 0 0 4 . 3 0 5 5 0 1 0 .</volume>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>W.</given-names>
            <surname>Nace</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Koopman</surname>
          </string-name>
          ,
          <article-title>A graceful degradation framework for distributed embedded systems</article-title>
          , in: Worksh. on Rel. in Emb. Sys. (in Conj.
          <source>with SRDS)</source>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <source>[10] Int. Soc. of Automotive Engineers</source>
          ,
          <article-title>Architecture analysis and design language annex (AADL)</article-title>
          , Vol.
          <volume>1</volume>
          ,
          <string-name>
            <surname>Annex</surname>
            <given-names>E</given-names>
          </string-name>
          : Error model annex,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>J.</given-names>
            <surname>Delange</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P. H.</given-names>
            <surname>Feiler</surname>
          </string-name>
          ,
          <article-title>Architecture fault modeling with the AADL error-model annex</article-title>
          ,
          <source>in: 40th EUROMICRO Conf. on Softw. Eng. and Adv</source>
          . App.
          <article-title>(EUROMICRO-SEAA)</article-title>
          ,
          <source>IEEE Comp. Soc.</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>361</fpage>
          -
          <lpage>368</lpage>
          .
          <source>doi:1 0 . 1 1 0 9 / S E A A . 2</source>
          <volume>0 1 4 . 2</volume>
          <fpage>0</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bozzano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Cimatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Katoen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V. Y.</given-names>
            <surname>Nguyen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Noll</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Roveri</surname>
          </string-name>
          ,
          <article-title>Safety, dependability and performance analysis of extended AADL models, Comput</article-title>
          . J.
          <volume>54</volume>
          (
          <year>2011</year>
          )
          <fpage>754</fpage>
          -
          <lpage>775</lpage>
          .
          <source>doi:1 0 . 1 0</source>
          <volume>9 3</volume>
          / c o m
          <source>j n l / b x q 0</source>
          <volume>2</volume>
          <fpage>4</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>A.</given-names>
            <surname>Borda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Koutavas</surname>
          </string-name>
          ,
          <article-title>Self-adaptive automata</article-title>
          ,
          <source>in: 6th Conf. on Formal Meth. in Softw. Eng</source>
          .
          <article-title>(FormaliSE), collocated with ICSE</article-title>
          , ACM,
          <year>2018</year>
          , pp.
          <fpage>64</fpage>
          -
          <lpage>73</lpage>
          .
          <source>doi:1 0 . 1 1</source>
          <volume>4 5 / 3 1 9 3 9 9 2 . 3 1 9 4 0 0 1 .</volume>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Microsoft</surname>
          </string-name>
          ,
          <source>TypeScript Language Specification v1.8</source>
          ,
          <year>2016</year>
          . URL: http://typescriptlang.org.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>N.</given-names>
            <surname>Medvidovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. N.</given-names>
            <surname>Taylor</surname>
          </string-name>
          ,
          <article-title>A classification and comparison framework for software architecture description languages</article-title>
          ,
          <source>IEEE Trans. Softw. Eng</source>
          .
          <volume>26</volume>
          (
          <year>2000</year>
          )
          <fpage>70</fpage>
          -
          <lpage>93</lpage>
          .
          <source>doi: 1 0 . 1 1 0 9 / 3 2 . 8 2</source>
          <volume>5 7 6 7 .</volume>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>E.</given-names>
            <surname>Börger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Raschke</surname>
          </string-name>
          ,
          <source>Modeling Companion for Software Practitioners</source>
          , Springer,
          <year>2018</year>
          .
          <source>doi:1 0 . 1 0</source>
          <volume>0 7 / 9 7 8 - 3 - 6 6 2 - 5 6 6 4 1 - 1</volume>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>