## 2 Background and Related Research
### Software Architecture for Mobile Cloud Computing Systems  
Mobile computing has fast emerged as a disruptive technology that has started to replace the old computing paradigms by providing portable computation and context-aware computation on the go. According to the statistics of the Global System for Mobile Communications, currently there are approximately 7 billion mobile device connections across the globe. Interestingly, the number rose from 0 to 7 billion in just three decades, which means that the mobile device connections are growing about 5 times faster than the human population [16]. As illustrated in Figure 1a, mobile computing is enabled with a combination of a mobile device (hardware), mobile apps (software), and a remote server (network connectivity) to offer portable, context-sensitive, and connected computation on the go [17]. Specifically, a mobile device acts as a backbone of mobile computing and it represents any (hand-held) equipment or machine that allows its user to perform computation, information sharing, and other relevant activities in a portable fashion, as in Figure 1a. Despite these benefits, there are some critical challenges such as resource scarcity including the processing, storage, energy deficiency, and issues like data security and privacy that needs to be addressed [1; 2; 18]. Figure 1: Overview of software architecture for mobile cloud computing (MCC) systems, (**a**) Layered architecture view; (**b**) Component and connector view. **Cloud Computing,** as per the definition of NIST, is defined as a combination of the software, platform, and infrastructure services that enable the entities or organizations to leverage the distributed and interoperable services to develop and deploy their software systems over available and virtually unlimited resources--public or private servers ([PERSON] et al., 2018). This means that cloud computing can offer the entities or organizations to off-load or deploy their (on premise) software systems, computation, or storage intensive tasks to servers by means of cloud-based services as in Figure 1a. In particular, the software as a service (SaaS) model is based on provisioning of the pay-per-use software resources to its users. Therefore, in the context of (resource-constrained) mobile-computing, resource-sufficient cloud computing can be viewed as an opportunistic model that allows mobile devices to offload data and computation over cloud-servers as illustrated in Figure 1a. Such offloading increases performance, decreases energy consumption, and alleviates resource poverty of mobile devices ([PERSON] et al., 2018; [PERSON] et al., 2018). In recent years, MCC has emerged as a state-of-the-art mobile computing technology to develop innovative systems by unifying the portable (front-end) mobile devices with resource-sufficient (back-end) cloud servers ([PERSON] et al., 2018). **Software Architecture,** as per the ISO/IEC/IEEE 42010 standard, represents a blueprint or high-level view of a software by means of architectural components (as computational entities) and their connectors (relationships between components) ([PERSON] et al., 2018). Software architecture proved successful in abstracting the complexities of source code modules by representing them as architectural components, whereas the interaction or calls between the modules are represented as the component connectors. This means that architectural components, as illustrated in Figure 1b, act as the core computational elements to provide abstraction for complex and implementation-specific details (source code). The architecture for mobile-cloud software system can be viewed as a layered architecture model ([PERSON] et al., 2018; [PERSON] et al., 2018). In such a model, a collection of architectural components supports context-sensitivity and other related functionality by manipulating mobile sensors that are part of the mobile computing layer. In contrast, the components that provide the cloud-based computation and storage facilities are part of the cloud computing layer.