
Dr Michel Wermelinger
Senior Lecturer
School of Computing & Communications
Biography
Professional biography
Michel's broad area of teaching and research is programming and software engineering.
He is currently an academic lead for generative AI in learning, teaching and assessment for the university.
He was the Head of the Computing Department in 2012/13 and the Deputy Head of the Computing and Communications Department in 2013/14. During 2017-19 he was the deputy lead of the largest theme of the £40m Institute of Coding (IoC) and the School of Computing and Communications lead for the IoC. From 2006 to 2016, he was an Associate Lecturer (tutor) on the MSc Project.
Being fluent in German, he was an academic reviewer of the Technology Faculty of Duale Hochschule Baden-Württemberg on behalf of OU Validation Services. He was also academic reviewer for Ada, the National College for Digital Skills.
Before joining the OU, he was an assistant professor in the Computing Department of the New University of Lisbon, and a consultant to a software house, both in Portugal.
Research interests
Michel's research draws on a variety of techniques (repository mining, natural language analysis, information retrieval) to improve the understanding and practice of software evolution and maintenance and of the architectural design of software systems. Michel is also interested in data visualisation. He has proposed a novel application of concept lattices to visualise hierarchical socio-technical relationships, and developed an interactive scatterplot tool for easier exploration of data sets by non-specialists.
He is part of the Software Engineering and Design group and in particular a PI of the EPSRC project Socio-technical resilience in software development and PI of the Huawei-funded project Empirical Data-Driven Bug Localisation in Software Development. He was a member of the £16m smart city MK:Smart project, which included the Urban Data School, a data literacy project in schools using smart city data.
He co-authored over 100 peer-reviewed publications and supervised 7 PhD students to conclusion.
Teaching interests
Michel's teaching is centred on algorithms and programming. In particular he
- co-designed and wrote the text of a free interactive activity explaining what algorithms are, used by an educational publisher in a Computing A-level worksheet;
- consulted for a BBC 4 programme (and corresponding iWonder guide) on algorithms, which was nominated for a Learning On Screen award;
- co-authored a free pack of leaflets on coding, algorithms, and the history of computing, which is now available as a digital file (the 13,000 print copies have been distributed);
- wrote a free online 'hour of code' activity to introduce programming and reported on his experience of using a web-based IDE;
- was the main author of the Learn to Code for Data Analysis MOOC, now available (without discussion forum) on OpenLearn, and reported on the pedagogical approach taken;
- was the production chair of the new edition of Algorithms, Data Structures and Computability;
- authored two Python programming units for Introduction to Computing and IT 2 and reported on the pattern-oriented approach he developed;
- was a member of the Open Networking Lab development team.
Projects
SAUSE: Secure, Adaptive, Usable Software Engineering
In the last decade, the role of software engineering has changed rapidly and radically. Globalisation and mobility of people and services, pervasive computing, and ubiquitous connectivity through the Internet have disrupted traditional software engineering boundaries and practices. People and services are no longer bound by physical locations. Computational devices are no longer bound to the devices that host them. Communication, in its broadest sense, is no longer bounded in time or place. The Software Engineering & Design (SEAD) group at the Open University (OU) is leading software engineering research in this new reality that requires a paradigm shift in the way software is developed and used. This platform grant will grow and sustain strategic, multi-disciplinary, crosscutting research activities that underpin the advances in software engineering required to build the pervasive and ubiquitous computing systems that will be tightly woven into the fabric of a complex and changing socio-technical world. In addition to sustaining and growing the SEAD group at the OU and supporting its continued collaboration with the Social Psychology research group at the University of Exeter, the SAUSE platform will also enable the group to have lasting impact across several application domains such as healthcare, aviation, policing, and sustainability. The grant will allow the team to enhance the existing partner networks in these areas and to develop impact pathways for their research, going beyond the scope and lifetime of individual research projects.
Socio-technical resilience in software development (STRIDE)
The project will investigate resilience and automation in the socio-technical system that supports software development, which includes people , technical infrastructure, processes and artefacts . Recognising that users are developers and developers are users in different contexts, we’d like to investigate two communities that represent different points along that dimension: commercial software development community and professional end user development community.
Empirical Data-Driven Bug Localisation in Software Development
In software engineering, developers must respond quickly to the change requests raised by product customers. For example, when a bug report arrives, developers need to locate relevant code to patch the bug. External to the product teams, however, customers can only describe the bug using their own (natural) language, with limited understanding of the software. Such a description may not reflect the developers’ rich experience and their deeper understanding of the software architecture, design, data structures, algorithms, etc. Hence substantial amount of time must be wasted on triaging, from a vast repository, where to start the investigation. It is like searching needles in a haystack [1]. To tackle this problem, existing work on bug localisation employs various heuristics in the natural language description of bugs and code to achieve state-of-the-art performance on information retrieval metrics, such as precision/recall and top-K [1]. Precision measures how many pieces of recommended code are indeed related to an average bug report; recall measures how many pieces of code known relevant to a bug report have been recommended; and top-K measures how many out of the K recommended pieces of code are relevant to a bug report. However, existing research methods developed since Zhou et al. [2] are competing against a benchmark of only 4~6 medium-sized open-source Java projects mostly taken from Eclipse development. Although various information retrieval approaches have been attempted, and compared on top of this benchmark, there is a lot of uncertainty as to how they apply to Huawei’s contexts. In this project, we will tackle these challenges with practicability and adoptability in mind.
EPSRC DTP - Pair Programming Project with Toshiba
In pair programming, two people work together on the same problem, collaboratively writing code (in a shared window or screen) whilst communicating with each other (via voice or text, face-to-face or remotely). Pair programming is used by professional software developers (Goth, 2016) and has also been shown to help beginning programmers improve their skills. For example, McDowell et al. (2002) found that pair programming increases retention and helps students become better programmers. Also, pair programming was found particularly beneficial for women, helping them persist in computer science (Werner, 2004). The practicalities involved in setting up pair programming sessions can be a barrier to adopting it, both in professional and educational settings (especially distance learning settings). The proposed research explores the use of chatbots to address this issue. Chatbots are dialogue systems that respond to users questions and requests with natural language responses. Task-oriented chatbots are used in business applications while open-domain chatbots are used for entertainment. Katz et al. (2014) explore use of chatbots in an education task. Our work will advance dialogue systems research by applying it in the context of pair programming. Research topic and approach Building on the research strengths in dialogue modelling, question generation, pair programming and multi-modality at the OU and Toshiba, we propose to develop and investigate an AI buddy for pair programming, which can collaborate with a software developer on solving a programming problem (either from scratch or by completing a skeleton program). The AI should be able to: - detect if the developer is stuck and requires help - make contextual suggestions and provide hints - question the developer about the rationale for their programming and problem solving decisions - thereby helping them self-evaluate their work - generate contributions appropriate for the developer's emotional state A distinctive aspect of the project will be the use of multimodal communication. Depending on the strengths of the PhD applicant one or more of the following modalities will be used by the AI to interact with the student: - Spoken voice: analysis (content of what the student says, but also emotion) & synthesis (of the AIs dialogue contributions) - Webcam video to monitor: emotion, focus, level of understanding, cognitive load, etc. - Text-based chat (as an alternative to spoken interaction) - Embodied computer-animated representation of the AI buddy (Andrist 2019)
Publications
Book
Fundamental Approaches to Software Engineering: 7th International Conference Proceedings (2004)
Book Chapter
Some issues in the 'archaeology' of software evolution (2011)
Empirical studies of open source evolution (2008)
Enhancing dependability through flexible adaptation to changing requirements (2004)
A mathematical semantics for architectural connectors (2003)
Journal Article
Discourse annotation - Towards a dialogue system for pair programming (2023)
Evaluating the effectiveness of risk containers to isolate change propagation (2021)
Locating bugs without looking back (2018)
Assessing architectural evolution: a case study (2011)
Commentary on ‘Software architectures and mobility: A roadmap’ (2010)
The CommUnity Workbench (2007)
Learning software engineering at a distance (2006)
Modelling the GSM handover protocol in CommUnity (2005)
Higher-order architectural connectors (2003)
A Graph Transformation Approach to Software Architecture Reconfiguration (2002)
Towards a chemical model for software architecture reconfiguration (1998)
Presentation / Conference
Human-Machine Teaming and Team Effectiveness in AI tools for Software Engineering (2025)
Annotation Needs for Referring Expressions in Pair-Programming Dialogue (2024)
Co-Designing Resilient Socio-Technical Software Systems (2024)
Discussing the Changing Landscape of Generative AI in Computing Education (2024)
An Environment for Algorithmic Essays (2024)
Checking Conformance to a Subset of the Python Language (2023)
The Implications of Large Language Models for CS Teachers and Student (2023)
Using a Virtual Computing Lab to Teach Programming at a Distance (2023)
Accounting for socio-technical resilience in software engineering (2023)
Using GitHub Copilot to Solve Simple Programming Problems (2023)
Informed consent and participant recruitment in studies of software practice (2022)
Investigating Remote Pair Programming In Part-Time Distance Education (2021)
Remote Pair Programming (2021)
Visualizing Sets and Changes in Membership Using Layered Set Intersection Graphs (2020)
Learning to program: from problems to code (2019)
An Open Networking Lab for practical open education (2019)
Risk Containers – A Help or Hindrance to Practitioners? (2019)
Open Networking Lab: online practical learning of computer networking (2018)
The Open Networking Lab: Hands-on Vocational Learning in Computer Networking (2018)
Wide, long, or nested data? Reconciling the machine and human viewpoints (2018)
Structuring Spreadsheets with the “Lish” Data Model (2017)
Software Architecture Risk Containers (2017)
An Evaluation of Design Rule Spaces as Risk Containers (2016)
Locating Bugs without Looking Back (2016)
Some future scenarios for ‘in the wild’ visualisations (2015)
Investigating naming convention adherence in Java references (2015)
Teaching software systems thinking at The Open University (2015)
An architectural evolution dataset (2015)
A survey of the forms of Java reference names (2015)
Developing a domain-specific plug-in for a modelling platform: the good, the bad, the ugly (2013)
Issues in representing domain-specific concerns in model-driven engineering (2013)
INVocD: Identifier Name Vocabulary Dataset (2013)
The Challenge of Software Complexity (2013)
Software evolution prediction using seasonal time analysis: a comparative study (2012)
Mining Java Class Naming Conventions (2011)
Improving the tokenisation of identifier names (2011)
Relating Developers’ Concepts and Artefact Vocabulary in a Financial Software Module (2011)
Challenges in Model-Based Evolution and Merging of Access Control Policies (2011)
Exploring the Influence of Identifier Names on Code Quality: An empirical study (2010)
Tracking clones' imprint (2010)
Relating identifier naming flaws and code quality: An empirical study (2009)
Managing assumptions during agile development (2009)
Design Principles in Architectural Evolution: a Case Study (2008)
Assessing the effect of clones on changeability (2008)
Graph-centric tools for understanding the evolution and relationships of software structures (2008)
A model-driven approach to extract views from an architecture description language (2007)
Challenges in Software Evolution (2005)
A Prolog toolkit for formal languages and automata (2005)
A survey of self-management in dynamic software architecture specifications (2004)
Architectural primitives for distribution and mobility (2002)
Maintaining software through intentional source-code views (2002)
A Graph based architectural (re)configuration language (2001)
Towards a software evolution benchmark (2001)
A different perspective on canonicity (1997)
A hierarchic architecture model for dynamic reconfiguration (1997)
Conceptual graphs and first-order logic (1995)
Basic conceptual structures theory (1994)
Report
Depiction of Additional Node-related Elements in Graph-based Software Visualisations (2008)
Thesis
Specification of Software Architecture Reconfiguration (1999)
Working Paper
Best Practices in using Technological Infrastructures (2020)