Research Assistant

Imperial College London


I am a research assistant at the Systems Reliability Group at Imperial College London, where I research how to best ensure that software works as it should. My specific focus is on the applicability of Symbolic Execution to real world software.

Before that, I was a researcher and head of Systems Analysis at the Chair of Communication and Distributed Systems at RWTH Aachen University, where I worked on understanding the testability of distributed systems.



  • Automated Software Testing
  • Symbolic Execution
  • Concolic Execution
  • Program Analysis


  • MSc in Computer Science

    RWTH Aachen University

  • BSc in Computer Science

    RWTH Aachen University

Recent Posts

Zero Knowledge Proof using Hamiltonian Cycles

The last post explored the idea of Zero Knowledge Proofs (ZKPs) using simple examples. Now it is time to take a deep dive into a fully functional ZKP based on a mathematical problem instead of hidden doors amongst neighboring houses. The basic problem is very simple: A Hamiltonian path is a path through a given graph which visits every vertex exactly once. Hamiltonian paths are related1 to the better known Eulerian paths, which visit every edge exactly once.

Zero Knowledge Proofs of Knowledge

Proving one’s identity is hard business. Part of that hardness comes from philosophical questions like “If I stop liking computers, does that future me constitute a different person?”. In a way, some of these problems are repeated in the biometrics area, which have to distinguish between “real identities” and things that may look the same to their sensors, or even people that lose the things that provided their identity in accidents.

Testing for Bugs Not Usually Caught by Tests

One of the core ideas in testing is to use small pieces of code that verify the target program/module/function/etc exhibits a certain behavior. These small snippets of code are usually termed unit tests or simply tests. While it is hard to underestimate their importance, they can only test what can be expressed as program code. It is borderline1 impossible however to ensure that memory leaks or buffer overruns did not happen when running the test suite — at least that is the case in programming languages that do not contain such checks as a matter of course.