Software Engineering Research
Our missionTo define, improve and industrially apply techniques, concepts, and methods for innovative and efficient development of software and software-intensive systems, such that high-quality products can be developed in a shorter period of time and with flexible integration of changing requirements.
Main areas of research
Within our scope the following and related fields of research and technology transfer are of particular significance:
- Model-based development
- UML, MDA
- Domain specific languages (DSL)
- Automotive Software Engineering
- Cloud Computing Applications
- Test development
- Evolution of models, architecture, software
- Agile methods, XP
- Distributed systems
- Non-functional properties (reliability, safety, ...)
- Automata, Statecharts
- Model analysis and modeling guidelines
- Transformational software development
- Code generation
Model-driven development / MDA / DSL
Like any other engineering discipline, software engineering uses blue prints before building the actual system. In our work we use and improve the de'facto standard Unified Modeling Language (UML). We have adapted the UML [BS01] towards domain specific languages (DSL) [CKM+99], e.g. to model railway stations and their software architecture in terms of tracks, trains, and signals instead of abstract objects and links.
For an efficient use of models we elaborate an agile version of a model-driven development process where models are the central artifacts. Models are used for requirement capture, architecture definition, design, documentation, test generation and even quality assurance and certification. Ideally, code, automated tests and quality certificates are generated from extended models. This increases the efficiency of developers as well as the quality of and trust on the resulting system.
Equally important, this approach enables and improves reuse of artifacts (models) in a way that evolution of systems according to changing hardware or extended functional requirements [BRW03,PR99] becomes easier. This is particularly of interest when developing innovative software (such as research project prototypes that later become products) or product line software (such as automotive device controllers that evolve over car model variants and generations).
Software and system architecture
Defining the proper architecture early in a project is the key to a successful and stable product. The architecture of software-intensive distributed systems normally consists of several layers: the structure of the function net, the embedding in reliable communication architecture and its mapping to physical devices using e.g. an operating system or AutoSAR for basic infrastructural services. Offering a notation for specification of distributed, asynchronously communicating components, and corresponding Model-Driven-Architecture (MDA) techniques, we increase the level of automation of these mappings (deployment) as well as the identification and explicit description of architectural patterns [FPR01,RSRS99] that are reusable in similar or extended applications.
Cloud computing applications
The term Cloud Computing stands for the vision of outsourcing computations to an external provider (server) who has access to a (potentially) infinite set of resources and manages the computation over them. Through abstraction the user (client) no longer knows where and when his computations are executed; from the user point of view the computation is performed in a "cloud" where he can flexibly demand more or less resources and only pay their acutal use. Outsourced resources can be IT-infrastructure, such as storage and computing capacities, but also software applications and their runtime environments (platforms) which means also that services around installation and maintenance are outsourced. So, with this paradigm comes along the vision of reducing costs and risks for IT.
Software which runs within a "cloud" faces a lot of challenges: it runs on unknown/different platforms, it must guarantee privacy and security, it must be self-adapting/organizing in the platform, it runs distributed (local and remote), it must fulfill non-functional requirements such as performance or reliability requirements, it must be maintainable during runtime, it has to communicate with other applications (shared memory or shared nothing).
New architecture design concepts and programming paradigms for developing cloud computing applications are needed. The software architecture we propose is composed of loosely coupled components and contains in contrast to traditional software additional components to allow for specific cloud computing characteristics such as management of distributed communication, scheduling multiple instances of a component, or handling the authentication and authorization. We follow a model-based approach where we abstract from these additional components by introducing new dependencies between traditional software components with different semantics in an architecture model.
Quality is not for free. It is an emerging property of a product and must be planned from the beginning of the development process. We are developing techniques to analyze and measure certain project and product characteristics that give hints on potential problems as well as the overall quality of a system. In particular the development of automated tests covering specification models [Rum03] or the code together with the definition of software architectures that allow efficient development of tests are within our focus. These quality measurements will be available as services via the internet for development projects in the industry.
Agile development methods
At first sight model-based development and agile development techniques look contradictory. On the second look they aren't. [HR04,Rum04a,Rum04b] show how both aim to improve the efficiency of the process and the quality of the result. Putting the offered agile and model-based techniques together, synergy allows us to use the best of both worlds. We transfer existing agile and model-based techniques to industry and investigate further improvement of these methodological tools.
Automotive Software Engineering
Innovations in today's cars are to 90% induced by software functions implemented in distributed controllers using different kinds of operating systems and development tools. OEMS and suppliers are increasingly using successful principles and methods of modern and efficient software engineering for other domains. This revolution on the one hand means, modern software technology is migrating into the automotive domain, but also that SE-solutions need to be adapted to fit to automotive specific problems. Our main goals here are to assist the early phases from requirements engineering to function net based architecture (before mapping to any implementation on the control devices) and such increasing reuse, efficiency and portability, which is very important in product lines. Secondly, we are specifically interested in autonomous driving and its technical infrastructure. For this purpose we have developed framework Hesperia that enables autonmous acting in urban environments and allows to manage quality of intelligent driving algorithms relatively easy.
Nowadays buildings and facilities are equipped with a huge amount of sensors which are generating gigabytes of data per year. The information from these sensors can be used for optimizing the energy consumption and therewith the CO2 emission. The domain of mass data processing has a lot of challenges. For example a very high performance of the software tools is necessary. Our approach is to use modern software engineering techniques, like domain specific languages and generative programming to create a platform for energy optimization. The Energie Navigator is a tool that supports facility managers by monitoring their buildings. The development of a web portal(BEST Energy Project) that presents up to date energy consumptions for end-users is supported by the European Commission (CIP ICT PSP).
Domain-Specific Languages / MontiCore
One powerful technique for software development is the use of a specific notation for describing domain specific solutions. Domain specific languages (DSLs) allow the representation of information and models in a way that domain experts prefer over the use of general-purpose notations. DSLs make domain knowledge explicit and simplify the communication between domain and IT experts. MontiCore provides a framework for efficient development of DSLs [GKR+06,GKR+08]. It unifies the necessary development steps to create tools for processing DSLs, analyzing the expressed content and creating code based on the DSL. MontiCore therefore provides a powerful software development infrastructure which is available here as an online service.
Prominent research projects from Prof. Nagl (-2009)An overview over the research projects can be found here.
- Topic sorted list of most interesting publications
- Aachener Informatik-Berichte, Software Engineering / Ph.D. Theses
- Full list of publications, Part 1: 2009 - now (RWTH Aachen)
- Full list of publications, Part 2: 2004 - 2008 (TU Braunschweig)
- Full list of publications, Part 3: 1994 - 2003 (TU Munich)
- Full list of publications, Part 4: - 2008 (RWTH Aachen, Prof. Nagl)
- Bibtex file (for download)