<?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>cwash into software &#187; development practices</title>
	<atom:link href="http://cwash.org/tag/development-practices/feed/" rel="self" type="application/rss+xml" />
	<link>http://cwash.org</link>
	<description>+= construction + craftsmanship;</description>
	<lastBuildDate>Thu, 29 Sep 2011 04:23:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.2</generator>
		<item>
		<title>In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel</title>
		<link>http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel</link>
		<comments>http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 01:16:05 +0000</pubDate>
		<dc:creator>Chris Wash</dc:creator>
				<category><![CDATA[Meta/Blog]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blog fight]]></category>
		<category><![CDATA[Bob Martin]]></category>
		<category><![CDATA[Cal Henderson]]></category>
		<category><![CDATA[Cedric Beust]]></category>
		<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[development practices]]></category>
		<category><![CDATA[Gavin King]]></category>
		<category><![CDATA[Hanselminutes]]></category>
		<category><![CDATA[Jared Richardson]]></category>
		<category><![CDATA[Jeff Atwood]]></category>
		<category><![CDATA[Jim Coplien]]></category>
		<category><![CDATA[opinion]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[stackoverflow]]></category>
		<category><![CDATA[technical debt]]></category>
		<category><![CDATA[testng]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://cwash.org/?p=107</guid>
		<description><![CDATA[Weighing in on the recent ideological classes between Stackoverflow's recent podcast with Jeff Atwood and Joel Spolsky in which they call out Robert "UncleBob" Martin on his views of Unit Testing and his SOLID principles.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><div class="content">
<p><strong>Update:</strong> Robert Martin is scheduled to appear on the Feb 10 episode of the SO Podcast.  Should be interesting to see where things go.  Also, Jay Fields has <a href="http://blog.jayfields.com/2009/02/thoughts-on-developer-testing.html">weighed in on the topic</a>.</p>
<p><strong>Update #2:</strong> Listened to the new SO podcast and am working on a short followup post.  I just met another local boy and kindred spirit in <a href="http://www.codethinked.com/">Justin Etheredge who has also had a few things to say</a> about this whole debacle.</p>
<p>I wanted to add my two cents to this philosophical, in my view very important, but not very pragmatic debate. For the uninitiated, the argument begins with the <a href="http://blog.stackoverflow.com/2009/01/podcast-38/">Stackoverflow Podcast Episode #38</a> which is a discussion between Joel Spolsky and Jeff Atwood.  They discussed, among many other topics, some of &#8220;UncleBob&#8221; Martin&#8217;s recent material found in his book <em><a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean Code</a></em>, (actually, Spolsky cited Martin&#8217;s appearance on <a href="http://www.hanselminutes.com/default.aspx?showID=163">Hanselminutes</a> as the spark to his comments), which Martin responded to with a number of tweets and a <a href="http://blog.objectmentor.com/articles/2009/01/31/quality-doesnt-matter-that-much-jeff-and-joel">blog post</a>.<span id="more-107"></span></p>
<p><a href="http://agileartisans.com/main">Jared Richardson</a> introduced me to the idea of <strong>technical debt</strong>, (term was coined, like so many other terms, by Ward Cunningham) which I think is a pragmatic way to cut through the philosophical differences in this argument.  But in the interest of carrying on the debate, and because it&#8217;s the weekend, I&#8217;ve decided to (perhaps) add some fuel to the fire.  Please don&#8217;t read this at work.</p>
<p>The gist of the argument is about how much emphasis you should focus on robustness/code hygiene/maintainability in your code, even if it is unclear there is much business value in doing so.  Essentially, if we consider impacts to budgets, deadlines, etc., and even in terms of its impact to your code (see Antipattern: &#8220;Yet Another Useless Layer&#8221;) &#8212; is it worth it?  It&#8217;s very much a discussion of what software quality is and why is it important, which raises questions like:</p>
<ul>
<li>Are robustness and business value mutually exclusive?</li>
<li>Does quality require rigor and conceptual cleanliness?</li>
<li>Is code hygiene a purely academic pursuit, or is there intrinsic value in it?</li>
</ul>
<p>These are interesting questions.  Atwood and Spolsky take what they feel is a more pragmatic position; Atwood explaining quality in terms of a Frank Zappa quote [paraphrasing] &#8220;Nobody gives a crap if we&#8217;re great musicians,&#8221; meaning that what matters is ultimately what is delivered to the customer. He explains further that &#8220;Quality is just another axis&#8221; &#8212; another set of competing concerns for your development time and interest.  Spolsky&#8217;s comments constitute a self-professed rant that there is a thread of zealotry in the OO community around TDD.  It reminded me a lot of what <a href="http://beust.com/weblog/archives/000477.html">Cedric Beust has argued</a> in reference to what <a href="http://www.infoq.com/interviews/coplien-martin-tdd">Jim Coplien has debated with Martin himself</a>.  While Spolksy could be playing devil&#8217;s advocate, or could have been looking to start a &#8220;blog fight&#8221; (already popping up in comment threads) I think he could have gone about it in a more pragmatic way.  While Beust does paint Martin as a zealot as well, at least his main point didn&#8217;t portray unit testing as just short of completely useless; rather, he is one of the creators of the popular <a href="http://testng.org/doc/">TestNG </a>framework:</p>
<blockquote><p>&#8220;Tests first&#8221; or &#8220;tests last&#8221; is unimportant as long as there are tests.</p></blockquote>
<p>I might be wrong, but I even remember reading a section of <em>Clean Code</em> in Borders last week and essentially reading Beust&#8217;s point in Martin&#8217;s book.  It stuck out in my mind after watching his debate with Coplian.  But I digress.</p>
<p>Before going further, I wanted to point out how much this debate reminds me of <a href="http://www.plasticbag.org/archives/2004/03/from_pirate_dwarves_to_ninja_elves/">From pirate dwarves to ninja elves&#8230;</a>, which I believe is a great way to classify personality types &#8212; especially those of people writing code.  We know for sure that UncleBob falls into the Ninja-Elf quadrant.  He thinks practicing TDD is a professional responsibilty and lays out his own definition for TDD in <em>Clean Code</em>.  I think this is the very definition of a Ninja-Elf.  My personal leanings are toward that quadrant as well. When you are innundated with Dijsktra, the ulitmate Ninja-Elf, in school, the following quote really sticks with you:</p>
<blockquote><p>I mean, if 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself &#8220;Dijkstra would not have liked this&#8221;, well, that would be enough immortality for me.</p></blockquote>
<p>But there are people whose opinions I respect with Dwarf-Pirate leanings, too.  Obviously Atwood and Spolsky lean in this direction (though they may not fall directly into that quadrant).  I’ve heard some others that I respect espouse the same opinion as Spolsky; Gavin King, for example, I’ve heard him say, “The types of bugs that I introduce usually aren’t caught by a <strong>unit</strong> test.”  He wasn’t as over the top in his argument, he simply explained that he prefers integration tests.  And I don&#8217;t think you&#8217;d hear any of the people mentioned in this post say that they never write any tests.  For a great argument from the ultimate Pirate-Dwarf see Cal Henderson&#8217;s <a href="http://www.ludicorp.com/flickr/flickr_php_final.zip">normalized data is for sissies</a> (slide #27); it is pretty entertaining and compelling when scalability is of utmost concern.</p>
<p>I think Atwood’s argument ultimately came down to championing the idea of <a href="http://www.infoq.com/news/2008/02/continuous-production">continuous production</a>; that being able to respond to change or bugs found and having a quick no-brainer deployment process is the Zen-like state you&#8217;d like to get to.  But the idea of getting there is that it comes out of some notion of continuous integration, which is predicated on the idea of testing.  Henderson himself makes this very argument (I believe in this <a href="http://cdn4.libsyn.com/carsonsystems/Cal_Henderson.mp3?nvb=20090201003132&amp;nva=20090202004132&amp;t=0cab6219613db05c73c82">talk</a>, but perhaps in another). You need to trust your team enough to get changes and fixes out to address problems quickly, and be smart about what you spend time on. Testing is great and if you can find people that can test their code well and be productive, that’s awesome. But Henderson’s point is those people are extremely hard to find and retain.</p>
<p>All this goes back to the old question, is producing code an artistic or engineering practice?  (Interesting that Atwood supported his comment with a Frank Zappa quote about art.)  Obviously you need a talented and cohesive team to be able to make it work either way. I think the answer is it <strong>has to be</strong> a little bit of both.  You&#8217;ll need some measure of creativity, some degree of engineering aptitude, also strong analytical skills, and to succeed in a business environment, some acumen in decision making and managing (at the very least your own time).</p>
<p>The fact is, though, that we’ve come leaps and bounds in terms of being able to efficiently produce these tests, and balance their production and maintenance out with constraints, business expectations, budgets and deadlines.  And <a href="http://rubyconf.org/talks/24">it can fuel your creative side</a>, too.</p>
<p>As for professional responsibilities, I definitely wouldn’t recommend trying to write code without at least <em>some</em> tests if you expect anyone else to have to maintain your code. If you&#8217;ve got a close knit team and an overwhelmingly urgent need to deliver untested code (and are of the Pirate-Dwarf persuasion) then go for it.  But that being said, I’d say I agree with Martin and Jared Richardson that argue it’s a professional responsibility to <strong>not take on the technical debt of untested code</strong>. Of course, if tests mean you can get maintainability (and other -ilities) along the way then I think that you&#8217;re well on your way to a quality product.</p>
<p>One final way to look at this: would you say it&#8217;s better for your team to take the view that code is innocent until proven guilty, or guilty until proven innocent?  In the interest of skepticism, considering the teams that most developers &#8220;in the trenches&#8221; have to work on, and how far we&#8217;ve come in making testing easier and more efficient, I&#8217;d need a very strong team to make the assumption that all they code they write is innocent.  We all make mistakes.  I believe this is also brought up in <em>Clean Code</em>.</p>
<p>Ultimately the message Atwood and Spolsky send in their Stackoverflow podcast is that unit testing and efforts to support it are not a silver bullet.  Personal slights aside (&#8220;I don&#8217;t think these people write very much code.&#8221;) they have a point &#8212; and Martin agrees in his blog post.  But I think it took them a long time to make that point which is certainly no great revelation.  In the end, I did not feel they explained a whole lot about what the <em>right approach to quality</em> is, but communicated their distaste for an attempt (especially if accepted dogmatically) that aims to do so.  I can relate to this, and agree you must treat what you read, hear and are taught with a healthy dose of skepticism.  Martin&#8217;s ideas may seem dogmatic on the surface but I don&#8217;t think it&#8217;s fair to paint him in that light.  If you really read what he writes, I think he realizes that he is a voice many people are listening to, and works hard to say what he thinks is the right.  Martin defends a style of development that favors more rigor and discipline than many others feel is necessary, but in an industry that can be categorized by its lack of discipline, I can&#8217;t do much but respect him for that.</div>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=2&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=3&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=24&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
		<li class="shr-gmail">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=52&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=74&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=207&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Reader">Add this to Google Reader</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=88&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=6&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=4&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=38&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=10&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=In+response+to+Stackoverflow+%2338%2F%22Quality+Doesn%27t+Matter+That+Much%22+--+Jeff+and+Joel+&amp;link=http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/&amp;notes=Weighing%20in%20on%20the%20recent%20ideological%20classes%20between%20Stackoverflow%27s%20recent%20podcast%20with%20Jeff%20Atwood%20and%20Joel%20Spolsky%20in%20which%20they%20call%20out%20Robert%20%22UncleBob%22%20Martin%20on%20his%20views%20of%20Unit%20Testing%20and%20his%20SOLID%20principles.&amp;short_link=http://bit.ly/a3OkUe&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
</ul><div style="clear: both;"></div></div>

<h3  class="related_post_title">More Related Content</h3><ul class="related_post"><li>November 28, 2008 -- <a href="http://cwash.org/2008/11/28/must-havesreferences-for-modern-java-ee-developers/" title="Must Haves/References For Modern Java EE Developers">Must Haves/References For Modern Java EE Developers</a> (1)</li><li>February 17, 2009 -- <a href="http://cwash.org/2009/02/17/dont-unit-test-anymore-no-really/" title="Don&#8217;t Unit Test Anymore&#8230; No, Really!">Don&#8217;t Unit Test Anymore&#8230; No, Really!</a> (6)</li><li>January 13, 2009 -- <a href="http://cwash.org/2009/01/13/on-software-quality/" title="On Software Quality">On Software Quality</a> (8)</li><li>March 13, 2008 -- <a href="http://cwash.org/2008/03/13/continuous-integration-dissected/" title="Continuous Integration Dissected">Continuous Integration Dissected</a> (0)</li><li>March 11, 2008 -- <a href="http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/" title="Bugs, Detectives, and Test Automation">Bugs, Detectives, and Test Automation</a> (2)</li><li>June 9, 2009 -- <a href="http://cwash.org/2009/06/09/mocking-with-jmockit/" title="Mocking with JMockit">Mocking with JMockit</a> (5)</li><li>August 2, 2008 -- <a href="http://cwash.org/2008/08/02/how-i-escape-the-reuse-trap/" title="How I Escape the &#8220;Reuse Trap&#8221;">How I Escape the &#8220;Reuse Trap&#8221;</a> (0)</li><li>July 8, 2010 -- <a href="http://cwash.org/2010/07/08/transactions-part-1/" title="Transactions, Part 1">Transactions, Part 1</a> (0)</li><li>January 7, 2010 -- <a href="http://cwash.org/2010/01/07/eliminate-branching-if-statements-to-produce-better-code/" title="Eliminate Branching (IF Statements) to Produce Better Code">Eliminate Branching (IF Statements) to Produce Better Code</a> (0)</li><li>July 24, 2009 -- <a href="http://cwash.org/2009/07/24/the-elements-of-reusable-code/" title="The Elements of Reusable Code">The Elements of Reusable Code</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://cdn4.libsyn.com/carsonsystems/Cal_Henderson.mp3?nvb=20090201003132&amp;amp" length="46243558" type="audio/mpeg" />
		</item>
		<item>
		<title>Continuous Integration Dissected</title>
		<link>http://cwash.org/2008/03/13/continuous-integration-dissected/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=continuous-integration-dissected</link>
		<comments>http://cwash.org/2008/03/13/continuous-integration-dissected/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 16:29:06 +0000</pubDate>
		<dc:creator>Chris Wash</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[build process]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[development practices]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://cwash.org/2008/03/13/continuous-integration-dissected/</guid>
		<description><![CDATA[A lot gets written about Continuous Integration, particularly on which is the best visual cue to let you know your build is broken or that a test is failing – lava lamps, Beta Brights, <a href="http://www.thinkgeek.com/gadgets/electronic/5da2/" title="This is probably not the last link to ThinkGeek from me">Ambient Orbs</a>, and some even suggest traffic lights. But aside from this extraneous (at least to business) nerd-banter, a lot of what I find written about the actual topic of CI is fluffy, ivory tower, or pie-in-the-sky jibber-jabber that leaves out important parts of the big picture or confuses people more than it helps.  In hopes of clearing up confusion on what exactly CI is and how it's <em>supposed</em> to work, I'm ripping out a description that I wrote for a client proposal recently (so my apologizes for the dry-tone).  I hope sheds some light on the true nature of CI, why it's important and how to implement it from a birds-eye point of view.
<p style="text-align: center"><img src="http://techepics.com/files/mythbusters_exploading_lava.jpg" alt="Lava Lamps" height="175" hspace="10" width="195" /></p>]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://cwash.org/2008/03/13/continuous-integration-dissected/";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><h3>Setting the Record Straight</h3>
<p>A lot gets written about Continuous Integration, particularly on which is the best visual cue to let you know your build is broken or that a test is failing – lava lamps, Beta Brights, <a href="http://www.thinkgeek.com/gadgets/electronic/5da2/" title="This is probably not the last link to ThinkGeek from me">Ambient Orbs</a>, and some even suggest traffic lights. But aside from this extraneous (at least to business) nerd-banter, a lot of what I find written about the actual topic of CI is fluffy, ivory tower, or pie-in-the-sky jibber-jabber that leaves out important parts of the big picture or confuses people more than it helps.  In hopes of clearing up confusion on what exactly CI is and how it&#8217;s <em>supposed</em> to work, I&#8217;m ripping out a description that I wrote for a client proposal recently (so my apologizes for the dry-tone).  I hope sheds some light on the true nature of CI, why it&#8217;s important and how to implement it from a birds-eye point of view.</p>
<p style="text-align: center"><img src="http://techepics.com/files/mythbusters_exploading_lava.jpg" alt="Lava Lamps" height="350" hspace="10" width="390" /></p>
<h3>Continuous Integration Dissected</h3>
<p>Any large scale development project needs an automated, repeatable build process.  Following best practices while developing a build process properly separates environment-specific configuration concerns from the codebase.  This allows new environments to be created quickly and easily by simply overriding any environment-specific configuration values when first executing the build process.  Whatever build tool is being used, builds should share a common, consistent process and interface.  A consistent, repeatable build will know all of its dependencies and the goal is to be able to build any given module anywhere, independently, at any time.</p>
<p>Automated, repeatable build processes typically begin by obtaining dependencies (which can be specified using a dependency management tool) and a specific working-copy of the codebase (&#8220;checking out&#8221;) from a SCM system like CVS or Subversion.  It is important to note that this codebase includes any code that is responsible for performing automated testing in addition to source code and configuration (and possibly other source-like artifacts).</p>
<p>Once the checkout has completed, the process will compile code and run automated unit test suites for each module in the system.  At this point, all automated unit tests should pass, and custom development can begin.  Any changes to code must be adequately covered by unit tests (either by changing existing tests or creating new ones), must fully compile without any errors and pass all automated unit test suites before being committed to the repository.  The practice of always keeping the code committed to the SCM repository in this state (no compilation or unit test errors) is known as Continuous Integration and ensures that new development is safe to proceed at any point without fear of integration errors.</p>
<p>Subversion (and CVS) support concurrent development by following a Copy-Edit-Merge paradigm; any contention over files is usually caught when a developer tries to commit their changes and notices the underlying files have changed since they obtained their copy.  In many cases, Subversion is capable of performing a merge automatically, if there was no contention over the same piece of a file.  Sometimes, however, a manual merge will be required.  Merging becomes more painful as the number of differences in the conflicting files increase.  A good rule of thumb is that every developer should commit their changes at least daily.</p>
<p>Designating a single machine as a Continuous Integration (CI) environment provides many added benefits to a large scale development project.  There are many operations which are good candidates to have run &#8220;continuously&#8221; but quite often are too expensive for developers to perform before every commit.  Examples include executing automated in-browser system tests (which, if maintained over multiple releases, can serve as a &#8220;mini&#8221; regression test suite), performance tests/profiling, producing test metrics, generating documentation, etc.  CI servers are an ideal place to schedule these processes to occur in an automated fashion.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://cwash.org/2008/03/13/continuous-integration-dissected/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=2&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=3&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=24&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
		<li class="shr-gmail">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=52&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=74&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=207&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Reader">Add this to Google Reader</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=88&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=6&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=4&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=38&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=10&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Continuous+Integration+Dissected&amp;link=http://cwash.org/2008/03/13/continuous-integration-dissected/&amp;notes=A%20lot%20gets%20written%20about%20Continuous%20Integration%2C%20particularly%20on%20which%20is%20the%20best%20visual%20cue%20to%20let%20you%20know%20your%20build%20is%20broken%20or%20that%20a%20test%20is%20failing%20%E2%80%93%20lava%20lamps%2C%20Beta%20Brights%2C%20Ambient%20Orbs%2C%20and%20some%20even%20suggest%20traffic%20lights.%20But%20aside%20from%20this%20extraneous%20%28at%20least%20to%20business%29%20nerd-banter%2C%20a%20lot%20of%20what%20I%20find%20written%20about%20the%20actual%20topic%20of%20CI%20is%20fluffy%2C%20ivory%20tower%2C%20or%20pie-in-the-sky%20jibber-jabber%20that%20leaves%20out%20important%20parts%20of%20the%20big%20picture%20or%20confuses%20people%20more%20than%20it%20helps.%20%20In%20hopes%20of%20clearing%20up%20confusion%20on%20what%20exactly%20CI%20is%20and%20how%20it%27s%20supposed%20to%20work%2C%20I%27m%20ripping%20out%20a%20description%20that%20I%20wrote%20for%20a%20client%20proposal%20recently%20%28so%20my%20apologizes%20for%20the%20dry-tone%29.%20%20I%20hope%20sheds%20some%20light%20on%20the%20true%20nature%20of%20CI%2C%20why%20it%27s%20important%20and%20how%20to%20implement%20it%20from%20a%20birds-eye%20point%20of%20view.%0D%0A&amp;short_link=http://bit.ly/9tMLie&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
</ul><div style="clear: both;"></div></div>

<h3  class="related_post_title">More Related Content</h3><ul class="related_post"><li>March 11, 2008 -- <a href="http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/" title="Bugs, Detectives, and Test Automation">Bugs, Detectives, and Test Automation</a> (2)</li><li>January 31, 2009 -- <a href="http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/" title="In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel ">In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel </a> (3)</li><li>November 28, 2008 -- <a href="http://cwash.org/2008/11/28/must-havesreferences-for-modern-java-ee-developers/" title="Must Haves/References For Modern Java EE Developers">Must Haves/References For Modern Java EE Developers</a> (1)</li><li>July 8, 2010 -- <a href="http://cwash.org/2010/07/08/transactions-part-1/" title="Transactions, Part 1">Transactions, Part 1</a> (0)</li><li>January 7, 2010 -- <a href="http://cwash.org/2010/01/07/eliminate-branching-if-statements-to-produce-better-code/" title="Eliminate Branching (IF Statements) to Produce Better Code">Eliminate Branching (IF Statements) to Produce Better Code</a> (0)</li><li>July 24, 2009 -- <a href="http://cwash.org/2009/07/24/the-elements-of-reusable-code/" title="The Elements of Reusable Code">The Elements of Reusable Code</a> (0)</li><li>June 9, 2009 -- <a href="http://cwash.org/2009/06/09/mocking-with-jmockit/" title="Mocking with JMockit">Mocking with JMockit</a> (5)</li><li>February 17, 2009 -- <a href="http://cwash.org/2009/02/17/dont-unit-test-anymore-no-really/" title="Don&#8217;t Unit Test Anymore&#8230; No, Really!">Don&#8217;t Unit Test Anymore&#8230; No, Really!</a> (6)</li><li>January 13, 2009 -- <a href="http://cwash.org/2009/01/13/on-software-quality/" title="On Software Quality">On Software Quality</a> (8)</li><li>August 2, 2008 -- <a href="http://cwash.org/2008/08/02/how-i-escape-the-reuse-trap/" title="How I Escape the &#8220;Reuse Trap&#8221;">How I Escape the &#8220;Reuse Trap&#8221;</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://cwash.org/2008/03/13/continuous-integration-dissected/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bugs, Detectives, and Test Automation</title>
		<link>http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=bugs-detectives-and-test-automation</link>
		<comments>http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 21:08:33 +0000</pubDate>
		<dc:creator>Chris Wash</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[bug tracking]]></category>
		<category><![CDATA[development practices]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/</guid>
		<description><![CDATA[[Y]ou might suppose going to the trouble of creating automated tests, simply for your own devices, might be a bit overkill. As it turns out, it is worth it, and it's going to save you a lot of time in the long run.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><p>You&#8217;ve done a thorough code review with your team and your code has come out with a few nice improvements.  Good.  You know that many a trustworthy source have speculated code reviews find as many as two times the number of defects that testing does. So you might suppose going to the trouble of creating automated tests, simply for your own devices, might be a bit overkill. As it turns out, it <em>is </em>worth it, and it&#8217;s going to save you a lot of time in the long run.  Why is it so valuable?</p>
<p><span id="more-7"></span></p>
<p>Indulge me in a brief aside&#8230;  I saw Full Metal Jacket recently on cable for the up-teenth time; the first act of the film, the part that is set on Paris Island, is hard for me to flip away from. I usually end up catching at least the first quarter of the movie.  If you&#8217;ve seen it, you&#8217;ll probably remember the part where the main characters recite, as new recruits, the Marine Corps prayer – it ends with &#8220;Without me, my rifle is useless; without my rifle, I am useless.&#8221;  I think the prayer metaphorically makes sense if developers were reciting it and replaced the rifles with their automated tests.</p>
<p>To figure out why, let&#8217;s answer the burning questions that first come to mind:</p>
<h3>Why should a developer care about doing their <em>own </em>testing?</h3>
<ol>
<li>It alerts you of problems (duh).</li>
<li>You&#8217;ll have a check in place in case a bug ever <a href="http://www.youtube.com/watch?v=MCjskH74mVU" title="Fly REZ PLZ">comes back to life</a>.</li>
<li>It gives you the opportunity to fix things before anyone else finds out about them.</li>
<li>It&#8217;s the best way to demonstrate that your code meets its requirements!</li>
</ol>
<h3>Why don&#8217;t you want testers (or worse, end users) to find your bugs?</h3>
<p>First of all, let&#8217;s be honest, this is an ideal to strive toward, even though actually achieving 100% test coverage and catching every possible bug is a definite pipe-dream.  But we have to keep in mind that bugs discovered by people other than a developer cause a lot of speculation, confusion, and in general, overhead work for everyone – time that could be better spent doing more productive things.  We&#8217;d like nothing better than to hand testers (and ultimately users) squeaky-clean code.  What happens if we don&#8217;t? (and you won&#8217;t!)</p>
<p>Imagine taking a class of third graders outside to find an insect in the &#8220;wild&#8221; and learn about (not burn) it with a magnifying glass. You&#8217;re even able to get everyone to concentrate long enough to take a peek at a would-be critter. The first candidate you find turns out to be a piece of bark that looks like a beetle. As you&#8217;re searching for another, two of your students get in a fight over claim to a partially decomposed boot they find. Another gets a nose bleed. When you finally manage to find another potential insect, you pass it over, mistaking the critter for a leaf. Little do you know it is actually a very well camouflaged member of the family <a href="http://en.wikipedia.org/wiki/Phylliidae" title="Phylliidae">Phyllidae</a>. <img src="http://upload.wikimedia.org/wikipedia/commons/1/12/LeafInsect.jpg" alt="A Leafy-looking bug" align="right" height="284" hspace="10" width="213" />By this time a child has fallen face first into a mud puddle and another has peed in his pants (which, one would think, should start to attract some insects).</p>
<p>Imagine that you do manage to find an insect in the wild; how would you get the whole class to observe it properly? There&#8217;s just one magnifying glass. The moment you get it under the glass, it darts away. It&#8217;s a struggle to keep track of. Not everyone is going to have a good viewing angle. If it disappears, then it might just as well be dead to you (did you hear that tree fall in the woods?).</p>
<p>Enough already with the horrible analogy? Okay, okay. The comparison of users to third graders in our thought experiment was purely coincidental – but you get the point. Having a group of people focus on a moving bug in &#8220;the wild&#8221; is tough! It&#8217;d be much easier to bring a captured critter into a controlled class environment to observe &#8211; our analog of a bug that we have caught with nifty our automated test net.</p>
<h3>Bug Detective?</h3>
<p>Given the fact that a tester&#8217;s job is to find defects, odds are sometimes you&#8217;ll get a defect report filed that looks like it&#8217;s written in cuneiform and requires a wizard&#8217;s hat, cauldron and lizard eyeballs to reproduce it. Sometimes<em> </em> a tester might not be giving you a legit bug – <em>sometimes</em>. There are a few scenarios that come to mind:</p>
<ol>
<li>A requirement is incomplete, misunderstood, miscommunicated or changed.</li>
<li>An external system was down.</li>
<li>An admin fat fingered something.</li>
</ol>
<p>This comes with the territory and you&#8217;re just going to have to suck it up. You&#8217;re ultimately the gumshoe on the case.  A good way to think of it is that testers and users are like the police of our system – they&#8217;re responsible for being the first on the scene, drawing chalk outlines, &#8220;booking&#8221; the suspects we arrest, etc.   What the tester is explaining is probably going to confuse you at least a few times before it makes sense. If you have good testing support, this might not be that painful.  But you could have the Super Troopers on the case, <img src="http://upload.wikimedia.org/wikipedia/en/thumb/5/5a/2002_super_troopers_0001.jpg/800px-2002_super_troopers_0001.jpg" alt="The Super Troopers" align="left" height="200" hspace="10" width="300" />and each clue that comes in is going to waste more and more of your time. And heaven forbid an end user finds this problem, and then tries to communicate this to a support rep – your job then becomes ten times harder because you have to decode 2-3 levels of miscommunication that&#8217;s occurred. Sometimes no good comes of all this, sometimes you find and squash a bug.  In cases where you don&#8217;t know what to do, write some tests – ask what the outcome should be, let the answers create more questions and more tests.  And be sure to hold onto them!</p>
<p>Whatever the outcome, because good developers are lazy, we want more than anything else to prevent this from ever happening again. Worse case, you&#8217;ve spent a lot of time addressing something and should have at least a documented set of work you&#8217;ve done and decisions made. Make sure others know about this. Best case, you are able to add an automated test so you don&#8217;t have to think about this ever again (or tell anyone about it &#8211; you&#8217;ll know the moment when something goes wrong).</p>
<h3>Conclusion</h3>
<p>So let&#8217;s recap –</p>
<ol>
<li>Bugs that slip to production are costly!</li>
<li>Automated tests help us exercise code before and after it goes into production.</li>
<li>If we work on a defect, our automated test net can help us catch a bug, or examine something that looks like a bug more closely.</li>
<li>Whenever we work on a bug (even if it&#8217;s something that isn&#8217;t truly a bug, but is being tracked as one) we should do our best to produce an automated test so we don&#8217;t have to reinvestigate in the future.  A test beats an email- or source control commit-trail any day!</li>
</ol>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center">
<ul class="socials">
		<li class="shr-comfeed">
			<a href="http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=2&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=3&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=24&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-dzone">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=102&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to DZone">Add this to DZone</a>
		</li>
		<li class="shr-gmail">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=52&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=74&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=257&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=207&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Google Reader">Add this to Google Reader</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=88&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-misterwong">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=6&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Add this to Mister Wong">Add this to Mister Wong</a>
		</li>
		<li class="shr-mixx">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=4&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="shr-reddit">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=40&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=38&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-technorati">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=&amp;service=10&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="shr-twitter">
			<a href="http://www.shareaholic.com/api/share/?title=Bugs%2C+Detectives%2C+and+Test+Automation&amp;link=http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/&amp;notes=%5BY%5Dou%20might%20suppose%20going%20to%20the%20trouble%20of%20creating%20automated%20tests%2C%20simply%20for%20your%20own%20devices%2C%20might%20be%20a%20bit%20overkill.%20As%20it%20turns%20out%2C%20it%20is%20worth%20it%2C%20and%20it%27s%20going%20to%20save%20you%20a%20lot%20of%20time%20in%20the%20long%20run.&amp;short_link=http://bit.ly/dhH36M&amp;v=1&amp;apitype=1&amp;apikey=&amp;source=Shareaholic&amp;template=%24%7Btitle%7D+-+%24%7Bshort_link%7D&amp;service=7&amp;tags=&amp;ctype=" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
</ul><div style="clear: both;"></div></div>

<h3  class="related_post_title">More Related Content</h3><ul class="related_post"><li>March 13, 2008 -- <a href="http://cwash.org/2008/03/13/continuous-integration-dissected/" title="Continuous Integration Dissected">Continuous Integration Dissected</a> (0)</li><li>January 31, 2009 -- <a href="http://cwash.org/2009/01/31/in-response-to-stackoverflow-38quality-doesnt-matter-that-much-jeff-and-joel/" title="In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel ">In response to Stackoverflow #38/&#8221;Quality Doesn&#8217;t Matter That Much&#8221; &#8212; Jeff and Joel </a> (3)</li><li>November 28, 2008 -- <a href="http://cwash.org/2008/11/28/must-havesreferences-for-modern-java-ee-developers/" title="Must Haves/References For Modern Java EE Developers">Must Haves/References For Modern Java EE Developers</a> (1)</li><li>July 8, 2010 -- <a href="http://cwash.org/2010/07/08/transactions-part-1/" title="Transactions, Part 1">Transactions, Part 1</a> (0)</li><li>January 7, 2010 -- <a href="http://cwash.org/2010/01/07/eliminate-branching-if-statements-to-produce-better-code/" title="Eliminate Branching (IF Statements) to Produce Better Code">Eliminate Branching (IF Statements) to Produce Better Code</a> (0)</li><li>July 24, 2009 -- <a href="http://cwash.org/2009/07/24/the-elements-of-reusable-code/" title="The Elements of Reusable Code">The Elements of Reusable Code</a> (0)</li><li>June 9, 2009 -- <a href="http://cwash.org/2009/06/09/mocking-with-jmockit/" title="Mocking with JMockit">Mocking with JMockit</a> (5)</li><li>February 17, 2009 -- <a href="http://cwash.org/2009/02/17/dont-unit-test-anymore-no-really/" title="Don&#8217;t Unit Test Anymore&#8230; No, Really!">Don&#8217;t Unit Test Anymore&#8230; No, Really!</a> (6)</li><li>January 13, 2009 -- <a href="http://cwash.org/2009/01/13/on-software-quality/" title="On Software Quality">On Software Quality</a> (8)</li><li>August 2, 2008 -- <a href="http://cwash.org/2008/08/02/how-i-escape-the-reuse-trap/" title="How I Escape the &#8220;Reuse Trap&#8221;">How I Escape the &#8220;Reuse Trap&#8221;</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://cwash.org/2008/03/11/bugs-detectives-and-test-automation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

