The Chair of Software Engineering (led by Prof. Dr. Thorsten Berger) combines foundational and applied research to automate software engineering for the next generation of intelligent, autonomous, and variant-rich software systems. We explore new ways of software creation, analysis, and evolution. Our main application domains are automotive systems, systems software (e.g., Linux kernel), software ecosystems (e.g., Android apps), and mobile robots.
“Software is eating the world” is a famous quote by Marc Andreessen from 2011. Software is still eating it—software-oriented organizations are dominating the markets—but perhaps in a slightly different way than in 2011. Nowadays, software is increasingly data-driven, variant-rich, and incorporating artificial intelligence technologies. While markets and technologies change rapidly and frequently disrupt organizations, software engineering as a discipline provides methods and tools that transcend such changes in technology and allow creating software with increasingly short time-to-markets. While building software is and will for a long time be a highly creative activity done by human developers, modern software engineering methods and tools raise the level of abstraction and of automation.
AI Engineering (SE4AI/AI4SE): Software engineering supports building intelligent systems (SE4AI), as well as AI supports software engineering (AI4SE). We contribute to both areas, in SE4AI advancing the management (e.g., version /variant/experiment management) of machine-learning assets (e.g., models), as well as we leverage machine-learning techniques to build novel quality assurance tools (e.g., defect prediction of software) and tools for building variant-rich systems (e.g., recommender systems for product lines).
Software Analytics (SWA): Re-engineering and quality-assuring (e.g., validating the correct behavior) of software often requires analyzing source code and other artifacts, which is challenging. We build static code analysis techniques and use those to improve our MDSE and SPLE techniques. We mine source-code repositories (e.g., Android apps from Google Play or code repositories from GitHub) to obtain empirical and statistically significant insights into real-world software engineering.
Model-Driven Software Engineering (MDSE) and Software Languages (SL): Building software using software models and domain-specific languages (DSLs). We design DSLs for variant-rich software systems (a.k.a., software product lines), mobile service robots, self-driving cars, and many other interesting application domains. We advance the techniques behind DSL design, such as meta-modeling, language workbenches, and projectional editing.
Software Product Line Engineering (SPLE): Software is increasingly variant-rich, accounting for many different usage scenarios, optimizations (e.g., energy consumption) or hardware environments. Such software is typically created using ad hoc methods, such as cloning, but ideally it can be automatically created based on the features it should have. We conceive and advance techniques for creating so-called software product lines, also in close contact with industry.
Secure Software Development (SSD): Nowadays, every software system needs to consider security to protect sensitive data or the availability of services. Considering security from the beginning of the software engineering process is important to reduce costs and damages of insecure design imposed by backloading security towards the end of the process. We investigate challenges of building secure software systems and create tools to support developers in implementing security features early in the process.
A small selection of third-party funded projects:
Project: CASA – Modeling and Tracing Security Concerns: Supporting Software Developers in Security by Design