Software is an integral part of complex systems and software quality is essential for their success. In our research we develop theories, methods and tools for specifying, designing, implementing, testing, monitoring, and evolving large and complex software systems. Characteristics of such systems include decentralized control; support for multiple platforms; inherently conflicting requirements; continuous evolution and deployment; as well as heterogeneous, inconsistent, and changing elements.
Our aim is to apply computing knowledge to solve real-life engineering problems. We conduct research in cooperation with industrial partners to address future challenges in the following key areas of software and systems development:
What methods are best used to describe, anaylze and document software-intensive systems (aka software systems, cyber physical systems, etc.). Model-driven engineering is about understanding the software and its roles in a complex system.
How can we understand and define the capabilities and properties needed from a system? Requirements engineering deals with eliciting, modeling, analysing, specifying and validating the desired services and behaviour.
Changes to software are the rule and not the exception in industrial practice. We work on approaches allowing to adapt software rapidly and reliably when addressing changing requirements or when maintaining systems.
Many of today's software systems are complex and heterogeneous, and need to be monitored since their full behavior often only emerges at runtime (e.g., when interacting with other systems, the hardware, or the environment). Together with partners from industry as well as academia, we investigate these issues and develop methods and tools, e.g., for requirements monitoring and resource or performance monitoring.
Variability and Product Lines
Many of today's software systems accommodate different usage and deployment scenarios. Intentional and unintentional variability in functionality or quality attributes (e.g., performance) of software significantly increases their complexity. Software Product Lines have been introduced to systematically deal with variability and leverage extensive reuse. In our research we deal with the complexity caused by variability in new and emerging application domains and develop Software Product Line approaches and tools.
Verification and Validation
Is the software system correctly implemented? Does it behave as required? Is it secure? These are questions that inevitably arise during software engineering. Testing is a key aspect to this but testing can not proof the absence of errors. It only proofs the presence of errors it is able to detect. Hence testing alone is not sufficient but should be complemented with other V&V techniques.
Software Processes and Tools
How do engineers coordinate, communicate, and collaborate on development activities across the software/system lifecycle? We investigate techniques to better understand dependencies among engineering activities and artifacts and evaluate our research prototypes with industry partners.