We advance the science and practice of building secure and reliable software systems, developing rigorous methods of software analysis, formal verification, and testing across the full spectrum of software development lifecycle.
We are shaping the future of dependable software systems through advances in software engineering, formal verification, automated testing and program analysis. Our researchers develop rigorous methods and tools that improve the security, reliability and correctness of software across the entire development lifecycle. By combining theory with practical engineering, we help build reliable systems for critical domains including cloud computing, cybersecurity, artificial intelligence, healthcare and autonomous technologies.
Our research spans across multidisciplinary research
Software systems fail in ways that are complex and difficult to understand. Our research develops automated techniques for testing, analysing, and debugging software systems, with the goal of helping developers resolve faults earlier in the development process. We work on problems spanning fuzz testing, vulnerability detection, and automated program repair, particularly in large-scale and security-critical software systems. This involves a range of techniques, including that automatically generate useful test inputs, prioritise failures that are most important, and help developers understand the underlying causes of software defects with less manual effort. Overall, our research will improve the reliability and dependability of modern software systems.
This research aims to improve the reliability and maintainability of software systems by advancing automated testing and debugging techniques. It enables faster detection and correction of software faults, reducing development costs and improving user trust. Everyday impacts include more stable applications, fewer system outages, and safer software systems across industries such as banking, healthcare, transportation, and cloud computing.
Dr Hong Jin Kang, Dr Rahul Gopinath, Dr Xi Wu, Dr Liyi Zhou
Our research develops rigorous mathematical and logical techniques to ensure software systems behave correctly, safely, and reliably. This work supports the broader goal of building trustworthy digital infrastructure for domains where failures can have significant consequences, including healthcare, finance, transportation, and critical infrastructure. By combining theoretical foundations with practical tools, we help organisations increase confidence in the correctness and dependability of their software systems.
We investigate methods for formally specifying software behaviour and proving that implementations satisfy these specifications. This includes model checking, theorem proving, symbolic reasoning, and verification frameworks for concurrent, distributed, and safety-critical systems. Researchers also study verification techniques for emerging technologies such as AI-enabled systems and autonomous platforms.
Projects involve scalable verification tools that integrate into modern software engineering workflows, allowing developers to identify subtle design and implementation errors before deployment. Applications include verifying security protocols, ensuring compiler correctness, validating embedded systems, and proving the reliability of mission-critical software.
This research aims to reduce the risk of software failures by providing rigorous evidence that systems behave as intended under specified conditions. It helps developers identify subtle errors before deployment and strengthens confidence in software that supports essential services. Everyday impacts include more dependable digital infrastructure, safer medical and transport systems, and stronger assurance that critical software meets its safety and security requirements.
Dr Sasha Rubin, Dr Xi Wu, Professor Alan Fekete
Software faults are inevitable, particularly in large and evolving systems. Our research investigates techniques for automatically detecting and repairing faults, with the goal of building software systems that can recover from failures with minimal human intervention. We develop approaches that monitor system behaviour, identify anomalous executions, and generate repairs or recovery strategies at runtime. Our work draws on both AI and formal methods to support reliable adaptation in dynamic environments, with a particular focus on improving the robustness and resilience of large-scale software systems.
This research aims to make software systems more resilient by enabling faster diagnosis, repair, and recovery when faults occur. It can reduce service disruptions and maintenance effort, helping organisations keep essential systems running as software and operating conditions change. Everyday impacts include shorter outages, more reliable online services, and less time spent waiting for software problems to be resolved.
Dr Rahul Gopinath, Dr Hong Jin Kang
Modern software systems operate in increasingly adversarial environments with evolving cyber threats. Our research develops techniques for identifying and mitigating security vulnerabilities across the software lifecycle, spanning secure design, threat modelling, automated vulnerability analysis, and attack detection. We investigate approaches for improving strengthening software supply chain security and detecting security flaws before they can be exploited in practice. We are also interested in the security challenges introduced by emerging technologies such as AI systems, cloud platforms, and IoT ecosystems, where software complexity and attack surfaces continue to grow.
This research aims to strengthen software security by helping developers identify and address vulnerabilities before attackers can exploit them. It supports more secure applications and software supply chains, reducing the risk of data breaches and disruption to essential services. Everyday impacts include better protection of personal information, more secure online transactions, and greater confidence in the digital systems people rely on.
Dr Rahul Gopinath, Dr Hong Jin Kang, Dr Liyi Zhou, Dr Xi Wu
AI is increasingly changing how software is developed and maintained. Our research explores methods of better supporting developers across the entire software engineering lifecycle, including code generation, defect detection, automated testing, and program understanding. We build systems that automate repetitive engineering tasks, reason over large codebases, and assist developers in making decisions. A major focus of our work is ensuring that these techniques remain reliable and practically useful in real-world settings.
This research aims to improve developer productivity and software quality through reliable AI assistance. By reducing repetitive work and helping developers understand, test, and maintain complex code, it can free up time for design and problem-solving. Everyday impacts include faster delivery of software improvements, more timely fixes, and applications that better meet users’ needs.
Dr Hong Jin Kang, Dr Liyi Zhou