algorithmic debugging is a semi-automatic debugging technique that abstracts the operational details of computations, allowing the programmers to debug their code from an abstract point of view. However, its use in pr...
详细信息
algorithmic debugging is a semi-automatic debugging technique that abstracts the operational details of computations, allowing the programmers to debug their code from an abstract point of view. However, its use in practice is still marginal, and one of the reasons is the lack of precision of this technique when reporting errors (current algorithmic debuggers do not point an expression or line as buggy, but they point a whole procedure/function/method as containing the bug). In this paper, we make a step forward to overcome this problem. We identify two specific causes of that problem in the standard formulation and implementations of algorithmic debugging, and we present a reformulation to solve both problems. We show that the novel ideas included in the reformulation proposed cannot be supported by the standard internal data structures (such as the Execution Tree) used in this technique and, hence, a generalisation of the standard definitions and algorithms is needed. The reformulation has been done in a language independent manner to make it useful and reusable in different programming languages. (C) 2018 Elsevier Inc. All rights reserved.
Program logic controllers are widely used in industry either to control the manufacturing process or the processing plant. Thus, any faulty behavior in the program logic controller will have a crucial effect on both o...
详细信息
ISBN:
(纸本)9781728118208
Program logic controllers are widely used in industry either to control the manufacturing process or the processing plant. Thus, any faulty behavior in the program logic controller will have a crucial effect on both of the industry or/and labors. Therefore, it is important to be able to detect and diagnose any fault in the program logic controller. This paper introduces a new debugging technique;it combines both of the program slicing and the algorithmic debugging techniques. This is attained by making use of the instruction list programming to perform the debugging techniques and then it is converted into a control flow graph before applying the new combination between the slicing and algorithmic debugging. Through the use of these techniques, the debugger can utilize the feedback from the user to detcet the fault and find the source of this fault.
Localizing defects in a faulty software is a notoriously difficult activity. Researchers proposed several techniques to help developers to locate defects. One of these techniques is algorithmic debugging, which consis...
详细信息
ISBN:
(纸本)9781450376518
Localizing defects in a faulty software is a notoriously difficult activity. Researchers proposed several techniques to help developers to locate defects. One of these techniques is algorithmic debugging, which consists on executing the defective program, building an execution tree with the subcomputations, asking questions to the developer about the correctness of some specific subcomputations, and pruning the search space according to the answers to those questions. However, depending on the complexity of the program, the number of questions can be high, increasing the duration of the debug session. In this work we propose DebugProv, an algorithmic debugging approach for Python programs that enhances the execution tree with provenance to reduce the number of necessary questions to locate the defect, and, consequently, reduce the duration of debug sessions. We evaluated our technique over different programs and found that it was able to reduce the number of questions in 25.26%, on average.
algorithmic debugging is a technique proposed in 1982 by E.Y. Shapiro in the context of logic programming. This survey shows how the initial ideas have been developed to become a widespread debugging schema fitting ma...
详细信息
algorithmic debugging is a technique proposed in 1982 by E.Y. Shapiro in the context of logic programming. This survey shows how the initial ideas have been developed to become a widespread debugging schema fitting many different programming paradigms and with applications out of the program debugging field. We describe the general framework and the main issues related to the implementations in different programming paradigms and discuss several proposed improvements and optimizations. We also review the main algorithmic debugger tools that have been implemented so far and compare their features. From this comparison, we elaborate a summary of desirable characteristics that should be considered when implementing future algorithmic debuggers.
Existing algorithmic debuggers for Haskell require a transformation of all modules in a program, even libraries that the user does not want to debug and which may use language features not supported by the debugger. T...
详细信息
ISBN:
(纸本)9781450334686
Existing algorithmic debuggers for Haskell require a transformation of all modules in a program, even libraries that the user does not want to debug and which may use language features not supported by the debugger. This is a pity, because a promising approach to debugging is therefore not applicable to many real-world programs. We use the cost centre stack from the Glasgow Haskell Compiler profiling environment together with runtime value observations as provided by the Haskell Object Observation Debugger (HOOD) to collect enough information for algorithmic debugging. Program annotations are in suspected modules only. With this technique algorithmic debugging is applicable to a much larger set of Haskell programs. This demonstrates that for functional languages in general a simple stack trace extension is useful to support tasks such as profiling and debugging.
There are cases in which the literal interpretation of statutes may lead to counterintuitive consequences. When such cases go to high courts, judges may handle these counterintuitive consequences by identifying proble...
详细信息
There are cases in which the literal interpretation of statutes may lead to counterintuitive consequences. When such cases go to high courts, judges may handle these counterintuitive consequences by identifying problematic rule conditions. Given that the law consists of a large number of rule conditions, it is demanding and exhaustive to figure out which condition is problematic. For solving this problem, our work aims to assist judges in civil law systems to resolve counterintuitive consequences using logic program representation of statutes and Legal debugging. The core principle of Legal debugging is to cooperate with a user to find a culprit, a root cause of counterintuitive consequences. This article proposes an algorithm to resolve a culprit. Since the statutes are represented by logic rules but changes in law are initiated by cases, we adopt a prototypical case with judgement specified by a set of rules. Then, to resolve a culprit, we reconstruct a program so that it provides reasons as if we applied case-based reasoning to a new set of prototypical cases with judgement, which include a new set of facts relevant to a considering case.
Literal interpretation on laws may produce unexpected consequences. They are difficult to be recognized unless exceptional cases were taken to the court. The court may decide a literal interpretation as exceptional, a...
详细信息
ISBN:
(纸本)9783030316051;9783030316044
Literal interpretation on laws may produce unexpected consequences. They are difficult to be recognized unless exceptional cases were taken to the court. The court may decide a literal interpretation as exceptional, and then they have to identify which rule is a source of exception. To assist the court, we proposed an idea called legal debugging, to find out which rule condition, called a culprit, causes unexpected consequences in such exceptional cases. We adapt the algorithmic program debugging with consideration of characteristics in reasoning in judgement, such as non-recursive stratified structures and factual propositions in order to find a culprit at last. This paper presents legal debugging in propositional Prolog as well as PROLEG (PROlog based LEGal reasoning support system) specialized for legal reasoning. An example of legal debugging that interacts with a user and finds a culprit is also shown under the PROLEG representation of the case adapted from the real Supreme Court case.
One of the most automatic debugging techniques is algorithmic debugging because it allows us to debug a program without the need to inspect the source code. In order to find a bug, an algorithmic debugger asks questio...
详细信息
One of the most automatic debugging techniques is algorithmic debugging because it allows us to debug a program without the need to inspect the source code. In order to find a bug, an algorithmic debugger asks questions to the programmer about the correctness of subcomputations in an execution. Reducing the number and complexity of these questions is an old objective in this field. Recently, an strategy for algorithmic debuggers that minimizes the number of questions has been released. This new strategy is called Optimal Divide and Query and, provided that all questions can be answered, it finds any bug in the source code with a minimum set of questions. In this work we discuss the implementation of such a strategy in different algorithmic debugging architectures.
A debugging algorithm in equivalent transformation (ET) model is proposed. The proposed algorithm returns a bug rule in a program by receiving new rules from oracles (oracle rules). We construct theory about correctne...
详细信息
A debugging algorithm in equivalent transformation (ET) model is proposed. The proposed algorithm returns a bug rule in a program by receiving new rules from oracles (oracle rules). We construct theory about correctness of the proposed algorithm, present two strategies with respect to the requests of oracle rules, report examples to show the property of the proposed algorithm, and compare the proposed algorithm with the other debugging algorithms in the ET model.
algorithmic debugging is a debugging technique that has been extended to practically all programming paradigms. Roughly speaking, the technique constructs an internal representation of all (sub)computations performed ...
详细信息
algorithmic debugging is a debugging technique that has been extended to practically all programming paradigms. Roughly speaking, the technique constructs an internal representation of all (sub)computations performed during the execution of a buggy program;and then, it asks the programmer about the correctness of such computations. The answers of the programmer guide the search for the bug until it is isolated by discarding correct parts of the program. After twenty years of research in algorithmic debugging many different techniques have appeared to improve the original proposal. Surprisingly, no study exists that joins together all these techniques and compares their advantages and their performance. This article presents a study that compares all current algorithmic debugging techniques and analyzes their differences and their costs. The research identifies the dimensions on which each strategy relies. This information allows us to combine the strong points of different strategies. (c) 2011 Elsevier Ltd. All rights reserved.
暂无评论