Software Reliability for Concurrent and Distributed Systems
Led by Burcu Kulahcioglu Ozkan
Develop techniques and tools for increasing reliability of concurrent and distributed systems.
Today’s software is evolving in the direction of more concurrency (to exploit multiple cores) and decentralization (to exploit networked systems). With the increasing use of mobile devices and cloud services, the applications we use today are deployed to geo-replicated distributed systems, easily accessible from everywhere.
However, it is difficult to implement distributed systems correctly since their behavior is more complicated than classical sequential programs. The nondeterminism in the delivery order of concurrent messages, network failures, or node crashes may result in subtle executions that lead to buggy behavior. It is difficult for the programmers to consider all possible executions during the system design and implementation. The reliability of distributed systems requires different techniques than the techniques designed for sequential software.
The goal of this research line is to build program analysis, testing, and debugging methods for concurrent programs and distributed systems. Our research interests span a wide spectrum of concurrent programs: multi-threaded programs, asynchronous, event-driven, and distributed systems.
We currently focus more on testing distributed systems, asking how can we design efficient tests to detect and diagnose bugs that occur due to unexpected event orderings or faults in:
- Fault-tolerant consensus systems and blockchains
- Weakly consistent systems - that provide weak levels of consistency and isolation guarantees
- Distributed systems with microservice architecture
Martijn van Meerten (co-supervised with Annibale Panichella)
Mingyu Gao (co-supervised with Soham Chakraborty)
Yanzhuo Zhou (co-supervised with Jérémie Decouchant)
Jason Qiu (co-supervised with Stefania Dumbrava)
Related MSc Course:
- CS4405 - Analysis of Concurrent and Distributed Programs (course page)
Contact if you are interested in working on software testing, program analysis, concurrent programming, distributed systems, and blockchains.