Research

My research is in software engineering. I am interested in capturing existing good practice and domain knowledge in automatable and analysable forms to improve software quality. This is also known as abstraction engineering: the creation and manipulation of appropriate abstractions for knowledge capture, analysis, and software engineering. To this end, I study:
- Principled simulation engineering: The use of domain-specific modelling languages for the systematic engineering of simulations and digital twins, to support trust in these simulations and their results. Applications include, for example, healthcare and biology.
- Foundations of model-driven engineering: Model-driven engineering is a particular approach for abstraction engineering in software development. My research here focuses on:
- Finding optimal models. Check out our tools MDEOptimiser and Acapulco. This lead to more foundational work on consistency-preservation in graph transformations.
- Techniques for modularising models and transformations to enable modular reasoning and reuse. Example work includes work on Reuseware and on the use of GTS morphisms for DSL modularisation.
- Computer science education: In particular, how we teach programming and software development to learners of all ages and how this can be improved. Example work includes research on the use of software frameworks in UG teaching, automated assessment of programming tasks, and work on concept development in learners of programming.