Track E: Formal Methods and Software Engineering
How to design systems that work? The Formal Methods and Tools (FMT) and Software Engineering (SE) groups have an outstanding international track record in developing novel techniques, languages, tools, and theories that help developers making high quality software and software designs; in particular correct, robust, well-structured, and easy to evolve or adapt. In this track, you will contribute to this research via a BSc research project.
Your project will typically involve:
• development of new concepts or theory, eg new algorithms, data structures, language constructs, theorems, etc and/or.
• programming, contribution to the development of one of the many tools in the FMT ande SE groups and/or
• case studies, trying out a new tool or theory on one or more practical examples.
Typical topics include, but are not limited to:
• Model checking checks if a program model meets its desired properties, e.g. if an error or illegal state is never reached; or that each request is serviced. Model checking algorithms are typically based on smart graph-search algorithms. We consider a wide variety of flavors, e.g.: multi-core model checking, software model checking and stochastic model checking.
• Graph transformations analyze data structures by transforming one graph into another one. In this way, you obtain graphs whose nodes are graphs themselves.
• Model-based Testing concerns techniques for automatic test generation, execution and evaluation.
• Software composition techniques relates to support in methods, notations and languages for composing large systems from smaller parts. Advanced examples include aspect-orientation, composition filters, and 'free composition'.
• Service-oriented architectures aim at composing systems from individual services,
• Traceability is the ability to trace requirements to the design and implementation of software
• Model-driven engineering (MDE) focuses on creating and exploiting domain models (i.e. abstract representations of knowledge from a particular application domain), and using those to create (often -partially- generate) implementations.
• Language engineering is the process of desiging and implementing programming languages, either general purpose, or domain-specific (DSLs)
Concrete project descriptions can be found at:
Depending on the topic you choose, you will use techniques that you learned in courses like Basismodellen (BaMi), Formal Methods in Software Engineering (FMSE), , Algorithms, Datastructures, and Complexity (ADC), Software Engineering Models (SEM), and XML Technologies (XTEC).