Low-Code Engineering for the Internet of Things

The Internet of Things (IoT) technologies are often seen as being the main drivers of the current technological revolution, which devotes the most priority to improving the well-being of humanity. IoT is typically regarded as a powerful network of systems that integrates several heterogeneous and independently networked devices working together to achieve a shared purpose. Engineering such systems require efficient tools to deal with the intrinsic complexities while offering means to increase system reliability by limiting future repair costs. Low-Code Developments Platforms (LCDPs) unravel the opportunities to advance the simplicity of how new applications are developed in different business application domains. However, in the IoT domain, systems are complex, multi-layered, and highly heterogeneous in all aspects, not to mention the large amount of data being collected and processed concurrently. Even though there is a convenient push toward coping with such complexities, there still needs to be a massive gap regarding the actual development techniques that supports early system analysis, deployment, and run-time management. Low-Code Engineering (LCE), on the other hand, aims to tackle such issues by extending the development knowledge present in LCDPs to a more sophisticated era of "Low-code Engineering Platforms (LCEPs)" by injecting into it the theoretical and technical concepts present in Model-Driven Engineering (MDE), Cloud Computing and Machine Learning. These platforms target more sophisticated domains such as IoT, industrial automation, data science, recommender systems, etc. This dissertation addresses such challenges by first presenting the current state of the art of Low-Code Engineering Platforms (LCEPs), particularly in the IoT domain, and how MDE plays a significant role in the LCE evolution. Then, we examine the current limitations, open challenges, and opportunities of existing IoT Engineering platforms in realizing such an initiative. We also introduce the quality model for evaluating the software product quality of such engineering platforms. The complexity behind the automated realization of IoT systems can be extremely daunting. One efficient approach is to adopt Domain-Specific Languages (DSLs). DSLs are tailored to the specific domain to pave the way for the domain experts to define the system's behavior based on their expertise. This dissertation present CHESSIoT, a platform that integrates high-level visual DSLs, software development, safety analysis, and deployment mechanisms for engineering multi-layered IoT systems. With CHESSIoT, users may conduct various engineering tasks on system and software models to enable earlier decision-making. This is achieved from a unique environment and combines multi-staged designs, most notably the system-level, functional, and deployment architectures. The physical architecture specifically contains the high-level system building blocks and their interconnection suitable to perform both early qualitative and quantitative safety analysis by employing logical Fault-Trees (FTs).On the other hand, the software model is equipped with the system's functional behavior suitable for generating platform-specific code ready to be deployed on low-level IoT device nodes. Additionally, the framework supports modeling of the system's deployment, which would ultimately be used to generate deployment artifacts. To facilitate run-time management of deployed services, the tool offers means for defining run-time service provisioning modules through which deployment rules are defined and configured. To showcase the effectiveness of our proposed approach, throughout this dissertation, we will use various comparative assessment techniques, addressing potential research questions relevant to the specific topic as well as the implications of conducted surveys. Finally, to demonstrate the capabilities of the supporting tool in satisfying specific requirements, different running examples and demonstrations were also implemented and illustrated.