Contact Us

CoDeTest: Comprehension, Detection and Testing via Symbolic Execution




Software is the heart of our societal infra-structure and software reliability is thus of paramount importance. Over the decades – various validation techniques for enhancing software reliability have been studied. These include: testing, debugging, program analysis, model checking, theorem proving, and various combinations of these methods.  However, (at least) three factors limit their scale / applicability.

First of all, many of the methods require a specification of intended behavior of the software. This limits the automated application of such techniques – for example, model checking requires temporal properties to be verified, and the temporal property has to be given as an input to the technique. It is widely acknowledged that in the real-life software is often devoid of any specifications. Secondly, many of the methods operate on source code. Indeed, parts of a large program may be obtained from third-parties, even say as a service downloaded from the internet. Moreover, for widely-used libraries (which are used in an application), only the binary code may be available. In other words, in the real-life source code of (parts of) a program may be unavailable. Last but not the least, almost all validation methods operate on the latest program version while ignoring its origins. Any large-scale software development goes through a substantial evolution.

In this project, we aim to build integrated analysis engines for standard programming languages like C, C++ which address these three scalability and applicability issues. Apart from enhancing software reliability, (fragments of) such analysis tools can be envisioned to enhance programmer productivity. We also discuss three specific usages of our integrated analysis engine – which we plan to pursue as part of this project. These three usages lie in software comprehension, error detection and non-invasive testing. The three specific usages include - witnessing execution of crashes, continuous software testing and understanding obfuscated software.



  • RA and RF positions have been filled.



Hercules: Reproducing Crashes in Real-World Application Binaries

Van Thuan Pham, Wei Boon Ng, Konstantin Rubinov, Abhik Roychoudhury

ACM/IEEE International Conference on Software Engineering (ICSE) 2015.



Regression Tests to Expose Change Interaction Errors

Marcel Böhme, Bruno C.d.S. Oliveira, Abhik Roychoudhury

ESEC/FSE '13, Joint meeting of ACM SIGSOFT symposium and European conference on Foundations of software engineering, 2013


+Current Members:

  • Faculty Member:

    Abhik Roychoudhury

  • Post-doctoral Research Fellow:

            Konstantin Rubinov, PhD University of Lugano Switzerland 2013, joined Oct 2013

  • PhD Students:

    • Marcel Böhme (August 2009 - ) : Testing of Evolving Programs.

    • Thuan Pham Van
  • Research Assistants
    • Mingyuan Gao, Joined Sept 2013


This project is funded by a substantial research grant from DSO Labs (2013-15). This support is gratefully acknowledged.

Contact Us
National University of Singapore   |   School of Computing   |   Ministry of Education