Software Engineering

Software Engineering

Der Forschungsbereich Software Engineering rund um Prof. Dr. Thorsten Berger verbindet grundlegende mit angewandter Forschung,  um die Softwareentwicklung der nächsten Generation von intelligenten, autonomen und variantenreichen Softwaresysteme zu automatisieren.

Hier werden neue Ansätze zur Softwareerstellung, -analyse und -evolution untersucht. Unsere Anwendungsdomänen sind im Wesentlichen Automotive-Systeme, Systemsoftware (z.B. Linux kernel), Softwareökosysteme (z.B. Android Apps) und mobile Roboter.

© CCS

Herausforderungen

„Software is eating the world“ ist ein bekanntes Zitat von Marc Andreessen aus dem Jahr 2011. Software isst noch immer die Welt – Software-orientierte Firmen dominieren die Märkte – wenn auch ein klein wenig anders als 2011. Heutzutage ist Software zunehmend datengetrieben, variantenreich und enthält Technologien der künstlichen Intelligenz (AI). Während sich allerdings Märkte und Technologien rapide ändern, stellt das Gebiet Software Engineering verschiedenste Methoden und Werkzeuge bereit, die diese rapiden Technologie-Änderungen überwinden und Software immer schneller entwickeln lassen, um auf neue Märkte reagieren zu können. Während die Entwicklung von Software für eine sehr lange Zeit eine hochkreative Aktivität bleiben wird, durchgeführt von menschlichen Entwicklern, erhöhen moderne Methoden und Werkzeuge des Software Engineerings das Niveau der Abstraktion und der Automatisierung.

Schwerpunkte

Model-Driven Software Engineering (MDSE): Softwareentwicklung mit zentraler Verwendung von Modellen und domänenspezifischen Sprachen (DSLs – Domain-Specific Languages). Wir entwickeln DSLs für variantenreiche Software (sog. Softwareproduktlinien), mobile Service-Roboter, selbstfahrende Autos, und weitere interessante Anwendungsdomänen. Außerdem verbessern wir Technologien zur Sprachentwicklung, wie z.B. Metamodellierung, Language-Workbenches und Projektionales Editieren.

Software Product Line Engineering (SPLE): Software is immer häufiger variantenreich, um flexibel auf verschiedene Nutzungsszenarien, Optimierungen (z.B. Energiebedarf) oder Hardware-Umgebungen reagieren zu können. Solche Software wird häufig mit unstrukturierten, ad hoc-Methoden wie z.B. Cloning realisiert, aber idealerweise sollte man Software automatisch basierend auf den gewünschten Features generieren oder ableiten können. Wir entwickeln und verbessern Techniken um diese sogenannten Softwareproduktlinien effizient entwickeln zu können, auch in enger Zusammenarbeit mit der Industrie.

Software Analytics (SWA): Das Re-Engineering und die Qualitätssicherung (z.B. des korrekten Verhaltens) von Software benötigt häufig die Analyse von Quellcode und anderen Softwareartefakten, was eine Herausforderung darstellt. Wir entwickeln statische Quellcode-Analysetechniken und verwenden diese unter anderem auch als Basis unserer MDSE- und SPLE-Technologien. Darüber hinaus erlaubt uns die großskalige Datenanalyse von Software-Repositories (z.B. Android Apps auf Google Play oder Repositories auf GitHub), dass wir empirische und statistisch signifikante Einsichten in reale Softwareentwicklung und deren Phänomene erhalten.

AI Engineering (SE4AI/AI4SE): Software Engineering unterstützt die Entwicklung intelligenter Systeme (SE4AI), genauso wie umgekehrt AI die Entwicklung von Software unterstützt (AI4SE). Wir arbeiten auf beiden Gebieten, wobei wir in SE4AI das Management (z.B. Versions-/Varianten-/Experiment-Management) von Artefakten des maschinellen Lernens (z.B. Modelle) unterstützen, sowie in AI4SE Techniken aus Basis des maschinellen Lernens zur Qualitätssicherung (z.B. Defektvorhersage in Software) und die Entwicklung variantenreicher Systeme (z.B. durch Recommender-Systeme) entwickeln.