Pervasive computing has changed the role, the characteristics and the requirements of software supporting users in their daily life. Hence, the way software systems are designed and built must change accordingly. A specific feature to consider towards this purpose is Quality of Service (QoS). Indeed, pervasive computing brings new challenges and issues related to QoS.
As part of our research, we investigate a middleware-based solution addressing QoS concerns in pervasive computing. The proposed solution copes with QoS issues related to different phases of the pervasive systems’ life cycle. This includes (i) QoS description during the specification of pervasive systems, (ii) QoS-awareness during the design and implementation of pervasive systems, and (iii) the adaptation of these systems regarding QoS dynamics.
A QoS-aware Service Composition Algorithm for Pervasive Systems. QoS-aware service composition is a key requirement in pervasive computing since it enables selecting services able to fulfill complex user tasks while meeting their QoS requirements. Nevertheless, the highly dynamic nature of pervasive environments raises several challenges regarding QoS-aware service composition. To cope with these challenges we propose a heuristic algorithm for QoS-aware service selection and composition on the fly.
QoS-driven Self-adaptation Approach for Pervasive Systems. Addressing QoS concerns during the design and the implementation of pervasive systems is not enough to ensure steadily a satisfying level of QoS since QoS can change dynamically at runtime. To this regard, pervasive systems need to adapt themselves according to QoS dynamics. Towards this purpose, we present an approach for QoS-driven self-adaptation of pervasive systems at runtime. Our approach is based on two strategies of self-adaptation. First, runtime self-adaptation at the system level (i.e., the system implementation) based on the substitution of services composing the system dynamically at runtime. This approach is underpinned by our QoS-aware selection algorithm allowing dynamic binding of services. If the substitution fails (e.g., there are no substituting services), we bring up self-adaptation of the system to the architectural level (i.e., the system design). This second strategy aims at finding an alternative architecture able to fulfill the user task. The two self-adaptation strategies (i.e., at the system level and the architecture level) are coordinated at runtime by continuously evaluating the status of the system.