Skip to main content

Software Debugging and Testing using the Abstract Diagnosis Theory

Publication Type
Year of Publication
Conference/Journal Name
ACM SIGPLAN/SIGBED Conference on Languages, Compilers, Tools and Theory for Embedded Systems (LCTES)
In this paper, we present a notion of observability and controllability in the context of software testing and debugging. Our view of observability is based on the ability of developers, testers, and debuggers to trace back a data dependency chain and observe the
value of a variable by starting from a set of variables that are naturally observable (e.g., input/output variables). Likewise, our view
of controllability enables one to modify and control the value of a variable through a data dependency chain by starting from a set of
variables that can be modified (e.g., input variables). Consequently, the problem that we study in this paper is to identify the minimum
number of variables that have to be made observable/controllable in order for a tester or debugger to observe/control the value of an-
other set of variables of interest, given the source code. We show that our problem is an instance of the well-known abstract diagnosis problem, where the objective is to find the minimum number of faulty components in a digital circuit, given the system description and value of input/output variables. We show that our problem is NP-complete even if the length of data dependencies is at most 2. In order to cope with the inevitable exponential complexity, we propose a mapping from the general problem, where the length of data dependency chains is unknown a priori, to integer linear programming. Our method is fully implemented in a tool chain for MISRA-C compliant source codes. Our experiments with several real-world applications show that in average, a significant number of debugging points can be reduced using our methods. This result is our motivation to apply our approach in debugging and instrumentation of embedded software, where changes must be minimal as they can perturb the timing constraints and resource consumption. Another interesting application of our results is in data logging of non-terminating embedded systems, where auxillary data storage
devices are slow and have limited size.