<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: TDD Derangement Syndrome</title>
    <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>TDD Derangement Syndrome</title>
      <description>&lt;p&gt;My recent blog about &lt;span class="caps"&gt;TDD&lt;/span&gt;, Design Patterns, Concurrency, and Sudoku seemed to draw the ire of a few vocal &lt;span class="caps"&gt;TDD&lt;/span&gt; detractors.  Some of these people were rude, insulting, derisive, dismissive, and immature.  Well, Halloween is not too far away.&lt;/p&gt;


	&lt;p&gt;In spite of their self-righteous snickering they did ask a few reasonable questions.  To be fair I thought it would be appropriate for me to answer them.&lt;/p&gt;


	&lt;h2&gt;Is there any research on &lt;span class="caps"&gt;TDD&lt;/span&gt;?&lt;/h2&gt;


	&lt;p&gt;It turns out that there is a fair bit.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;One simple google search led me to &lt;a href="http://haacked.com/archive/2008/01/22/research-supports-the-effectiveness-of-tdd.aspx"&gt;this blog&lt;/a&gt; by Phil Haack in which he reviewed a &lt;span class="caps"&gt;TDD&lt;/span&gt; research paper.  Quoting from the paper:&lt;/li&gt;
	&lt;/ul&gt;


	&lt;blockquote&gt;
		&lt;p&gt;We found that test-first students on average wrote more tests and, in turn, students who wrote more tests tended to be more productive. We also observed that the minimum quality increased linearly with the number of programmer tests, independent of the development strategy employed.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;ul&gt;
	&lt;li&gt;The same google search led me to &lt;a href="http://weblogs.asp.net/mhawley/archive/2004/04/15/114005.aspx"&gt;this blog&lt;/a&gt; by Matt Hawley, in which he reviewed several other research papers.  Part of his summary:&lt;/li&gt;
	&lt;/ul&gt;


	&lt;blockquote&gt;
		&lt;p&gt;* 87.5% of developers reported better requirements understanding.
    * 95.8% of developers reported reduced debugging efforts.
    * 78% of developers reported &lt;span class="caps"&gt;TDD&lt;/span&gt; improved overall productivity.
    * 50% of developers found that it decreased overall development time.
    * 92% of developers felt that &lt;span class="caps"&gt;TDD&lt;/span&gt; yielded high-quality code.
    * 79% of developers believed &lt;span class="caps"&gt;TDD&lt;/span&gt; promoted simpler design.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Actually, I recognize some of Matt&amp;#8217;s results as coming from a &lt;a href="http://www.google.com/url?sa=t&amp;#38;source=web&amp;#38;ct=res&amp;#38;cd=1&amp;#38;url=http%3A%2F%2Fcollaboration.csc.ncsu.edu%2Flaurie%2FPapers%2FTDDpaperv8.pdf&amp;#38;ei=WoTMSvSXMYSqtgfDnMjrAQ&amp;#38;usg=AFQjCNHk6TJnNC32UGD8cN65EWGjoQkTBA&amp;#38;sig2=pbzOxiSB7_HAOoBTyDqetQ"&gt;rather famous 2003 study&lt;/a&gt; (also in the list of google results) by Laurie Wiliams and Boby George. This study describes a controlled experiment that they conducted in three different companies.  Though Matt&amp;#8217;s summary above is based (in part) on that study, there is more to say.&lt;/p&gt;


	&lt;p&gt;In the George-William study teams that practiced &lt;span class="caps"&gt;TDD&lt;/span&gt; took 16% &lt;em&gt;longer&lt;/em&gt; to &lt;em&gt;claim that they were done&lt;/em&gt; than the teams that did not practice &lt;span class="caps"&gt;TDD&lt;/span&gt;. Apparently tests are more accurate than claims since the non-TDD teams failed to pass one third of the researcher&amp;#8217;s hidden acceptance tests, whereas the &lt;span class="caps"&gt;TDD&lt;/span&gt; teams passed about 6 out of 7.  To paraphrase Kent Beck: &amp;#8220;If it doesn&amp;#8217;t have to work, I can get it done a &lt;em&gt;lot&lt;/em&gt; faster!&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Another point of interest in this study is that the &lt;span class="caps"&gt;TDD&lt;/span&gt; teams produced a suite of automated tests with &lt;em&gt;very&lt;/em&gt; high test coverage (close to 100% in most cases) whereas most of the non-TDD teams did not produce such a suite; even though they had been instructed to.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Jim Shore wrote a review of &lt;a href="http://jamesshore.com/Blog/AoA-Correction-Test-Driven-Development.html"&gt;yet another research summary&lt;/a&gt; which I found in the same google search.  This one combines 7 different studies (including George-Williams).  Here the results range from dramatically improved quality and productivity to no observed effect.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Finally, there is &lt;a href="http://www.google.com/url?sa=t&amp;#38;source=web&amp;#38;ct=res&amp;#38;cd=4&amp;#38;url=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fesm%2Fnagappan_tdd.pdf&amp;#38;ei=y4rMSryKDeWltgf6rOXgAQ&amp;#38;usg=AFQjCNGO5ql_sCI2dG5oR6mN8EFBa2OZNA&amp;#38;sig2=U8nr4HFFE6Ezog93OIhRTw"&gt;this&lt;/a&gt; 2008 case Study of &lt;span class="caps"&gt;TDD&lt;/span&gt; at &lt;span class="caps"&gt;IBM&lt;/span&gt; and Microsoft which shows that TDDers enjoy a defect density reduction ranging from 30% to 90% (as measured by defect tracking tools) and a productivity cost of between 15% and 35% (the subjective opinion of the managers).  I refer you back to Kent Beck&amp;#8217;s comment above.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I&amp;#8217;m sure there is more research out there.  After all this was just one google search.  I think it&amp;#8217;s odd that the &lt;span class="caps"&gt;TDD&lt;/span&gt; detractors didn&amp;#8217;t find anything when they did &lt;em&gt;their&lt;/em&gt; google searches.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Oh yeah, and then there was that &lt;a href="http://www2.computer.org/portal/web/csdl/magazines/software#4"&gt;whole issue of &lt;span class="caps"&gt;IEEE&lt;/span&gt; Software&lt;/a&gt; that was dedicated to papers and research on &lt;span class="caps"&gt;TDD&lt;/span&gt;.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;What projects have been written with &lt;span class="caps"&gt;TDD&lt;/span&gt;, hmmm?&lt;/h2&gt;


	&lt;p&gt;Quite a few, actually.  The following is a list of projects that have an automated suite of unit tests with very high coverage.  Those that I know for a fact use &lt;span class="caps"&gt;TDD&lt;/span&gt;, I have noted as such.  The others, I can only surmise.  If you know of any others, please post a comment here.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;JUnit.  This one is kind of obvious.  JUnit was written by Kent Beck and Erich Gamma using &lt;span class="caps"&gt;TDD&lt;/span&gt; throughout.  If you measure software success by sheer distribution, this particular program is &lt;em&gt;wildly&lt;/em&gt; successful.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Fit.  Written by Ward Cunningham.  The progenitor of most current acceptance testing frameworks.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;FitNesse.  This testing framework has tens of thousands of users.  It is 70,000 lines of java code, with 90%+ code coverage.  &lt;span class="caps"&gt;TDD&lt;/span&gt; throughout.  Very small bug-list.  Again, if you measure by distribution, another raving success.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Cucumber, &lt;/li&gt;
		&lt;li&gt;Rspec.  These two are Testing frameworks in Ruby.  Of course you&amp;#8217;d expect a testing framework to be written with &lt;span class="caps"&gt;TDD&lt;/span&gt;, wouldn&amp;#8217;t you? I know these were. &lt;span class="caps"&gt;TDD&lt;/span&gt; throughout.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Limelight.  A gui framework in JRUby.  &lt;span class="caps"&gt;TDD&lt;/span&gt; throughout.&lt;/li&gt;
		&lt;li&gt;jfreechart. &lt;/li&gt;
		&lt;li&gt;Spring&lt;/li&gt;
		&lt;li&gt;JRuby&lt;/li&gt;
		&lt;li&gt;Smallsql&lt;/li&gt;
		&lt;li&gt;Ant&lt;/li&gt;
		&lt;li&gt;MarsProject&lt;/li&gt;
		&lt;li&gt;Log4J&lt;/li&gt;
		&lt;li&gt;Jmock&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Are there others?  I&amp;#8217;m sure there are.  This was just a quick web search.  
Again, if you know of more, please add a comment.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 08:32:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:31f3a32e-467c-4c54-9ec8-3b63fe961ff1</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome</link>
      <category>Uncle Bob's Blatherings</category>
      <category>Software Craftsmanship</category>
      <category>Agile Methods</category>
      <category>Clean Code</category>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Mania</title>
      <description>&lt;p&gt;The problem is, not everybody considering this/&lt;/p&gt;</description>
      <pubDate>Sun, 07 Mar 2010 06:09:18 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e1388a95-a3ad-4a3f-bdfe-430d77efb6f2</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-7724</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by tieTYT</title>
      <description>&lt;p&gt;Uncle Bob: I wish you&amp;#8217;d respond to the comment @triple-dot made (or at least the article he linked to).  I think it was the most interesting comment in this whole thread.&lt;/p&gt;</description>
      <pubDate>Thu, 15 Oct 2009 17:59:17 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:04031944-e34a-4e3b-9cd9-351e82c91b4c</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4798</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by NotherBob</title>
      <description>&lt;p&gt;Don&amp;#8217;t know what/when Kent said it, but this was the punch line of a story that went around before Kent was born. Here&amp;#8217;s the version I remember:&lt;/p&gt;


	&lt;p&gt;It seems a team of developers had implemented a complex set of business rules but their code was full of bugs and kept crashing. So another developer reimplemented the rules as a table-driven process. When he presented it to the team, the leader said, &amp;#8220;But ours is implemented in straight-line code. Your table-driven code will be a lot slower.&amp;#8221; The developer replied, &amp;#8220;But mine works.&amp;#8221; They went back and forth like this for a few rounds, until the developer finally said, &amp;#8220;Hey, if it doesn&amp;#8217;t have to work, I can make mine as fast as you want.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;You&amp;#8217;ve repurposed the joke to apply to development time. Still works.&lt;/p&gt;</description>
      <pubDate>Mon, 12 Oct 2009 15:04:09 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8be8475f-5400-43e0-9b5d-b79c660f1a72</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4695</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Joseph Beckenbach</title>
      <description>&lt;p&gt;Another app suite using TDD (as part of 18 months of small-team dials-to-11 Extreme Programming joy-ride):  Eidogen&amp;#8217;s TIP.  (bioinformatics)&lt;/p&gt;


	&lt;p&gt;As of my last involvement, April 2005:  250K lines of Java, all TDD by 350K lines of unit test code.  100% coverage by team fiat, only two defects (both cosmetic) shipped to customers, with some millions in revenues earned.  (The 18 months before XP and TDD had far less code and few tests of any sort, with nothing released and no revenue.)&lt;/p&gt;


	&lt;p&gt;In early 2005, we solved the SARS virus, ready to find drug candidates in silico, six months before the crystallographers.  TDD made that capability happen.&lt;/p&gt;</description>
      <pubDate>Mon, 12 Oct 2009 08:19:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b5aa445c-abb7-4824-a6f1-19464438ee98</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4691</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Stephane</title>
      <description>&lt;p&gt;Moq, one of the major Mocking framework in .NET has been written with TDD the whole way according to his author in this article. But I never checked the code myself :)&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2009/09/29/AreyousmartenoughtodowithoutTDD.aspx" rel="nofollow"&gt;http://www.clariusconsulting.net/blogs/kzu/archive/2009/09/29/AreyousmartenoughtodowithoutTDD.aspx&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 11 Oct 2009 17:10:09 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9d169636-2087-4ac6-a76d-31aca414a1d6</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4654</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Philip Schwarz</title>
      <description>&lt;p&gt;@Steve Seymour&lt;/p&gt;


	&lt;p&gt;You said:&lt;/p&gt;


&lt;blockquote&gt;
Oh my God, Uncle Bob. Are you still trying to convince the world that TDD is a wonderful technique that all disciplined, professional software engineers should follow? And are there still legions of people arguing against this?
&lt;/blockquote&gt;

	&lt;p&gt;These battles last decades! Less than a month ago, in &lt;a href="http://www.twit.tv/floss87" rel="nofollow"&gt;this interview&lt;/a&gt;, Kent Beck, the father of TDD, said:&lt;/p&gt;


&lt;blockquote&gt;
every idea that I have had that has taken off has taken 20 years, at least, so, TDD at this point is close to that old, and I would say that it is pretty much on track with the other things that I have done
...
&lt;br&gt;&lt;br&gt;
and TDD  seems to be like the second thing [after continuous integration] that is going to have some impact
&lt;/blockquote&gt;</description>
      <pubDate>Thu, 08 Oct 2009 19:21:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:dea8f1d9-edc7-4770-ba61-820e7f4d743f</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4579</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Chuck van der Linden</title>
      <description>&lt;p&gt;&amp;gt;&amp;gt;I can&#8217;t write a TDD suite before coding when I&#8217;m not entirely sure what I&#8217;ll be coding.&lt;/p&gt;


	&lt;p&gt;If you&amp;#8217;re not entirely sure what you&amp;#8217;ll be coding, you don&amp;#8217;t understand the problem you&amp;#8217;re trying to solve, or how what you are about to create is supposed to behave.&lt;/p&gt;


	&lt;p&gt;I would argue that in such a situation is is even MORE important to write the tests first as it forces you to gain a better understanding of what you are trying to create.  Of how what you are about to build is supposed to behave, and how you know it&amp;#8217;s working correctly or not.  How you know you are done.&lt;/p&gt;


	&lt;p&gt;That&amp;#8217;s a major part of TDD, it&amp;#8217;s not just the writing of the tests, it&amp;#8217;s that in order to write the tests you have to get yourself to a point that you a good enough understanding of what you&amp;#8217;re supposed to be building that you CAN write the tests.  It makes you better define the problem space.&lt;/p&gt;


	&lt;p&gt;If you run off and start coding before you know what you&amp;#8217;re doing, how do you know you&amp;#8217;ve written the right code? how do you avoid ending up writing a bunch of stuff that doesn&amp;#8217;t matter?  sure you could get lucky and fall into none of those traps, but having the test there first makes that a lot less likely.&lt;/p&gt;


	&lt;p&gt;Another value of writing the test first btw is you can watch it fail.  and knowing the test fails without the code working has value all it&amp;#8217;s own and is difficult to do after the fact.   That in itself tends to create better quality unit tests that are less likely to fail to detect problems if they occur.&lt;/p&gt;


	&lt;p&gt;(although I&amp;#8217;ve heard of some cool tools that make changes to the code and then report if tests don&amp;#8217;t fail as a result, which no matter if you are doing tdd or not, is a great concept for making sure you have good tests)&lt;/p&gt;</description>
      <pubDate>Thu, 08 Oct 2009 13:43:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:86ac7c83-4580-4f90-9e54-66ceee4f1a6d</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4561</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Rick T</title>
      <description>&lt;p&gt;TDD is much more obvious, and easy to accomplish with clarity and focus, for those projects that are simply a rewriting of existing code in a different language. The tests are self-evident, as is the destination.&lt;/p&gt;


	&lt;p&gt;That is the problem with TDD. While it is an obvious win for trivial tasks, for less-trivial, less-obvious tasks the merits are much less obvious. I can&amp;#8217;t write a TDD suite before coding when I&amp;#8217;m not entirely sure what I&amp;#8217;ll be coding.&lt;/p&gt;


	&lt;p&gt;I guess my point is that if you&amp;#8217;re working at an outsourcing sweatshop and the client says &amp;#8220;take A and B and sum them to C&amp;#8221;, the advantages and route to TDD is self-evident. If that isn&amp;#8217;t your genre, it&amp;#8217;s much more fuzzy. So when someone gives some claim that TDD is what &amp;#8220;professional&amp;#8221; developers do, they&amp;#8217;re really betraying the simplicity of their task.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Oct 2009 08:49:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3a064197-9498-46d9-b399-0e62ae66222d</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4547</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Steve Seymour</title>
      <description>&lt;p&gt;Oh my God, Uncle Bob.  Are you still trying to convince the world that TDD is a wonderful technique that all disciplined, professional software engineers should follow?  And are there still legions of people arguing against this?  And does everyone belonging to these legions not have the dedication, perseverance, and professionalism to actually commit themselves to TDD for an acceptable period of time before judging it honestly?  Would these people rather play with TDD for a few hours or maybe, just maybe, a few days, and then throw it away (like I did during my first exposure to it, though I did it with the idea of returning to it someday, thankfully which I did) and form an inexperienced opinion of it?&lt;/p&gt;


	&lt;p&gt;I know, I know, you&amp;#8217;re in a position of leadership and you are trying desperately to right the ship of the sad software world, a world severely lacking professionalism.  But, I can&amp;#8217;t help but wonder how much time, energy, and emotion you sink into this debate that is long over for anyone that has sincerely practiced TDD, and what other things you could be doing with your passion.  Why not just let those that argue against it go and reserve your time (and mine, for responding to this post) for better things?&lt;/p&gt;


	&lt;p&gt;And yup, I&amp;#8217;m a TDD snob: Anyone not regularly practicing TDD is not a professional developer, and anyone practicing it is.  Those that practice it aren&amp;#8217;t necessarily great developers, but they are at least professional in their approach. And I must say that some who don&amp;#8217;t practice TDD are great developers, but clearly they could be better if they TDDed.&lt;/p&gt;


	&lt;p&gt;It really is that simple.  Anyone that has seriously undertaken the TDD craft knows it, and anyone else doesn&amp;#8217;t have the right to voice an opinion.&lt;/p&gt;


	&lt;p&gt;Please, Uncle Bob, go back to writing down thoughts concerning something else.  You are a wonderful writer with often profound thoughts that I very much enjoy reading. Let the lazies go back to their work.  Some of them are good developers and most are not, and there is enough written on this topic (by you alone!) to initiate at least a portion of them to try TDD and to realize its vast benefits.&lt;/p&gt;


	&lt;p&gt;And don&amp;#8217;t give too much credit to Joel in order to soften your chastising of him: his original post wasn&amp;#8217;t that good.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Oct 2009 08:06:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6950c441-f720-4b62-a415-87941ac09492</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4546</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Esko Luontola</title>
      <description>&lt;p&gt;Mi&#353;ko Hevery posted recently his measurements about how much of his time is taken by writing tests. The magic number is about 10%. A big reason is that the test code is always very simple compared to the production code &amp;#8211; no conditionals, no loops. Just a couple of method calls and assertions linearly. He also goes to outline the benefits, which make the extra 10% well worth it.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://googletesting.blogspot.com/2009/10/cost-of-testing.html" rel="nofollow"&gt;http://googletesting.blogspot.com/2009/10/cost-of-testing.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 08 Oct 2009 03:55:58 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d6ef138f-6218-4745-8296-235a712a20ed</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4536</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Wedge</title>
      <description>&lt;p&gt;TDD proponents often come off as arrogant, dogmatic cultists, which I think explains much of the strength of the backlash against TDD.&lt;/p&gt;


	&lt;p&gt;TDD likely has very real benefits, but even so it is no silver bullet, nor is it a panacea for every software development malady. Pragmatists recognize that different tools and different methodologies are needed in different situations, and over-engineering can be just as dangerous as under-engineering (a carbon-fiber toilet is just as dumb as a construction crane made of toothpicks and glue).&lt;/p&gt;


	&lt;p&gt;More so, when experienced developers who have long histories of putting out successful, profitable, useful software hear the message that it&amp;#8217;s not possible to be a serious software engineer without practicing TDD or that every single software project on Earth should be using TDD they may get a little defensive. Or perhaps more than a little. Indeed, they may mentally put the TDD proponents into the bozo bin.&lt;/p&gt;


	&lt;p&gt;Again, TDD likely has very real benefits, but those benefits are incremental, and they are not necessarily realized on every software project (few methodologies are). Once TDDers begin to see the world as something other than a universe of nails, then perhaps TDD detractors will have less to complain about, and pragmatists may start taking TDD more seriously.&lt;/p&gt;</description>
      <pubDate>Thu, 08 Oct 2009 03:46:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0ec01096-ab74-4e96-a0c6-d914b74ceb4c</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4535</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Jens</title>
      <description>&lt;p&gt;Though being quite positive towards TDD I have severe doubts in the results of many of the experiments.&lt;/p&gt;


	&lt;p&gt;In Karlsruhe, Germany, there was a quasi-experiment showing that TDD research results from experiments with students are not really generalisable to a population of professional developers. &lt;a href="http://www.ipd.uka.de/Tichy/uploads/publikationen/136/MuellerHoefer2007.pdf" rel="nofollow"&gt;http://www.ipd.uka.de/Tichy/uploads/publikationen/136/MuellerHoefer2007.pdf&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 08 Oct 2009 01:05:24 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:78c35cfb-2094-4adf-9a12-12c82e2ed559</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4533</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by James</title>
      <description>&lt;p&gt;&amp;gt; I&#8217;m going to have to test the code I write anyway, and I&#8217;m motivated to avoid manual work so I might as well automate it. Besides, I like writing code (writing tests is writing code).&lt;/p&gt;


	&lt;p&gt;Doesn&amp;#8217;t really say much about test first or last. Writting code for the sake of writting code is wasting the client&amp;#8217;s time if it can be avoided. This include writting duplicate test cases that test the same functionality in different places.&lt;/p&gt;


	&lt;p&gt;&amp;gt; I&#8217;ll know when I&#8217;m done. Then I&#8217;ll have a chance to go back and use hindsight to simplify my code.&lt;/p&gt;


	&lt;p&gt;If you have to go back and simplify your coee, then you&amp;#8217;re not done. You might have a functionally correct implementation but a poor one that might not meet the system qualities (non-functional requirements.) You know when you can visibly see your code working through your portotypes. Testing first is not a neccesary indicator.&lt;/p&gt;


	&lt;p&gt;&amp;gt;  I&#8217;m addicted to the thrill of passing tests (green bar!)&lt;/p&gt;


	&lt;p&gt;Even false positives? If you have a psychological need to see green bars then TDD might help you.&lt;/p&gt;


	&lt;p&gt;&amp;gt; I&#8217;d rather write code than documentation or javadocs&lt;/p&gt;


	&lt;p&gt;This sounds like hacking to me. It is easier to look through diagrams than to look through 100 test cases to immediately know what your code is supposed to do and the relationships between your objects. Furthermore, have you used a library that is poorly documented? Imagine another team is using your component. It&amp;#8217;s unprofessional unless you work in a small close-nit team&lt;/p&gt;


	&lt;p&gt;&amp;gt; I&#8217;d rather work on new features, not being stuck in a debugger fixing things I broke because I didn&#8217;t have tests.&lt;/p&gt;


	&lt;p&gt;Didn&amp;#8217;t really have anything to do with TDD&lt;/p&gt;


	&lt;p&gt;&amp;gt;  My tests are canned thoughts that I can bottle up and then open up all at once without using brain cycles for thinking through the contexts and complexities I have already thought about. While my tests run, I can think about the next steps or go get a coffee and feel like I&#8217;m still being productive.&lt;/p&gt;


	&lt;p&gt;Sounds to me like you have problem articulating ideas and thoughts without touching the keyboard. In addition, you&amp;#8217;re using tests as a procrastination to doing the actual thinking.&lt;/p&gt;


	&lt;p&gt;&amp;gt; TDD helps me eliminate waste by catching defects before I have even written them.&lt;/p&gt;


	&lt;p&gt;This doesn&amp;#8217;t make sense. Code testing code. If you have bad tests then even with good code, it would still fail sending you on a wild goose chase. This happens to me before. Why do trust your test code more than you trust your production code?&lt;/p&gt;


	&lt;p&gt;&amp;gt; Better design decisions: TDD helps me keep code clean, simple and loosely coupled.&lt;/p&gt;


	&lt;p&gt;No it doesn&amp;#8217;t. Experience and knowledge in design will help you keep your code clean and loosely couple. If you lack these skills you&amp;#8217;re just gonna stuck with bad tests and bad code.&lt;/p&gt;


	&lt;p&gt;&amp;gt; Lately I have been back-filling missing tests on a legacy code base and I am feeling the pain of writing tests for code that was not written with TDD, and is very hard to test. Because of this, writing the tests takes a lot longer. It would have been much easier to write the tests if they were test-driven in the first place (we have experienced this because there are parts of the system in which we reimplemented with code that was written using TDD)&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s hard to test because it was designed badly, not because it wasn&amp;#8217;t done using TDD. I&amp;#8217;ve seen teams who did TDD and ends up writing tests for their tests.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 23:00:22 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:287a0ed8-6a48-456c-94ff-9aeea40d180b</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4532</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Tim Andersen</title>
      <description>&lt;p&gt;&lt;b&gt;I like TDD for the following reasons:&lt;/b&gt;
&lt;ol&gt;
&lt;li&gt;I&amp;#8217;m going to have to test the code I write anyway, and I&amp;#8217;m motivated to avoid manual work so I might as well automate it.  Besides, I like writing code (writing tests is writing code).
&lt;/li&gt;&lt;li&gt;
I&amp;#8217;ll know when I&amp;#8217;m done.  Then I&amp;#8217;ll have a chance to go back and use hindsight to simplify my code.
&lt;/li&gt;&lt;li&gt;
I&amp;#8217;m addicted to the thrill of passing tests (green bar!)
&lt;/li&gt;&lt;li&gt;
I&amp;#8217;d rather write code than documentation or javadocs
&lt;/li&gt;&lt;li&gt;
I&amp;#8217;d rather work on new features, not being stuck in a debugger fixing things I broke because I didn&amp;#8217;t have tests.
&lt;/li&gt;&lt;li&gt;
My tests are canned thoughts that I can bottle up and then open up all at once without using brain cycles for thinking through the contexts and complexities I have already thought about.  While my tests run, I can think about the next steps or go get a coffee and feel like I&amp;#8217;m still being productive.
&lt;/li&gt;&lt;li&gt;
TDD helps me eliminate waste by catching defects before I have even written them.
&lt;/li&gt;&lt;li&gt;
Better design decisions: TDD helps me keep code clean, simple and loosely coupled.  Lately I have been back-filling missing tests on a legacy code base and I am feeling the pain of writing tests for code that was not written with TDD, and is very hard to test.  Because of this, writing the tests takes a lot longer.  It would have been much easier to write the tests if they were test-driven in the first place (we have experienced this because there are parts of the system in which we reimplemented with code that was written using TDD)
&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 22:05:50 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:eda427b9-3422-4a2c-b881-3fe07f4e3757</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4531</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by James</title>
      <description>&lt;p&gt;@Philip Schwarz&lt;/p&gt;


	&lt;p&gt;The article you linked to makes no sense. It work on a flaw logic of: C works for A, B resembles A therefore C should work for B as well.
C in this case is the logic for Queuing Theory, A is the Queuing Theory and B is TDD. The author basically saying that since TDD looks similar to the process described by Queuing Theory, therefore the logic of Queuing Theory must validate TDD.&lt;/p&gt;


	&lt;p&gt;The important parts of the statement missed by author is highlighted by me.&lt;/p&gt;


	&lt;p&gt;&amp;#8220;Given a process B, which follows a process A, &lt;strong&gt;sometimes&lt;/strong&gt; in performing B we need to perform some of A again. We can remove the need to rework by taking &lt;strong&gt;some&lt;/strong&gt; portion of process B and performing it before process A1.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s my observation:&lt;/p&gt;


	&lt;p&gt;1. Test is code. Since code is testing code it doesn&amp;#8217;t matter what occurs before or after.
2. &lt;strong&gt;writing only the code we need&lt;/strong&gt; should be a given. The only time when you&amp;#8217;re not doing that is when you&amp;#8217;re hacking and have no idea what you are doing.
3. Test first only works if you can assert against a known solution. Working out the 1000th largest prime does not have a known solution at the start.
4. Short cycles is not exclusive to TDD.
5. Imagine a list of requirements [1,2,3,4, ... n]. TDD start with the first requirement and works it way through. There is a high chance of reaching a requirement j (1 &amp;lt; j &amp;lt; n) that would obsolete the requirements before it. TDD would produce wasteful code if the programmer didn&amp;#8217;t look at the big picture.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 19:56:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:11a75a7f-26f1-4677-91f4-6de1eb462d9b</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4528</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Philip Schwarz</title>
      <description>&lt;p&gt;@James&lt;/p&gt;


	&lt;p&gt;You said:  &lt;i&gt;I think you missed this bit:&#8220;When I started Max I didn&#8217;t have any automated tests for the first month. I did all of my testing manually. After I got the first few subscribers I went back and wrote tests for the existing functionality.&#8221;
&lt;i&gt;&lt;/i&gt;&lt;/i&gt;&lt;/p&gt;


	&lt;p&gt;I did not: Junit and Junit Max are two different products. Re-read Beck&amp;#8217;s post to see how the different natures of the two products justify using TDD for one, but not for the other.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 19:32:42 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2aed765f-9a73-4b2f-a40f-2dff37c6314e</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4527</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Philip Schwarz</title>
      <description>&lt;p&gt;@Geir Hedemark&lt;/p&gt;


	&lt;p&gt;You said: &lt;i&gt;I can just hear the cynics already: &#8220;But what real-world, not-a-library-projects have used TDD&#8221;?&lt;/i&gt;&lt;/p&gt;


Is the following, from &lt;a href="http://www.notesfromatooluser.com/2008/11/misconceptions-with-test-driven-development.html#more" rel="nofollow"&gt;Misconceptions with Test Driven Development&lt;/a&gt;, part of the problem?:
&lt;blockquote&gt;
So if TDD can be used on a large scale and to help drive architecture there must be examples. The leading members of the community (JB Rainsberger, Nat Pryce and Lasse Koskela) all have clients with products built and architected using TDD. Unfortunately these are all closed source or clients that don&amp;#8217;t want to be talked about publicly.
&lt;/blockquote&gt;</description>
      <pubDate>Wed, 07 Oct 2009 19:21:51 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:718b24e8-cdff-4666-80d0-63be76aed1fa</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4526</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Philip Schwarz</title>
      <description>&lt;p&gt;@asdf You said: &lt;i&gt;TDD is just another religion for hacks to sell books and conferences on&lt;/i&gt;&lt;/p&gt;


	&lt;p&gt;From JB Rainsberger, one of the leading members of the TDD community:&lt;/p&gt;


&lt;blockquote&gt;
It surprises me, from time to time, how much I still need to justify test-driven development to prospects and would-be course attendees. Many feel that TDD has crossed the chasm, while others still see TDD as a cultish practice worth marginalizing. &lt;b&gt;I take some blame for those who find TDD cultish, because until now I haven&#8217;t had a strong, sensible, theoretical basis to justify TDD as an idea. I could do no better than &#8220;it works for me&#8221; or &#8220;my friends like it&#8221;. That has changed&amp;#8230; 
&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;b&gt;If you buy in to ideas from Theory of Constraints or Lean Manufacturing, then I think I now have a stronger argument to justify the core programming practices in extreme programming in particular and agile software development in general&lt;b&gt;. I don&#8217;t even need all of the Theory of Constraints but rather &lt;b&gt;a simple appeal to fundamental concepts in Queuing Theory&lt;/b&gt;.
&lt;/b&gt;&lt;/b&gt;&lt;/blockquote&gt;

	&lt;p&gt;Read &lt;a href="http://www.jbrains.ca/permalink/285" rel="nofollow"&gt;the full post&lt;/a&gt;, which includes the following take-home point:&lt;/p&gt;


&lt;blockquote&gt;
&lt;b&gt;Where test-first programming helps most teams most of the time reduce their mistake count to near zero, test-driven development helps them reduce their design inventory&#8212;mostly code that gets in our way because it doesn&#8217;t actively help us deliver a feature&#8212;to near zero&lt;/b&gt;. This further increases productivity and improves their ability to deliver by helping them waste less time agonizing over design problems they find costly to fix.
&lt;/blockquote&gt;</description>
      <pubDate>Wed, 07 Oct 2009 19:13:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:aa14abb4-7d2a-4ee5-8e2f-88b17435c871</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4525</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Grok2</title>
      <description>&lt;p&gt;I would like real-world examples of projects done by large teams that used TDD. It&amp;#8217;s simply point-of-view when a single person or a small team (3-4 cohesive members) say they used TDD for a product or web-site, but it really proves the point if there is a real-world example of a large team using TDD successfully.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 18:57:33 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:dd1d4dae-c23a-4798-8b3b-4bec5a4c4ccd</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4524</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by noone@none.org</title>
      <description>&lt;p&gt;&amp;#8220;It seems that Uncle Bob is censoring messages that mention the critique of his first link study by Jacob Proffitt.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;I doubt it. As of now it is very visible in  a message by triple-dot above. I think he is completely deluded in his fixation on TDD and denigration of programmers who don&amp;#8217;t use it, but give the man his due. He doesn&amp;#8217;t censor critical comments (afaik) and has the guts to face his detractors.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 18:24:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3fda2ffa-f92e-48ae-b469-e7fcc4dddd37</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4522</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by James</title>
      <description>&lt;p&gt;It seems that Uncle Bob is censoring messages that mention the critique of his first link study by Jacob Proffitt.&lt;/p&gt;


	&lt;p&gt;If you want to read it, use google and search for &amp;#8220;TDD Proven Effective! Or is it?&amp;#8221;&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 18:15:38 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:486d8f33-f8f3-4f3b-ab9d-1d030027a401</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4520</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by James</title>
      <description>&lt;p&gt;TDD Proven Effective! Or is it?&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.theruntime.com/blogs/jacob/archive/2008/01/22/tdd-proven-effective-or-is-it.aspx" rel="nofollow"&gt;http://www.theruntime.com/blogs/jacob/archive/2008/01/22/tdd-proven-effective-or-is-it.aspx&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 18:13:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:953b44dd-cb3a-4064-a748-46d77ce7848d</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4519</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by James</title>
      <description>&lt;p&gt;@Philip Schwarz&lt;/p&gt;


	&lt;p&gt;I think you missed this bit.&lt;/p&gt;


	&lt;p&gt;&amp;#8220;When I started Max I didn&#8217;t have any automated tests for the first month. I did all of my testing manually. After I got the first few subscribers I went back and wrote tests for the existing functionality.&amp;#8221;&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 18:11:45 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b58aca63-76e2-4cd3-94b4-7ddeef188cd3</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4518</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Philip Schwarz</title>
      <description>&lt;p&gt;@James&lt;/p&gt;


	&lt;p&gt;You said: &lt;i&gt;How do you manage to write Junit using TDD?&lt;/i&gt;&lt;/p&gt;


	&lt;p&gt;My guess is that you use some form of &lt;a href="http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29" rel="nofollow"&gt;boostrapping&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Wed, 07 Oct 2009 18:00:18 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:25c12f7c-b1d8-404a-8b50-455090efe4d6</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4517</link>
    </item>
    <item>
      <title>"TDD Derangement Syndrome" by Philip Schwarz</title>
      <description>&lt;p&gt;@James&lt;/p&gt;


	&lt;p&gt;You said: &lt;i&gt;How do you manage to write Junit using TDD?...I know that this isn&#8217;t wikipedia, but can you provide any source to ANYTHING that you claimed to be done using TDD?&lt;/i&gt;&lt;/p&gt;


	&lt;p&gt;In &lt;a href="http://www.threeriversinstitute.org/blog/?p=187" rel="nofollow"&gt;this blog entry&lt;/a&gt;, Kent Beck, one of the authors of JUnit, said:&lt;/p&gt;


&lt;blockquote&gt;
Working on JUnit, the whole bag of XP practices makes sense. We always test-drive development. We refactor whenever we can, sometimes trying 3-4 approaches before hitting one we are willing to live with.
&lt;/blockquote&gt;</description>
      <pubDate>Wed, 07 Oct 2009 17:57:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:564b830f-48ba-4444-adb3-8fb32c25373c</guid>
      <link>http://blog.objectmentor.com/articles/2009/10/07/tdd-derangement-syndrome#comment-4516</link>
    </item>
  </channel>
</rss>
