Finding and fixing faults
作者:
Highlights:
•
摘要
Knowing that a program has a bug is good, knowing its location is better, but a fix is best. We present a method to automatically locate and correct faults in a finite state system, either at the gate level or at the source level. We assume that the specification is given in Linear Temporal Logic, and state the correction problem as a game, in which the protagonist selects a faulty component and suggests alternative behavior. The basic approach is complete but as complex as synthesis. It also suffers from problems of readability: the correction may add state and logic to the system. We present two heuristics. The first avoids the doubly exponential blowup associated with synthesis by using nondeterministic automata. The second heuristic finds a memoryless strategy, which we show is an NP-complete problem. A memoryless strategy corresponds to a simple, local correction that does not add any state. The drawback of the two heuristics is that they are not complete unless the specification is an invariant. Our approach is general: the user can define what constitutes a component, and the suggested correction can be an arbitrary combinational function of the current state and the inputs. We show experimental results supporting the applicability of our approach.
论文关键词:Debugging,Fault localization,Fault correction,Verification,Games,Controller synthesis,Linear temporal logic,Memoryless strategies,Repair
论文评审过程:Received 17 November 2005, Revised 17 August 2007, Accepted 6 May 2011, Available online 13 May 2011.
论文官网地址:https://doi.org/10.1016/j.jcss.2011.05.005