A computation tree of a program execution describes computations of functions and their dependencies. A computation tree describes how a program works and is at the heart of algorithmic debugging. To generate a comput...
详细信息
ISBN:
(纸本)9781450342612
A computation tree of a program execution describes computations of functions and their dependencies. A computation tree describes how a program works and is at the heart of algorithmic debugging. To generate a computation tree, existing algorithmic debuggers either use a complex implementation or yield a less informative approximation. We present a method for lazy functional languages that requires only a simple tracing library to generate a detailed computation tree. With our algorithmic debugger a programmer can debug any Haskell program by only importing our library and annotating suspected functions.
A computation tree of a program execution describes computations of functions and their dependencies. A computation tree describes how a program works and is at the heart of algorithmic debugging. To generate a comput...
详细信息
A computation tree of a program execution describes computations of functions and their dependencies. A computation tree describes how a program works and is at the heart of algorithmic debugging. To generate a computation tree, existing algorithmic debuggers either use a complex implementation or yield a less informative approximation. We present a method for lazy functional languages that requires only a simple tracing library to generate a detailed computation tree. With our algorithmic debugger a programmer can debug any Haskell program by only importing our library and annotating suspected functions.
This paper presents a proposal for debugging deductive database programs. Although inspired in the logic programming paradigm, these programs have the particularity of involving large sets of data. In this context, de...
详细信息
ISBN:
(纸本)9781450335164
This paper presents a proposal for debugging deductive database programs. Although inspired in the logic programming paradigm, these programs have the particularity of involving large sets of data. In this context, debugging tools employed usually in logic programs, such as traditional trace debuggers, become impractical. Our technique is based on the principles of algorithmic debugging but adapted to the particularities of the deductive database query language Datalog. The debugging process starts when the user detects an initial erroneous result. Then, the debugger asks questions about the validity/nonvalidity of some intermediate results until a bug is located. The debugger allows the user to report the existence of wrong or missing answers. This information is employed for simplifying the following questions using different forms of slicing. During the debugging process the information provided by the user or inferred by the debugger is stored in the form of constraints in a CHR program that combines all the data in order to detect the source of the error as soon as possible. The debugger has been implemented as part of the Datalog system DES.
This paper proposes an algorithm for checking incorrectness of a rule in equivalent transformation programs. Incorrect rules in programs can be detected without having to execute the program by applying the proposed a...
详细信息
This paper proposes an algorithm for checking incorrectness of a rule in equivalent transformation programs. Incorrect rules in programs can be detected without having to execute the program by applying the proposed algorithm to each rule one by one. Incorrectness of a rule can be shown by this algorithm without having to consider interrelations with other rules. Programmers can know if a rule needs to be corrected prior to trying to solve large-scale problems. This leads to a remarkable cost reduction in the construction of correct programs.
algorithmic debugging is a semi-automatic debugging technique which is based on the answers of an oracle (usually the programmer) to a series of questions generated automatically by the algorithmic debugger. The techn...
详细信息
algorithmic debugging is a semi-automatic debugging technique which is based on the answers of an oracle (usually the programmer) to a series of questions generated automatically by the algorithmic debugger. The technique typically traverses a record of the execution-the so-called execution tree-which only captures the declarative aspects of the execution and hides operational details. In this work we review and compare the most important algorithmic debuggers of different programming paradigms. In the study we analyze the features incorporated by current algorithmic debuggers, and we identify some features not supported yet by any debugger. We then compare all the debuggers giving rise to a map of the state of the practice in algorithmic debugging.
We propose a higher-order logical framework for declarative programming as an extension to the setting of the simply typed lambda calculus of a first-order rewriting logic, where programs are now presented by conditio...
详细信息
ISBN:
(纸本)9781605585680
We propose a higher-order logical framework for declarative programming as an extension to the setting of the simply typed lambda calculus of a first-order rewriting logic, where programs are now presented by conditional pattern rewrite systems on lambda abstractions. We use this new logical framework to obtain a natural model-theoretic semantics from traditional theories in higher-order declarative (functional and logic) programming, and we provide a fixpoint semantics that matches the pattern model of a program as the least fixpoint of an operator defined over pattern algebras. We use this higher-order semantic framework as a basis for the verification of declarative programs and the development of efficient algorithmic debugging techniques. Our debugging approach proceeds by exploring an abridged computational tree built on a higher-order proof calculus with A-abstractions that provides a purely declarative view of the computation, in order to detect a function rule that is incorrect in the intended model of the program's semantics. For verification purposes, our higher-order logical framework can be mapped into higher-order logic programming, and we can use this translation as a starting point to explore how to prove properties valid in the least pattern model of a program by means of different existing interactive proof assistants, as the Isabelle theorem prover.
Attribute grammars provide a formal means to specify the semantics of context free grammars. In this work, we propose a method to debug attribute grammars by applying algorithmic debugging to the paradigm of attribute...
详细信息
Attribute grammars provide a formal means to specify the semantics of context free grammars. In this work, we propose a method to debug attribute grammars by applying algorithmic debugging to the paradigm of attribute grammars. The technique of algorithmic debugging uses the data flow of a program to debug it rather than stepping through its source code thereby making it suitable for declarative platforms like attribute grammars. In a debugging session, dependencies between attributes are obtained and used to construct an execution tree which is then traversed by the debugger based on interactions with the user. The debugger asks the user questions about the validity of a node in the execution tree and about the search space to be explored. Based on the user's response to the questions the debugger identifies the incorrect equation in a production definition. Further, we also propose a means to improve the debugging process by using a guided heuristic based mechanism which helps in reducing the number of questions to the user regarding the search space to be explored next.
debugging, i.e., fault localization, in case of a detected failure is a time consuming and intricate task. The automation or at least partial automation of debugging is therefore highly desired. In this paper, we disc...
详细信息
debugging, i.e., fault localization, in case of a detected failure is a time consuming and intricate task. The automation or at least partial automation of debugging is therefore highly desired. In this paper, we discuss some of the most recent approaches for debugging namely spectrum-based, slicing-based, and model-based debugging. We focus on the latter, and introduce the underlying theory as well as discuss empirical results obtained from our implementation. The model-based approach we present in this paper relies on a constraint representation of a program that is equivalent to the original program in terms of the input-output behavior under some reasonable assumptions. By using constraints for representing programs and subsequently test cases we are able to state the debugging problem as a constraint satisfaction problem that can be effectively solved using a todays constraint solver. The given empirical results indicate that the approach can be used for debugging smaller programs in less than 1 s. Moreover, we briefly compare the three approaches and suggest a combination of them in order to improve the results and the overall necessary running time. (C) 2012 Elsevier Inc. All rights reserved.
There is no doubt about the relevance of debugging in the software development process. However, the scientific community has put little attention on this task and the same debugging techniques used twenty years ago a...
详细信息
There is no doubt about the relevance of debugging in the software development process. However, the scientific community has put little attention on this task and the same debugging techniques used twenty years ago are still being used today. The thesis firstly studies and compares current debugging techniques and then it proposes new methods for the debugging of declarative languages putting special attention on profiling, program slicing and algorithmic debugging.
While Computational Logic plays an important role in several areas of Computer Science (CS), most educational software developed for teaching logic is not suitable to be used directly in large portions of the CS educa...
详细信息
While Computational Logic plays an important role in several areas of Computer Science (CS), most educational software developed for teaching logic is not suitable to be used directly in large portions of the CS education domain where the application of logical notions is usually required. In this paper we describe an innovative methodology based on a logic teaching tool on semantic tableaux that has been developed to help students to use logic as a formal proof technique in other advanced topics of CS, such as the verification of algorithms, the algorithmic debugging of programs, and the derivation of algorithms from logical specifications, which are foundations of good development of software. We present the results of the evaluation of this tool by means of several educational experiences during the academic year 2009/2010. From these results we conclude that the use of the tool in current CS teaching can help our students to understand more advanced CS concepts and clarify the formal process involved in the design and analysis of correct and efficient imperative programs.
暂无评论