Testability Measurements for Data Flow Designs
METRICS '97 Proceedings of the 4th International Symposium on Software Metrics
Towards Systematic Testing of Distributed Real-Time Systems
RTSS '99 Proceedings of the 20th IEEE Real-Time Systems Symposium
Replay Debugging of Real-Time Systems Using Time Machines
IPDPS '03 Proceedings of the 17th International Symposium on Parallel and Distributed Processing
Analyzing Testability on Data Flow Designs
ISSRE '00 Proceedings of the 11th International Symposium on Software Reliability Engineering
Testability Analysis Applied to Embedded Data-flow Software
QSIC '03 Proceedings of the Third International Conference on Quality Software
LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
MiBench: A free, commercially representative embedded benchmark suite
WWC '01 Proceedings of the Workload Characterization, 2001. WWC-4. 2001 IEEE International Workshop
Testability Analysis of Data-Flow Software
Electronic Notes in Theoretical Computer Science (ENTCS)
Optimal instrumentation of data-flow in concurrent data structures
OPODIS'11 Proceedings of the 15th international conference on Principles of Distributed Systems
Hi-index | 0.01 |
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 another 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 axillary data storage devices are slow and have limited size.