<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jonathan Weiß &#187; Development</title>
	<atom:link href="http://mysterycity.de/blog/category/development/feed" rel="self" type="application/rss+xml" />
	<link>http://mysterycity.de/blog</link>
	<description>Online Marketing</description>
	<lastBuildDate>Tue, 01 Nov 2011 09:28:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Fighting software regression with delta debugging</title>
		<link>http://mysterycity.de/blog/fighting-software-regression-with-delta-debugging</link>
		<comments>http://mysterycity.de/blog/fighting-software-regression-with-delta-debugging#comments</comments>
		<pubDate>Tue, 03 Feb 2009 21:49:05 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://mysterycity.de/blog/?p=236</guid>
		<description><![CDATA[Using continuous integration mechanisms can lower the impact of regression defects, but they cannot be avoided. You will never be able to test 100% of your code base with unit tests, because the time you invest in these tests is limited. Testing dynamic environments (e.g. a widget framework) with automatic UI testing tools like Selenium [...]]]></description>
			<content:encoded><![CDATA[<p>Using continuous integration mechanisms can lower the impact of regression defects, but they cannot be avoided. You will never be able to test 100% of your code base with unit tests, because the time you invest in these tests is limited. Testing dynamic environments (e.g. a widget framework) with automatic UI testing tools like <a href="http://seleniumhq.org/">Selenium</a> takes even more time to develop and maintain.</p>
<p>If a regression defect slips through your tests and gets into your product it is often hard to find the cause for it. In a small or medium-size project the difference between two revisions of a single file or folder combined with the commit message of them will lead to the cause easily. On the contrary, in a big and complex project like <a href="http://www.qooxdoo.org">qooxdoo</a>, where several people are working on different parts of it, the pure amount of files that get changed during a week (or even day) is just too much to handle and you will end in searching for the needle in a haystack. In order to deal with sizable and complex systems I want to introduce you a technique called <strong>Delta Debugging (DD)</strong>.</p>
<p>In using DD you cut your problem into half check and check if it is still present. If it still exists you repeat this step until it disappears. When the problem is gone you know that the last part that you changed must include the cause.</p>
<p>In the case of a regression defect the first step is to find the last revision of the project which is fine. This is your starting point (A) which you have to compare with the current version (B) which contains the issue. Your defect (D) is somewhere in between A and B.</p>
<p><img src="http://mysterycity.de/blog/wp-content/uploads/2009/02/delta_debugging_formula.png" alt="delta debugging formula" title="delta debugging formula" width="82" height="60" class="alignnone size-full wp-image-243" /></p>
<p>If you are using a version control system like <a href="http://subversion.tigris.org/">Subversion</a> you can easily update parts (several folders or files) to the revision of your starting point. Once you identified the folder which contains the issue, revert the changes in it and compare file-wise until you find the bad file. You can even apply DD on this file to find the bad line(s).<br />
You might haven even used DD without knowing it: how did you find the latest working revision? Did you jump back 100 (50, 10 &mdash; depending on the amount of commits and the issue itself) and then 50 forwards and decreased the delta until you found the correct revision? If you did so, you already used this technique on a different level.</p>
<p>Since DD handles the environment (the program or source code) as a black box it can also be used by testers to save developer's time by identifying  the part which must contain the cause of the issue.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://mysterycity.de/blog/fighting-software-regression-with-delta-debugging/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

