We conduct research in the following major areas.
There is a growing awareness of the importance of Architectural Knowledge (AK) in the software architecture community. Starting with the Griffin project (2005), we have investigated what AK entails, how this can be captured in architectural documentation, the relationship between architectural analysis and AK, and architectural decisions. Documenting architecture decisions has significant benefits for system design and evolution, but is rarely practiced in industry. Therefore, we have developed a framework (published in 2011) that captures all relevant concerns for documenting architecture decisions. In the context of an industry-research collaboration with ABB (2013), we developed a tool for documenting architecture decisions called Decision Architect. The tool has been extended in recent years (2013-2016) and has been released under an open source license. In 2018, we started with the research after documentation in Continuous Software Development (CSD) that embraces lean, agile and devops processes. Documentation in CSD is often verbal (like in stand-ups), informal (whiteboard sketches) of left out at all, which leads to knowledge evaporation. We investigate what documentation is required before, during or after an iteration. The result of this research will be a lightweight architectural framework for CSD.
|Quality Metrics and Analytics|
The object-oriented paradigm is the dominant way in developing software systems at the moment. A basic argument that software developers pose in favor of object-orientation is that it is closer to the way that human brains think, i.e. in terms of objects and actions. However, in order for object-oriented software development to preserve its main advantage, the developed software should reflect a number of quality traits, such as modularity and understandability. The group’s focus in terms of object-oriented design is on methods and techniques that guarantee the internal and external product quality. Our work until now has been focused on GoF design patterns, code refactoring, and quality assessment. In this context, we have: a) validated existing metrics and introduced new metrics b) investigated how GoF design patterns are related to certain quality attributes (e.g., energy efficiency), and what parameters may influence this relation (e.g., pattern grime) c) investigated refactoring techniques and how to prioritize refactorings, and d) developed multiple tools to support quality assessment and refactoring activities.
Technical debt, which refers to immature software artifacts that fail to meet the required level of quality, has recently attracted increasing attention from both academia and industry in the software engineering field. To date, although the field is more active than in the past, little work has been done on measuring technical debt at the architecture level, the so-called Architectural Technical Debt (ATD). In the long term, ATD can, to a great extent, reduce the maintainability and evolvability of a software system. Until now, we have proposed a conceptual model of architectural debt and an ATD management process applying this ATD conceptual model in order to facilitate the decision-making in a value-oriented perspective of architecting. Our current work focuses on identifying, measuring, and tracking ATD through automatic detection of Architectural Smells, one of the most important forms of ATD. For this purpose, we joint forces with companies and international universities to focus on analysing the evolution of individual architectural smells in industrial embedded systems. The final goal is to identify strategies for prioritizing architectural smells refactoring considering the effort required to apply the refactoring, the contribution of the smell to the ATD principal, and the trade-offs with the run-time qualities caused by the removal of the smell itself. We also investigate on evolution of Technical Debt in general and on repayment activities in particular. We analyze the evolution of technical debt in open-source Python projects belonging to some ecosystems. We focus on the amount of technical debt that is paid back and the types of issues that are fixed.
|Architecting Self-Adapting Systems|
Self-adaptive systems are resilient and flexible systems capable of autonomously adapting themselves. Due to the continuous evolution of software-intensive systems, a self-adaptive system monitors itself in order to change its behavior to deal with uncertain operating conditions such as unpredicted system faults, changing stakeholder needs, and changing environment and system characteristics. In this context we study a systematic approach for self-adaption of multiple concerns at runtime. Until now we have systematically reviewed the literature and investigated existing methods. In addition, we have also studied and classified the main uncertainties in the self-adaptive system domain to obtain a better understanding of the problem domain. We are currently focusing on two different studies: 1) developing models that capture the required knowledge of quality concerns and investigating how these models can be employed at runtime to support tradeoff analysis and conflict resolution; and 2) proposing a cost benefit analysis method to include the adaptation cost in runtime decision in order to improve its outcome, and to enable the system to select the optimal configuration for adaptation.
|Cloud-based Software Engineering|
Cloud computing has become very popular in the last years due to its well-documented benefits to organizations and individuals with respect to transferring capital to operational expenses, potentially unlimited access to computational resources in a self-service manner, and utility-based charging for the use of these resources. In this respect, cloud computing offers a platform for innovative information systems that are partially or completely implemented around cloud offerings. Challenges in this effort arise from the Everything as a Service (*aaS) nature of the platform and the software that is to be developed for it, the volatility of the perceived performance due to its multi-tenant characteristics, the need for cost awareness during operation/execution, and the heterogeneous nature of available offerings for system distribution. These challenges need to be addressed irrespective of the adopted cloud deployment model (public, private, or hybrid), and of whether a system is developed natively on the cloud or migrated to it later. Our research aims to provide the tools and concepts required for engineering software in this context.
|Software Language Engineering|
Software language engineering (SLE) studies the principles, foundations, tools, and techniques for the construction of software languages. Software languages are languages used during software development, and include programming languages, DSLs, data formats, specification languages, modeling languages, APIs, and other forms of structured artifacts. Our research aims to design and improve techniques for SLE, in the areas of language workbenches, parsing, compilation, semantics, language design, live programming, and modular language development. As a research vehicle we employ the Rascal meta programming system and language workbench, developed at the CWI SWAT group.
|Architecting Systems of Systems|
The term "System of Systems" (SoS) refers to those systems that emerge from the cooperation between a collection of autonomous-yet-interacting constituent systems which deliver functionalities that such constituents cannot accomplish on its own. This approach for systems design has been increasingly adopted to address complex missions in important domains like healthcare, transportation, agriculture, and defense, usually with software-intensive and cyber-physical systems as their constituents. However, designing an architecture for a SoS is particularly challenging, when compared with the design of a conventional, centralized, software-intensive system. Unlike the latter, a SoS architecture aims to satisfy Architectural Significant Requirements in highly uncertain environments (caused by the autonomy and independence of its constituents). Furthermore, there are emergent and sometimes undesirable behaviors that are difficult to anticipate at design time. In this research area, we are investigating novel approaches for the systematic design of architectures of software-intensive systems-of-systems that address these challenges, considering the phases of analysis, synthesis, evaluation, implementation, maintenance, and evolution.
|Architecting Cloud-enabled Cyber-Physical Systems|
Emerging areas like Internet of Things, cloud robotics, vehicular networks, smart factory, and many others reflect a trend towards the development of Cyber-Physical Systems (CPS) which combine devices, sensors and actuators with Cloud Computing. The combination of physical devices with highly scalable Cloud services provides new opportunities for their development and operation, by e.g. offloading complex computation or data analysis tasks to the Cloud in order to offer advanced functionality with low-cost physical devices. Designing the architecture of those systems provides new challenges to software architects of such Cloud-enabled CPS (CeCPS) since the involved technologies range from embedded systems to cloud computing. While embedded systems have limited computing capacity their reaction times are very critical. Cloud computing, on the other hand, offers almost unlimited computing capacity but is subject to network latency. Connecting the two areas requires careful consideration of the system-specific requirements. Another challenge lies in the concerns of multiple stakeholders from different fields which have to be taken into account during the design of the systems software architecture to ensure a secure, productive and maintainable system. To address those challenges, our research is focused on methods and tools that support the decision making in the software architecture design process for CeCPS.
|Completed Research Projects|
More information about the completed research projects by SEARCH group.