Research

This page describes research areas I have been involved in to date.

Software Testing

We are living in a world of software systems. It is almost impossible to imagine one day living without interacting with software systems. But what if such software systems are unreliable and even unsafe? Software testing is a promising way of improving the quality of software systems in terms of many aspects, including reliability, robustness, efficiency, maintainability, and safety. It is essential to establish proper testing strategies throughout the development of software systems. In this regard, I've been working on software testing, focusing on automated software testing, regression testing, mutation testing, and testing for AI. 

Mutation Testing

One interesting idea of software testing is to use artificially injected faults, so-called "mutants"; if a given test suite is able to detect the difference between the original program and its mutants, the test suite is "mutation-adequate", implying that it is powerful enough to detect subtle faults. I have been working on the use of mutants in several software testing tasks, such as test suite assessment and regression test case prioritisation. I further developed the idea of mutation testing to additionally consider the difference among mutants, leading to diversity-aware mutation testing.

Testing for AI

More and more software systems are integrated with Artificial Intelligence (AI), especially Machine Learning (ML) and Deep Learning (DL). However, ML/DL models are inherently different from traditional software programs; such models obtain decision logic via "training", whereas traditional programs obtain it via "programming". To address this challenge, I developed an automated test data (image) generation technique for DL models with many outputs (e.g., DNNs for facial key-point detection). Also, I developed efficient testing techniques for ML-enabled Automated Driving Systems (ADS) using surrogate models and reinforcement learning

Log Analysis

Software system execution logs provide valuable information about the runtime behaviour of the system under analysis. By analysing the logs, for example, we can detect anomalies. However, analysing semi-structured log messages (often free-formed, generated by executing log print statements in the code) makes the problem complex. I empirically investigated different log parsing techniques that automatically convert semi-structured input log messages into structured log message templates. I also provided a theoretical analysis of the relationship between log parsing and anomaly detection.