<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=Algorithmic_program_debugging</id>
	<title>Algorithmic program debugging - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=Algorithmic_program_debugging"/>
	<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=Algorithmic_program_debugging&amp;action=history"/>
	<updated>2026-06-26T10:02:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://70.231.62.181/index.php?title=Algorithmic_program_debugging&amp;diff=18776018&amp;oldid=prev</id>
		<title>imported&gt;Oxymoronic1: /* growthexperiments-addlink-summary-summary:2|0|1 */</title>
		<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=Algorithmic_program_debugging&amp;diff=18776018&amp;oldid=prev"/>
		<updated>2025-09-25T18:33:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:2|0|1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Algorithmic debugging&amp;#039;&amp;#039;&amp;#039; (also called &amp;#039;&amp;#039;&amp;#039;declarative debugging&amp;#039;&amp;#039;&amp;#039;) is a [[debugging]] technique that compares the results of sub-[[computations]] with what the [[programmer]] intended. The technique constructs an internal representation of all [[computations]] and sub-computations performed during the [[Execution (computing)|execution]] of a [[Software bug|buggy program]] and then asks the [[programmer]] about the [[Correctness (computer science)|correctness]] of such computations. By asking the [[programmer]] questions or using a [[formal specification]], the system can identify precisely where in a [[Computer program|program]] a [[Software bug|bug]] is located. [[Debugging]] techniques can dramatically reduce the time and effort spent on [[debugging]].&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
[[Debugging|Program debugging]] is an extremely common part of software development. Until the 1980s the craft of program debugging, practiced by every programmer, was without any theoretical foundation.&amp;lt;ref&amp;gt;Silva, Josep. &amp;quot;A survey on algorithmic debugging strategies.&amp;quot; &amp;#039;&amp;#039;Advances in Engineering Software&amp;#039;&amp;#039; 42.11 (2011): 976-991/&amp;lt;/ref&amp;gt; In the early 1980s, systematic and principled approaches to program debugging were developed. In general, a bug occurs when a programmer has a specific intention regarding what the program should do, yet the program actually written exhibits a different behavior than intended in a particular case. &lt;br /&gt;
One way of organizing the debugging process is to automate it (at least partially) via an algorithmic debugging technique.&amp;lt;ref&amp;gt;Zeller, Andreas. &amp;#039;&amp;#039;Why programs fail: a guide to systematic debugging&amp;#039;&amp;#039;. Elsevier, 2009./&amp;lt;/ref&amp;gt; The idea of algorithmic debugging is to have a tool that guides the programmer along the debugging process interactively: It does so by asking the programmer about possible bug sources. &lt;br /&gt;
The algorithmic debugging technique constructs an internal representation of all computations and sub-computations performed during the execution of a buggy program (an execution tree). Then, it asks the programmer about the correctness of such computations. The programmer answers &amp;quot;YES&amp;quot; when the result is correct or &amp;quot;NO&amp;quot; when the result is wrong. Some algorithmic debuggers also accept the answer &amp;quot;I don&amp;#039;t know&amp;quot; when the programmer cannot give an answer (e.g., because the question is too complex). Thus, the answers of the programmer guide the search for the bug until it is isolated by discarding correct parts of the program. The algorithmic debugging process finds one bug at a time. In order to find different bugs, the process should be restarted again for each different bug.&lt;br /&gt;
&lt;br /&gt;
==Origins, current and future directions==&lt;br /&gt;
&lt;br /&gt;
Algorithmic debugging was first developed by [[Ehud Shapiro]] during his PhD research at [[Yale University]], as introduced in his PhD thesis,&amp;lt;ref&amp;gt;Shapiro, Ehud Y. (1983). &amp;#039;&amp;#039;Algorithmic program debugging&amp;#039;&amp;#039;. Cambridge, Mass: MIT Press. {{ISBN|0-262-19218-7}}&amp;lt;/ref&amp;gt; selected as a 1982 ACM Distinguished Dissertation. Shapiro implemented the method of algorithmic debugging in Prolog&amp;lt;ref&amp;gt;Clocksin, William F., and Christopher S. Mellish. &amp;#039;&amp;#039;Programming in PROLOG&amp;#039;&amp;#039;. Vol. 4. Berlin etc.: Springer, 1987.&amp;lt;/ref&amp;gt; (a general purpose logic [[programming language]]) for the debugging of [[Logic programming|logic programs]]. In case of [[Logic programming|logic programs]], the intended behavior of the program is a model (a set of simple true statements) and bugs are manifested as program [[Completeness (logic)|incompleteness]] (inability to prove a true statement) or [[Correctness (computer science)|incorrectness]] (ability to prove a false statement). The algorithm would identify a false statement in the program and provide a counter-example to it or a missing true statement that it or its generalization should be added to the program. A method to handle [[non-termination]] was also developed. &lt;br /&gt;
The research and development in the field of algorithmic debugging has made major improvements over the original algorithms for debugging [[Prolog]] and other and extended the ideas to other language paradigms such as [[functional languages]] and [[Object-oriented programming|object oriented languages]].&amp;lt;ref&amp;gt;Naish, Lee. &amp;#039;&amp;#039;A declarative debugging scheme&amp;#039;&amp;#039;. Department of Computer Science, University of Melbourne, 1995.&amp;lt;/ref&amp;gt;&lt;br /&gt;
Three decades since its introduction, algorithmic debugging is still an active field of [[computer science]] research&amp;lt;ref&amp;gt;Caballero, Rafael, Riesco, Adrián, Silva, Josep. &amp;#039;&amp;#039;A survey of algorithmic debugging&amp;#039;&amp;#039;.  ACM Computing Surveys, Volume 50 Issue 4,  2017.&amp;lt;/ref&amp;gt; and will probably remain so for decades as no panacea is in sight.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Debugging]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Oxymoronic1</name></author>
	</entry>
</feed>