Today’s software is evolving in the direction of more concurrency and decentralization. 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, the increased complexity of the software systems makes it more difficult to reason about possible behaviors of a system and to produce correct software.

It is challenging 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 those designed for sequential software.

This research line aims to build program analysis, testing, and debugging methods for concurrent programs and distributed systems. Our research interests span a broad spectrum of concurrent programs: multi-threaded, asynchronous, event-driven, and distributed systems.

We aim to build software analysis and testing methods for including (but not limited to):

  • Decentralized consensus systems and blockchains
  • Distributed systems with weak consistency and weak isolation
  • Distributed systems with microservice architecture
  • Shared-memory multicore programs

Recent Awards:

  • CS4405 - Analysis of Concurrent and Distributed Programs (course page)
  • IN4315 - Software Architecture (course page)

Contact if you are interested in working on software testing, program analysis, concurrent programming, distributed systems, and blockchains.