<!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>Runtime Software Architectural Models for Adaptation, Recovery and Evolution</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Hassan Gomaa</string-name>
          <email>hgomaa@gmu.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Emad Albassam</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniel A. Menascé</string-name>
          <email>menasce@gmu.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Dept. of Computer Science, George Mason University</institution>
          ,
          <addr-line>Fairfax, Virginia</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>-This paper describes approaches for dynamic software adaptation using runtime models of the software architecture. Software adaptation patterns consist of interaction models and state machine models that are used during dynamic software adaptation. Software adaptation and recovery concerns are off-loaded from components by incorporating them into connectors, which are responsible for dynamically adapting and recovering components. Both centralized and decentralized approaches to adaptation and recovery are considered. Two approaches to dynamic software product lines are described, a dynamic software adaptation approach for service-oriented product lines and the design of variable adaptation and recovery connectors.</p>
      </abstract>
      <kwd-group>
        <kwd>dynamic software adaptation</kwd>
        <kwd>autonomic computing</kwd>
        <kwd>dynamic software product li nes</kwd>
        <kwd>runtime models</kwd>
        <kwd>recovery and adaptation connectors</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>I. INTRODUCTION
A software architectural model describes the design of the
software system in terms of components and connectors.
Architectural models are frequently developed at design
time before the implementation of the software system.
However, architectural models can also be used at
runtime to enable architecture recovery and architecture
adaptation. Runtime architectural models are software
models that coexist with the executing software system,
such that runtime decisions about dynamic changes to the
executing system are made by analyzing the architectural
model and then applied to the executing system.
This paper describes approaches for dynamic software
adaptation using runtime models of the software
architecture for both planned and unplanned adaptation.
Planned adaptation is proactive in which manual or
automated decisions are made to dynamically change the
software system at runtime. Unplanned adaptation is
triggered by unexpected events, such as node failure,
which necessitate reactive decisions to dynamically
recover the software system from failure.</p>
      <p>This paper describes and discusses the research conducted
in dynamic software adaptation at George Mason
University, in particular the research directions taken and
why they were taken, the software engineering concepts
and technology that the research is based on, the main
results of the research, and directions for future research.
Section II considers dynamic software adaptation from
different perspectives before addressing adaption of
software architectures in Section III, comparing in Section
IV adaption without knowledge of the software
application with adaptation in which the application’s
software architectural patterns are known. From these
patterns, software adaptation patterns are developed
consisting of interaction models and state machine models
that are used during dynamic software adaptation, as
described in Section V.</p>
      <p>Next, in Section VI, the paper describes how software
adaptation concerns can be separated from component
development concerns by incorporating adaptation
concerns into adaptation connectors. The paper then
describes in Sections VII and VIII how adaptation
connectors can be extended to address recovery in a
decentralized autonomic MAPE-K approach for
selfhealing and self-adaptation.</p>
      <p>The paper goes on to describe in Section IX, two
approaches to dynamic software product lines (SPL). The
first approach is a dynamic software adaptation approach
for service-oriented product lines. The second approach is
the design of variable adaptation and recovery connectors
used in the software adaptation of dynamic software
product lines (DSPL). In Section X, the paper discusses
related work and future directions for dynamic software
adaptation.</p>
    </sec>
    <sec id="sec-2">
      <title>II. DYNAMIC SOFTWARE ADAPTATION</title>
      <p>
        Software adaptation addresses software systems that need
to change their behavior during execution. In
selfmanaged and self-healing systems, systems need to
monitor the environment and adapt their behavior in
response to changes in the environment [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Garlan and
Schmerl [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] have proposed an adaptation framework for
self-healing systems, which consists of monitoring,
analysis/resolution, and adaptation. Kramer and Magee
[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] have described how in an adaptive system, a
component needs to transition from an active (operational
state) to a quiescent (idle) state before it can be removed
from a configuration. Kramer and Magee have also
advocated an architectural approach to self-managed
systems [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Autonomic systems address software
adaptation by following the MAPE-K model that consists
of four activities (monitoring, analysis, planning, and
execution) that operate on a knowledge-base of the
system [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>Software adaptation can take many forms. It is possible to
have a self-managed system that adapts the algorithm it
executes based on changes it detects in the external
environment. If these algorithms are pre-defined, then the
system is adaptive but the software structure and
architecture is fixed. The situation is more complex if the
adaptation necessitates changes to the software structure
or architecture. In order to differentiate between these
different types of adaptation, adaptations can be classified
as follows within the context of distributed
componentbased software architectures:
a) Algorithmic adaptation. The system dynamically
changes its behavior within its existing structure. There is
no change to the system structure or architecture.
b) Configuration adaptation. Dynamic adaptation involves
dynamically relocating components of the architecture to
different nodes of a distributed configuration, for example
if a node fails. The dynamic replacement of a failed
component with a replacement component has to be
performed while the system is executing.
c) Architectural adaptation. The software architecture has
to be modified as a result of the dynamic adaptation. Old
component(s), which may not provide the same interface,
must be dynamically replaced by new component(s) while
the system is executing. In this situation, in addition to
architectural changes, there are also likely to be
configuration changes as old components are removed
and new components are instantiated on new or existing
nodes.</p>
    </sec>
    <sec id="sec-3">
      <title>III. MODEL-DRIVEN SOFTWARE ARCHITECTURE FOR</title>
      <p>
        DYNAMIC SOFTWARE ADAPTATION
In model-driven software architecture, models of the
software architecture are developed prior to
implementation. An architecture model can be a
platformindependent model (PIM), which is a precise model of the
software architecture before commitment to a given
platform, or a platform-specific model (PSM), where the
architecture is deployed to a distributed hardware
configuration [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Both PIM and PSM models can be used
in runtime adaptation of software systems. In dynamic
architecture-based software adaptation, it is necessary to
have runtime knowledge before and after adaptation of (a)
the software architecture in terms of components and
connectors, and (b) the mapping of the software
components and connectors to the hardware
configuration, in particular the computer nodes to which
they are deployed.
      </p>
      <p>
        If the dynamic adaptation involves a change to the
software architecture, then (a) the runtime PIM is used to
determine what components need to be added, removed,
or replaced in the architecture – this corresponds to
architectural adaptation in section II (b) the runtime PSM
is used to determine the nodes that are affected. If the
adaptation does not involve a change in the software
architecture but involves a change to the software
configuration (e.g., after a node failure, one or more
components need to be recovered and relocated to
different nodes), then the runtime PSM is used to
determine how to reconfigure the system. This
corresponds to configuration adaptation in section II.
IV. DYNAMIC CHANGE MANAGEMENT OF SOFTWARE
ARCHITECTURES
Kramer and Magee [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ][
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] investigated how dynamic
adaptation (also called dynamic reconfiguration) could be
carried out at the software architecture level. The software
architecture consists of distributed components deployed
to a distributed configuration. They described how a
component must transition to a quiescent state before it
can be removed or replaced in a dynamic software
configuration. However, each component of the software
architecture is treated as a black box with no knowledge
of the executing software application.
      </p>
      <p>
        A change management model [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] defines the precise steps
involved in dynamic reconfiguration to transition from the
current software run-time configuration to the new
runtime configuration. Thus, a component that needs to be
replaced has to stop being active and become quiescent,
the components that it communicates with need to stop
communicating with it; the component then needs to be
unlinked, removed, and potentially replaced by one or
more new components, after which the configuration
needs to be relinked and the affected components
restarted.
      </p>
      <p>In order to drive a target component to quiescence, it is
frequently necessary to also drive neighboring
components to quiescence. However, if the application
behavior of the neighboring components is known, it is
possible to drive these components to partial quiescence
so that they cease to communicate with the target
component but continue communicating with other
components, thereby providing less disruption to the
runtime software system as described next.</p>
      <p>
        V. SOFTWARE ADAPTATION PATTERNS AND CONNECTORS
The Kramer/Magee approach to software adaptation
assumes no knowledge of the executing application. If the
software application is known, then knowledge of the
patterns of behavior in the software architecture can be
taken advantage of during software adaptation.
A software architecture is composed of distributed
software architectural patterns, such as client/server,
master/slave, and distributed control patterns, which
describe the software components that constitute the
pattern and their interconnections [
        <xref ref-type="bibr" rid="ref4 ref6">4, 6</xref>
        ]. For each of these
architectural patterns, there is a corresponding software
adaptation pattern, which models how the software
components and interconnections can be changed under
predefined circumstances, such as replacing one client
with another in a client/server pattern, inserting a control
component between two other control components in a
distributed control pattern, etc.
      </p>
      <p>
        A software adaptation pattern defines how a set of
components that make up an architectural pattern
dynamically cooperate to change the software
configuration to a new configuration [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. A software
adaptation pattern requires state- and scenario-based
reconfiguration behavior models to provide for a
systematic design approach. The adaptation patterns are
described by adaptation interaction models (using
communication or sequence diagrams) and adaptation
state machine models [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. Several adaptation patterns
have been developed including the Master-Slave
Adaptation Pattern, Centralized Control Adaptation
Pattern, Decentralized Control Adaptation Pattern [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], and
service-oriented architectural patterns [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        A. Software Adaptation State Machines
An adaptation state machine defines the sequence of
states a component goes through from a normal
operational state to a quiescent state [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. A component is
in the Active state when it is engaged in its normal
application computations. A component is in the Passive
state when it is not currently engaged in a transaction it
initiated, and will not initiate new transactions. A
component transitions to the Quiescent state when it is no
longer operational and its neighboring components no
longer communicate with it. Once quiescent, the
component is idle and can be removed from the
configuration, so that it can be replaced with a different
version of the component. Fig. 1 shows the basic
adaptation state machine model for a component as it
transitions from Active state to Quiescent state. The
adaptation framework sends a Passivate command to the
component. If the component is idle, it transitions directly
to the Quiescent state. However, if the component is busy
participating in a transaction, it transitions to the Passive
state. When the transaction is completed, it then
transitions to the Quiescent state.
In early research on software adaptation patterns [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], the
state machine for each component was modeled using two
orthogonal state machines, an operational state machine
(modeling normal component operation) and an
adaptation (also referred to as reconfiguration) state
machine (Fig. 1). However, for more complicated
adaptation patterns, there is often some interaction
between the two state machines, which complicates the
adaptation process.
      </p>
      <p>
        In later research on service-oriented systems [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ], the
operational state machine was separated from the
adaptation state machine. This is done by moving the
adaptation state machine from the component and
encapsulating it in the connector. This separation of
adaptation concerns from application concerns ensures
that the adaptation patterns, as well as the corresponding
code that realizes each pattern, are more reusable.
      </p>
    </sec>
    <sec id="sec-4">
      <title>VI. SOFTWARE ADAPTATION CONNECTORS</title>
      <p>
        Connectors in component-based software architectures
(CBSA) are objects that interconnect components and
encapsulate a communication protocol [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Connectors
encapsulate frequently used communication patterns such
as asynchronous communication and synchronous
communication with reply. For software adaptation, a
connector is enhanced to also address adaptation concerns
of the component it is connected to. As long as the
connector receives all incoming messages to the
component and all responses from that component, it can
track the behavior of the component in terms of messages
received and responses sent, steer t h e component to a
quiescent state [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ],  and thereby carry out the adaptation
of the component.
The SASSY framework [
        <xref ref-type="bibr" rid="ref10 ref17 ref20 ref7 ref9">7, 9, 10, 17, 20</xref>
        ] provides two
different types of adaptation connector, coordinator
connector and service connector, as shown in Fig. 2. A
service adaptation connector behaves as a proxy for a
service, such that its clients can interact with the
connector as if it was the service. The goal of an
adaptation connector is to separate the concerns of an
individual service from dynamic adaptation, i.e., the
adaptation connector implements the adaptation
mechanism for its corresponding service, including the
interaction with the change management service [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] and
tracking the operational states of the service. The
adaptation state machine for a given adaptation pattern is
encapsulated in the corresponding adaptation connector.
Each adaptation connector encapsulates a state machine
that has the states depicted in Fig. 1. However, the events
and actions of the state machine depend on the
characteristics of the component that the connector
communicates with. For example, in Fig. 2, a service
connector that interacts with a service behaves differently
from a connector that interacts with a coordinator.
SASSY uses an adaptive Change Management Model [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]
to establish a region of quiescence [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] that allows
dynamic adaptation of the component(s) to take place. For
each adaptation pattern, the change management model
controls and sequences the steps in which the
configuration of components in the pattern is changed
from the old configuration to the new configuration. In
Fig. 2, a service could be dynamically replaced by a
newer version of the service. However, to dynamically
add a new service to the SOA would also necessitate a
dynamic change of the coordinator to a newer version that
is capable of interacting with the new service.
      </p>
    </sec>
    <sec id="sec-5">
      <title>VII. RECOVERY AND ADAPTATION CONNECTORS</title>
      <p>
        As a sequel to the SASSY project, we started work on the
Resilient Autonomic Software Systems (RASS) project.
After the SASSY research demonstrated that software
adaptation concerns could be separated from component
application concerns, the runtime modeling problems
investigated by the RASS project [
        <xref ref-type="bibr" rid="ref15 ref16">15, 16</xref>
        ] are to (a)
dynamically discover a software architecture at run-time
[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] (b) investigate connectors that address software
recovery in addition to software adaptation and (c) to
investigate a decentralized autonomic MAPE-K approach
to self-healing and self-configuration.
      </p>
    </sec>
    <sec id="sec-6">
      <title>RASS [15] introduced the following concepts:</title>
      <p>A recovery pattern defines how components in an
architectural pattern can be dynamically relocated and
recovered to a consistent state after a component has
failed.</p>
      <p>A Recovery and Adaptation Connector (RAC) that is used
to separate adaptation and recovery concerns from
component concerns so that a component can be
dynamically adapted and recovered from failures.
A RAC (fig. 2) behaves as a proxy for a component or
service by receiving requests from clients and then
forwarding these requests to the service. The RAC also
receives responses from the service, which are then
forwarded to requesting clients. To ensure safe adaptation
at run-time and recoverability of service failures, the RAC
must keep track of the transactions that the service is
currently engaged in and must maintain messages (i.e.,
requests and responses) that pass through it so that these
messages can be held during adaptation and can be
recovered when the service fails.</p>
      <p>The reason why the RAC is able to address both planned
adaptation and unplanned adaptation (i.e., recovery) is
that in both cases, the messages that constitute each
transaction need to be stored in the connector until the
transaction has completed and manipulated during
adaptation if required. However, the state machines and
algorithms for planned and unplanned adaptation are
different, as described next.</p>
    </sec>
    <sec id="sec-7">
      <title>VIII. DISTRIBUTED ADAPTATION AND FAILURE</title>
      <p>
        RECOVERY
Based on the concept of RACs, we designed and
implemented DARE (Distributed Adaptation and
Recovery), a decentralized, integrated adaptation and
recovery framework [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] for providing both self-healing
and self-adaptation properties to complex and highly
dynamic CBSAs. DARE is based on a decentralized
version of the MAPE-K model. Every node in the
system hosts an identical instance of the DARE
middleware whose architecture is shown in Fig 3.
The Configuration Maintenance Layer (CML) tracks
mapping of components to nodes and provides services
to higher layers for retrieving and modifying this
map.  The Configuration Manager (CM) is responsible
for maintaining the current configuration map of the
software system, which is stored in a distributed hash
table that supports replication of its entries [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] in order
to tolerate failures and enable distribution of the map. The
table contains entries that map the IP address of a
node to the set of identifiers of components and RACs
hosted by the node with this IP address.
      </p>
      <p>The recovery of a failed component must be handled by
exactly one Recovery and Adaptation Manager at one
node. To ensure consistent recovery, our approach
involves electing the node with the lowest IP address
to become the recovery coordination node for
coordinating recovery of other failed nodes. The
Failure Analysis Manager (FAM) in the recovery node
is the only FAM that proceeds with the recovery by
analyzing the failure.</p>
      <p>
        The Architecture Discovery Layer (ADL) consists of
DeSARM [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], a decentralized architecture discovery
mechanism, which is responsible for automatically
discovering at runtime the current architecture of the
software system, in particular components and connectors
as well as synchronous and asynchronous communication
patterns between components. DeSARM’s decentralized
architecture discovery mechanism is based on selective
gossiping techniques [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] and message tracing.
DeSARM notifies the Configuration Maintenance Layer
when it suspects a node failure due to absence of gossip
messages from that node.
      </p>
      <p>The Application Recovery Layer (ARL) consists of the
Recovery and Adaptation Manager (RAM) that is
responsible for overseeing dynamic adaptation and
recovery of the CBSA. When a node fails, the ARL
ensures that the software system recovers to a consistent
configuration in which every failed component is
relocated and instantiated on a healthy node, and that
the connections between a recovered component and its
neighbor components are re-established.</p>
      <p>
        The RAM interacts with the a p p r o p r i a t e RAC for each
component to be adapted or recovered. The RAC ensures
that (1) any transactions that were interrupted due to
a run-time failure are recovered and restarted at the
recovered component and (2) a component is only
adapted after it has become quiescent [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
    </sec>
    <sec id="sec-8">
      <title>IX. DYNAMIC SPL RUN-TIME ARCHITECTURE</title>
      <p>
        Software product line (SPL) engineering [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] provides a
means for systematic planning and design for dynamic
software adaptation. With a conventional SPL approach,
such as the PLUS method [
        <xref ref-type="bibr" rid="ref19 ref22">19, 22</xref>
        ], a family of software
architectures, consisting of common and variant
components, is built at design time in advance of
deployment and is managed using a feature model. By
means of application feature selection, a given member of
the SPL is derived and then deployed. However, with
dynamic software adaptation, a member of the SPL can,
after deployment, be dynamically adapted at run-time to a
different member of the SPL.
      </p>
      <p>
        Dynamic software product lines (DSPL) [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ] are needed
when SPL members need to adapt after deployment while
the system is operational. Dynamic software adaptation
for SPLs is the process of changing the SPL member at
run-time to a different SPL member. In other words,
dynamic software adaptation is concerned with changing
the application configuration at runtime after it has been
deployed and is needed for SPLs that have to dynamically
adapt after original deployment. To address dynamic
adaptation, the SPL life cycle for the PLUS method [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]
is extended as shown in Fig. 4. PLUS consists of two
phases: 1) Product Line (Domain) Engineering and 2)
Application Engineering. For dynamic adaptation, a third
phase is required: 3) Target System Reconfiguration.
During this third phase, the executable target system is
dynamically changed from the target system run-time
configuration for one product line member to a new target
system run-time configuration for a different SPL
member [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ].
Using feature modeling, the SPL feature model has to
capture all features of the SPL corresponding to the
different application run-time architectures. The run-time
feature model captures the features of the currently
executing target system and is initially deployed at
application derivation time. Furthermore, this feature
model can change at run-time by deactivating those
features no longer required and dynamically replacing
them with new features (from the original SPL feature
model) that are required. In order to dynamically adapt
the software architecture in response to these feature
changes, it is necessary to have a feature/component table
that relates each feature to the components that realize the
feature.
      </p>
      <p>
        Dynamic SPL concepts have been used in SASSY for
dynamic software adaptation of service-oriented
architectures [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]. RASS [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ] investigated the  design of
variable adaptation and recovery connectors used in the
software adaptation of dynamic software product lines.
The approach integrates software product line and feature
modelling concepts with autonomic properties of
selfhealing and self-adaptation.
      </p>
    </sec>
    <sec id="sec-9">
      <title>X. DISCUSSION</title>
      <p>
        Although there is a large body of literature in the area of
autonomic and self-adaptive systems, most of them use
a centralized approach [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. The main challenge with
decentralized approaches is carrying out dynamic
adaptation and recovery using partial knowledge of the
system [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Schneider et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] concluded in their
survey on self-healing frameworks that the systematic
integration of the self-* properties is one of the main
challenges in this area. This paper has described how the
above challenges have been systematically addressed. The
SASSY and DARE approaches have progressively
addressed the issues of decentralizing approaches to
dynamic adaptation and recovery; DARE has addressed
the integration of self-healing and self-adaptation
properties.
      </p>
      <p>
        Two other areas investigated by one of the authors are
evolutionary software architectures [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] and designing
reusable secure connectors [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ]. The evolutionary
software development approach uses SPL and feature
modeling concepts for evolving multi-version systems.
The multi-version systems constitute a family of systems
with some common functionality and some variable
functionality. The goal is to model all versions of the
system, including previously deployed systems as a
software product line. The addition of optional and
alternative features necessitates the adaptation of the
original software architecture by designing optional and
variant components to realize these features.
      </p>
      <p>
        Secure connectors [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ] are designed separately from
application components by reusing the appropriate
communication pattern between components as well as
the security services required by these components. Each
secure connector is designed as a composite component
that encapsulates both security service components and
communication pattern components. Integration of
security services and communication patterns within a
secure connector is provided by a security coordinator.
The main advantage is that secure connectors can be
reused in different secure applications.
      </p>
      <p>
        Dynamic SPL and dynamic software adaptation
approaches could be enhanced by incorporating both the
above approaches. Thus a dynamic adaptive SPL [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]
could also evolve after initial deployment by allowing
new features and components to be added to address
evolving requirements. Dynamic and variable recovery
and adaption connectors [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ] could be further enhanced
by incorporating security patterns. Thus variable
connectors could be evolved and adapted at run-time to
incorporate different recovery, adaptation, and/or security
patterns.
      </p>
    </sec>
    <sec id="sec-10">
      <title>XI. CONCLUSIONS</title>
      <p>This paper has described and discussed the research
conducted in dynamic software adaptation at George
Mason University, including the research directions taken
and why they were taken, the software engineering
concepts and technology that the research is based on, the
main results of the research and directions for future
research. In particular, the research has been
progressively addressing more challenging problems,
building on dynamic software architecture models and
software product line models, progressing from software
architectural patterns to software adaptation and software
recovery patterns, separating adaptation concerns from
application concerns, decentralizing software adaptation
planning and decision making, and addressing both
planned and unplanned adaptation using a decentralized
autonomic MAPE-K model. If a system failure occurs
during adaptation planning, the planning needs to be
aborted and restarted. However, if a system failure occurs
during adaptation execution, both the adaptation planning
and execution need to be aborted and restarted.
This paper has described approaches for dynamic
software adaptation using runtime models of the software
architecture, comparing adaptation with no knowledge of
the software application with adaptation in which the
application’s software architectural patterns are known.
From architectural patterns, software adaptation patterns
were developed consisting of interaction models and state
machine models that are used during dynamic software
adaptation.</p>
      <p>The paper then described how software adaptation and
recovery concerns could be off-loaded from components
by separating these concerns and incorporating them into
adaptation and recovery connectors, which are
responsible for dynamically adapting and recovering
components from failure. The paper has considered both
centralized and decentralized approaches to adaptation
and recovery. The paper also described two approaches
to dynamic software product lines, a dynamic software
adaptation approach for service-oriented product lines and
design of variable adaptation and recovery connectors
used in the software adaptation of dynamic SPL.
For future work, the DSPL approach could be further
enhanced by addressing software evolution and
incorporating security patterns into recovery and
adaptation connectors.</p>
    </sec>
    <sec id="sec-11">
      <title>ACKNOWLEDGEMENTS</title>
      <p>This work is partially supported by the AFOSR award
FA9550-16-1-0030. The authors thank Koji Hashimoto
and Mohamed Hussein for their contributions to this
research.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D.</given-names>
            <surname>Garlan</surname>
          </string-name>
          and
          <string-name>
            <given-names>B.</given-names>
            <surname>Schmerl</surname>
          </string-name>
          , “
          <article-title>Model-based Adaptation for SelfHealing Systems”</article-title>
          ,
          <source>Proc. Workshop on Self-Healing Systems</source>
          , ACM Press, Charleston,
          <string-name>
            <surname>SC</surname>
          </string-name>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kramer</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Magee</surname>
          </string-name>
          , “
          <article-title>The evolving philosophers problem: Dynamic change management</article-title>
          ,
          <source>” IEEE Tr. Software Engineering</source>
          , vol.
          <volume>16</volume>
          , no.
          <issue>11</issue>
          , pp.
          <fpage>1293</fpage>
          -
          <lpage>1306</lpage>
          ,
          <year>1990</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>J. O.</given-names>
            <surname>Kephart</surname>
          </string-name>
          and
          <string-name>
            <given-names>D. M.</given-names>
            <surname>Chess</surname>
          </string-name>
          , “
          <article-title>The vision of autonomic computing</article-title>
          ,” Computer, vol.
          <volume>36</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>41</fpage>
          -
          <lpage>50</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          ,
          <article-title>Software modeling and design: UML, use cases, patterns, and software architectures</article-title>
          . Cambridge University Press,
          <year>2011</year>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kramer</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Magee</surname>
          </string-name>
          , “
          <article-title>Self-managed systems: an architectural challenge</article-title>
          ,” in Future of Software Engineering,
          <year>2007</year>
          . FOSE'07. IEEE,
          <year>2007</year>
          , pp.
          <fpage>259</fpage>
          -
          <lpage>268</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <string-name>
            <given-names>A Software</given-names>
            <surname>Modeling</surname>
          </string-name>
          <article-title>Odyssey: Designing Evolutionary Architecture-centric Real-Time Systems and Product Lines”, Keynote paper</article-title>
          ,
          <source>Proc. 9th International Conference on ModelDriven Engineering</source>
          , Languages, and
          <string-name>
            <surname>Systems</surname>
          </string-name>
          , Genova, Italy,
          <year>October 2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>D.</given-names>
            <surname>Menascé</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Malek</surname>
          </string-name>
          , J. Sousa, “
          <article-title>SASSY: A Framework for Self-Architecting Service-Oriented Systems”</article-title>
          ,
          <source>IEEE Software</source>
          , Vol.
          <volume>28</volume>
          , No.
          <issue>6</issue>
          , pp.
          <fpage>78</fpage>
          -
          <lpage>85</lpage>
          , November/
          <year>December 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Hussein</surname>
          </string-name>
          , “
          <article-title>Software reconfiguration patterns for Dynamic Evolution of Software Architectures”</article-title>
          ,
          <source>Proc. Fourth Working IEEE/IFIP Conference on Software Architecture</source>
          , Oslo, Norway, June,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Hashimoto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Malek</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Menasce</surname>
          </string-name>
          ´, “
          <article-title>Software adaptation patterns for service-oriented architectures,”</article-title>
          <source>in Proc. 2010 ACM Symp. Applied Computing. ACM</source>
          ,
          <year>2010</year>
          , pp.
          <fpage>462</fpage>
          -
          <lpage>469</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Hashimoto</surname>
          </string-name>
          , “
          <article-title>Dynamic self-adaptation for distributed service-oriented transactions,”</article-title>
          <source>in Proc. 7th Intl</source>
          . Symp.
          <article-title>Software Engi- neering for Adaptive and Self-Managing Systems</article-title>
          . IEEE Press,
          <year>2012</year>
          , pp.
          <fpage>11</fpage>
          -
          <lpage>20</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>D.</given-names>
            <surname>Weyns</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Schmerl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Grassi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Malek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Mirandola</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Prehofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wuttke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Andersson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Giese</surname>
          </string-name>
          , and
          <string-name>
            <surname>K. M. Go</surname>
          </string-name>
          ¨schka, “
          <article-title>On patterns for decentralized control in self-adaptive systems,” in Software Engineering for Self-Adaptive Systems II</article-title>
          . Springer,
          <year>2013</year>
          , pp.
          <fpage>76</fpage>
          -
          <lpage>107</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>C.</given-names>
            <surname>Krupitzer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F. M.</given-names>
            <surname>Roth</surname>
          </string-name>
          , S. VanSyckel, G. Schiele, and
          <string-name>
            <given-names>C.</given-names>
            <surname>Becker</surname>
          </string-name>
          , “
          <article-title>A survey on engineering approaches for self-adaptive systems</article-title>
          ,
          <source>” Pervasive and Mobile Computing</source>
          , vol.
          <volume>17</volume>
          , pp.
          <fpage>184</fpage>
          -
          <lpage>206</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>C.</given-names>
            <surname>Schneider</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Barker</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Dobson</surname>
          </string-name>
          , “
          <article-title>A survey of self-healing systems frameworks</article-title>
          ,”
          <source>Software: Practice and Experience</source>
          , vol.
          <volume>45</volume>
          , no.
          <issue>10</issue>
          , pp.
          <fpage>1375</fpage>
          -
          <lpage>1398</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.</given-names>
            <surname>Porter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , and D. Menasce´, “DESARM:
          <article-title>A decentralized mechanism for discovering software architecture models at runtime in distributed systems</article-title>
          ,
          <source>” in 11th Intl. Workshop on Models@run.time</source>
          ,
          <year>2016</year>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>E.</given-names>
            <surname>Albassam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , and D. Menasce´, “
          <article-title>Model-based Recovery Connectors for Self-adaptation and Self-healing: Design and Experimentation,” in Software Technologies</article-title>
          ,
          <source>Revised Selected Papers from the 11th International Joint Conference, ICSOFT 2016</source>
          , Lisbon, Portugal, July,
          <year>2016</year>
          ; Published by Springer, CCIS
          <volume>743</volume>
          pp.
          <fpage>108</fpage>
          -
          <lpage>131</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>E.</given-names>
            <surname>Albassam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Porter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , &amp;
          <string-name>
            <surname>D. Menascé</surname>
          </string-name>
          ,
          <article-title>"DARE: A Distributed Adaptation and Recovery Failure Recovery Framework for Software Systems"</article-title>
          ,
          <source>Proc International Conf. on Autonomic Computing (ICAC)</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Hashimoto</surname>
          </string-name>
          , “
          <article-title>Model-based Run-Time Software Adaptation for Distributed Hierarchical Service Coordination”</article-title>
          ,
          <source>Proc. Sixth International Conference on Adaptive and SelfAdaptive Systems and Applications</source>
          , Venice, May
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>P.</given-names>
            <surname>Clements</surname>
          </string-name>
          &amp; L.
          <string-name>
            <surname>Northrop</surname>
          </string-name>
          ,
          <source>Software Product Lines: Practices and Patterns</source>
          , Boston: Addison-Wesley,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Gomaa</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <article-title>“Designing Software Product Lines with UML: From Use Cases to Pattern-based Software Architectures”</article-title>
          ,
          <source>AddisonWesley</source>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Menascé</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Sousa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Malek</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>QoS Architectural Patterns for Self-Architecting Software Systems”</article-title>
          ,
          <source>7th IEEE Intl. Conf. on Autonomic Computing and Communication</source>
          , Washington, DC, June,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>A.-M. Kermarrec and M. Van Steen</surname>
          </string-name>
          , “
          <article-title>Gossiping in distributed systems,” ACM SIGOPS Operating Systems Review</article-title>
          , vol.
          <volume>41</volume>
          , no.
          <issue>5</issue>
          , pp.
          <fpage>2</fpage>
          -
          <lpage>7</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>M.</given-names>
            <surname>Abu-Matar</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          ,
          <article-title>"Variability Modeling for Service Oriented Product Line Architectures"</article-title>
          ,
          <source>Proc. International Software Product Line Conference</source>
          , Munich, Germany,
          <year>August 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <surname>I. Stoica</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Morris</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Karger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. F.</given-names>
            <surname>Kaashoek</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Balakrishnan</surname>
          </string-name>
          , “
          <article-title>Chord: A scalable peer-to-peer lookup service for internet applications,” ACM SIGCOMM Computer Communication Review</article-title>
          , vol.
          <volume>31</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>149</fpage>
          -
          <lpage>160</lpage>
          ,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hinchey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Park</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Schmid</surname>
          </string-name>
          , “Building Dynamic Software Product Lines,” Computer, vol.
          <volume>45</volume>
          , no.
          <issue>10</issue>
          , pp.
          <fpage>22</fpage>
          -
          <lpage>26</lpage>
          , Oct.
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          &amp; K. Hashimoto, “
          <article-title>Dynamic Software Adaptation for Service-oriented Product Lines,”</article-title>
          <source>Proc. Intl. Software Product Line Conf.</source>
          , Volume
          <volume>2</volume>
          , New York, USA,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>E.</given-names>
            <surname>Albassam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , and D. Menasce´, “
          <article-title>Variable Recovery and Adaptation Connectors for Dynamic Software Product Lines”</article-title>
          ,
          <source>Proc. Tenth International Workshop on Dynamic Software Product Lines</source>
          , SPLC Conference, Sevilla, Spain,
          <year>September 2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , “
          <article-title>Towards Feature-Based Evolutionary Software Modeling”</article-title>
          ,
          <source>Proc. International Workshop on Models and Evolution</source>
          , MODELS Conference, Wellington, New Zealand,
          <year>October 2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>M.</given-names>
            <surname>Shin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gomaa</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Pathirage</surname>
          </string-name>
          , “
          <article-title>Reusable Secure Connectors for Secure Software Architectures”</article-title>
          ,
          <source>Proc. 15th International Conference on Software Reuse</source>
          , Limassol, Cyprus,
          <year>June 2016</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>