<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Test-Driven Development. A Cognitive Justification?</title>
	<atom:link href="http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/</link>
	<description>Working software daily</description>
	<lastBuildDate>Tue, 24 Aug 2010 08:22:43 +0100</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: 一种消灭测试工作的观点 &#187; Taobao QA Team - 做测试的行业标准</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-577</link>
		<dc:creator>一种消灭测试工作的观点 &#187; Taobao QA Team - 做测试的行业标准</dc:creator>
		<pubDate>Tue, 01 Sep 2009 21:18:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-577</guid>
		<description>[...] “通过单元测试可以改善代码质量”这一观点已经得到广泛认可。培训师、顾问兼咨询师Michael Feathers在最近的帖子中对其提出了质疑。他谈及单元测试、集成测试、TDD和净室软件开发（Clean Room Software Development），认为代码质量是反复思考的结果，仅靠解决bug无法获得。M3P的独立咨询师Steve Freeman进一步阐述了Michael的观点，从“认知方面对TDD进行了分析”，并解释了TDD的好处从何而来。 [...]</description>
		<content:encoded><![CDATA[<p>[...] &acirc;&eacute;&egrave;&iquest;&aring;&aring;&aelig;&micro;&egrave;&macr;&aring;&macr;&auml;&raquo;&yen;&aelig;&sup1;&aring;&auml;&raquo;&pound;&ccedil;&nbsp;&egrave;&acute;&uml;&eacute;&acirc;&egrave;&iquest;&auml;&cedil;&egrave;&sect;&ccedil;&sup1;&aring;&middot;&sup2;&ccedil;&raquo;&aring;&frac34;&aring;&deg;&aring;&sup1;&iquest;&aelig;&sup3;&egrave;&reg;&curren;&aring;&macr;&atilde;&aring;&sup1;&egrave;&reg;&shy;&aring;&cedil;&atilde;&eacute;&iexcl;&frac34;&eacute;&reg;&aring;&frac14;&aring;&uml;&egrave;&macr;&cent;&aring;&cedil;Michael Feathers&aring;&uml;&aelig;&egrave;&iquest;&ccedil;&aring;&cedil;&aring;&shy;&auml;&cedil;&shy;&aring;&macr;&sup1;&aring;&para;&aelig;&aring;&ordm;&auml;&ordm;&egrave;&acute;&uml;&ccedil;&atilde;&auml;&raquo;&egrave;&deg;&aring;&aring;&aring;&aelig;&micro;&egrave;&macr;&atilde;&eacute;&aelig;&aelig;&micro;&egrave;&macr;&atilde;TDD&aring;&aring;&aring;&reg;&curren;&egrave;&frac12;&macr;&auml;&raquo;&para;&aring;&frac14;&aring;&iuml;&frac14;Clean Room Software Development&iuml;&frac14;&iuml;&frac14;&egrave;&reg;&curren;&auml;&cedil;&ordm;&auml;&raquo;&pound;&ccedil;&nbsp;&egrave;&acute;&uml;&eacute;&aelig;&macr;&aring;&aring;&curren;&aelig;&egrave;&ccedil;&ccedil;&raquo;&aelig;&iuml;&frac14;&auml;&raquo;&eacute;&nbsp;&egrave;&sect;&pound;&aring;&sup3;bug&aelig;&nbsp;&aelig;&sup3;&egrave;&middot;&aring;&frac34;&atilde;M3P&ccedil;&ccedil;&not;&ccedil;&laquo;&aring;&uml;&egrave;&macr;&cent;&aring;&cedil;Steve Freeman&egrave;&iquest;&auml;&cedil;&aelig;&shy;&yen;&eacute;&egrave;&iquest;&deg;&auml;&ordm;Michael&ccedil;&egrave;&sect;&ccedil;&sup1;&iuml;&frac14;&auml;&raquo;&acirc;&egrave;&reg;&curren;&ccedil;&yen;&aelig;&sup1;&eacute;&cent;&aring;&macr;&sup1;TDD&egrave;&iquest;&egrave;&iexcl;&auml;&ordm;&aring;&aelig;&acirc;&iuml;&frac14;&aring;&sup1;&para;&egrave;&sect;&pound;&eacute;&auml;&ordm;TDD&ccedil;&aring;&yen;&frac12;&aring;&curren;&auml;&raquo;&auml;&frac12;&egrave;&aelig;&yen;&atilde; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: steve.freeman</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-272</link>
		<dc:creator>steve.freeman</dc:creator>
		<pubDate>Sun, 24 Aug 2008 22:03:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-272</guid>
		<description>@Brian. I try to make the TDD effect works at multiple levels in the code, start with high-level tests to at least get me focussed on what I&#039;m trying to achieve, use low-level tests to nudge me in the right design directions. 

I&#039;ve jumped into existing TDD code bases before. I think I look at the code when I&#039;m trying to understand the general structure, and look at the tests when I&#039;m trying to make changes. So I guess, to think of it physically, I have the larger structure of the code behind me, and in that context I have a unit test in front of me which is the gatekeeper to the next thing I want to change. Er, or something like that.</description>
		<content:encoded><![CDATA[<p>@Brian. I try to make the <span class="caps">TDD </span>effect works at multiple levels in the code, start with high-level tests to at least get me focussed on what I&#8217;m trying to achieve, use low-level tests to nudge me in the right design directions. </p>
<p>I&#8217;ve jumped into existing <span class="caps">TDD </span>code bases before. I think I look at the code when I&#8217;m trying to understand the general structure, and look at the tests when I&#8217;m trying to make changes. So I guess, to think of it physically, I have the larger structure of the code behind me, and in that context I have a unit test in front of me which is the gatekeeper to the next thing I want to change. Er, or something like that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian Marick</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-269</link>
		<dc:creator>Brian Marick</dc:creator>
		<pubDate>Sun, 24 Aug 2008 17:31:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-269</guid>
		<description>@mfeathers: &quot;When you do TDD, the context is right there staring you in the face over and over again.&quot;

That makes me wonder about TDD and learning an existing code base. I&#039;m writing a book on RubyCocoa, planned to introduce TDD fairly early, but have kept bumping it to later and later in the text. Some of the reasons have nothing to do with the topic of this post, but others may. Part of what I have to do with the book is explain how and why a large, complicated framework *makes sense* - how it hangs together as a whole - and the tests somehow seemed to get in the way. Maybe because they focused too much attention on the context, not enough on the concept?

That may not be true. I used TDD from early on in my previous book, which was about teaching Ruby to novices, and it worked just fine. But it does make me think about &quot;tests as documentation&quot;, something that&#039;s never quite worked out for me. How can we make what is mostly a historical trace of a development process into a teaching text without a whole lot of tinkering and rewriting?

(If that&#039;s even important: in a long-lived collocated project, nobody might ever need to approach the code base alone. They&#039;d always be paired with someone who knew it and could speak what the tests didn&#039;t say. Things are different with open source, though.)</description>
		<content:encoded><![CDATA[<p>@mfeathers: &#8220;When you do <span class="caps">TDD, </span>the context is right there staring you in the face over and over again.&#8221;</p>
<p>That makes me wonder about <span class="caps">TDD </span>and learning an existing code base. I&#8217;m writing a book on RubyCocoa, planned to introduce <span class="caps">TDD </span>fairly early, but have kept bumping it to later and later in the text. Some of the reasons have nothing to do with the topic of this post, but others may. Part of what I have to do with the book is explain how and why a large, complicated framework <strong>makes sense</strong> &#8211; how it hangs together as a whole &#8211; and the tests somehow seemed to get in the way. Maybe because they focused too much attention on the context, not enough on the concept?</p>
<p>That may not be true. I used <span class="caps">TDD </span>from early on in my previous book, which was about teaching Ruby to novices, and it worked just fine. But it does make me think about &#8220;tests as documentation&#8221;, something that&#8217;s never quite worked out for me. How can we make what is mostly a historical trace of a development process into a teaching text without a whole lot of tinkering and rewriting?</p>
<p>(If that&#8217;s even important: in a long-lived collocated project, nobody might ever need to approach the code base alone. They&#8217;d always be paired with someone who knew it and could speak what the tests didn&#8217;t say. Things are different with open source, though.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug Stewart &#187; Blog Archive &#187; Promiscuous Pairing and Beginners Mind</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-268</link>
		<dc:creator>Doug Stewart &#187; Blog Archive &#187; Promiscuous Pairing and Beginners Mind</dc:creator>
		<pubDate>Sun, 24 Aug 2008 17:18:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-268</guid>
		<description>[...] http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/ [...]</description>
		<content:encoded><![CDATA[<p>[...] <a href="http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/" rel="nofollow">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/</a> [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug Stewart</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-266</link>
		<dc:creator>Doug Stewart</dc:creator>
		<pubDate>Sun, 24 Aug 2008 16:02:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-266</guid>
		<description>Excellent posts and comments. Arriving at solutions organically sometimes cuts down on waste but almost always achieves the better approach - always when assuming relentless refactoring. Short-circuiting expert behavior really enforces the principle that the design will become what it needs to and should be, from its own perspective.</description>
		<content:encoded><![CDATA[<p>Excellent posts and comments. Arriving at solutions organically sometimes cuts down on waste but almost always achieves the better approach &#8211; always when assuming relentless refactoring. Short-circuiting expert behavior really enforces the principle that the design will become what it needs to and should be, from its own perspective.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Another reason for licensing programmers &#124; Steve Freeman</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-253</link>
		<dc:creator>Another reason for licensing programmers &#124; Steve Freeman</dc:creator>
		<pubDate>Tue, 12 Aug 2008 21:45:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-253</guid>
		<description>[...] Test-Driven Development also helps by smoothing the flow, removing the Variable Ratio effect, and, as I wrote before, by breaking us out of the programming Tar Pit long enough to refocus on the real [...]</description>
		<content:encoded><![CDATA[<p>[...] Test-Driven Development also helps by smoothing the flow, removing the Variable Ratio effect, and, as I wrote before, by breaking us out of the programming Tar Pit long enough to refocus on the real [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kris Kemper</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-251</link>
		<dc:creator>Kris Kemper</dc:creator>
		<pubDate>Sun, 20 Jul 2008 20:44:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-251</guid>
		<description>&lt;strong&gt;Cognitive Benefit of TDD: Confirmation Driven Development?...&lt;/strong&gt;

I recently read an blog post[1] describing a cognitive justification for test driven development. I think the topic is interesting. In doing TDD, there are a variety of reasons for why we write tests first, and it isn&#8217;t always to ensure correctne...</description>
		<content:encoded><![CDATA[<p><strong>Cognitive Benefit of <span class="caps">TDD</span>: Confirmation Driven Development?&#8230;</strong></p>
<p>I recently read an blog post<sup class="footnote"><a href="#fn1">1</a></sup> describing a cognitive justification for test driven development. I think the topic is interesting. In doing <span class="caps">TDD, </span>there are a variety of reasons for why we write tests first, and it isn&#8217;t always to ensure correctne&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Harvey</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-249</link>
		<dc:creator>David Harvey</dc:creator>
		<pubDate>Wed, 16 Jul 2008 13:21:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-249</guid>
		<description>Great post, Steve, and got me thinking a good deal.

Breaking the expert mindset can work both for pairing and TDD. I&#039;ve found a real (and constructive) tension between an ingrained habit of approaching problems by thinking about structure and pattern (blame the musician!), and the context-driven imperative of test-first (&quot;this is what the code wants to look like&quot; - thanks to Paul Dyson for this!).

I don&#039;t think in either case this is _guaranteed_, though - we&#039;ve all got experience of groups descending rapidly into group-think, and there&#039;s no reason to believe that - if we write our tests first - the way the relationships and responsibilities in the code evolve will necessarily be that different from the last time we did it. In either case the onus is on the individual to allow themselves to be challenged out of their well-worn grooves - I&#039;ll concede that promiscuous pairing helps (just so long as the nature of the pairing practice is understood by both, which is of course not guaranteed...)  but fundamentally, individuals and groups don&#039;t change without needing to, wanting to, and reflecting.</description>
		<content:encoded><![CDATA[<p>Great post, Steve, and got me thinking a good deal.</p>
<p>Breaking the expert mindset can work both for pairing and <span class="caps">TDD.</span> I&#8217;ve found a real (and constructive) tension between an ingrained habit of approaching problems by thinking about structure and pattern (blame the musician!), and the context-driven imperative of test-first (&#8221;this is what the code wants to look like&#8221; &#8211; thanks to Paul Dyson for this!).</p>
<p>I don&#8217;t think in either case this is <em>guaranteed</em>, though &#8211; we&#8217;ve all got experience of groups descending rapidly into group-think, and there&#8217;s no reason to believe that &#8211; if we write our tests first &#8211; the way the relationships and responsibilities in the code evolve will necessarily be that different from the last time we did it. In either case the onus is on the individual to allow themselves to be challenged out of their well-worn grooves &#8211; I&#8217;ll concede that promiscuous pairing helps (just so long as the nature of the pairing practice is understood by both, which is of course not guaranteed&#8230;)  but fundamentally, individuals and groups don&#8217;t change without needing to, wanting to, and reflecting.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: steve.freeman</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-241</link>
		<dc:creator>steve.freeman</dc:creator>
		<pubDate>Mon, 30 Jun 2008 21:20:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-241</guid>
		<description>@Joseph. Thanks. Nice link.</description>
		<content:encoded><![CDATA[<p>@Joseph. Thanks. Nice link.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joseph Pelrine</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-240</link>
		<dc:creator>Joseph Pelrine</dc:creator>
		<pubDate>Sat, 28 Jun 2008 13:56:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-240</guid>
		<description>Great post, Steve. All too true. You might wnt to check out this article (http://www.nytimes.com/2007/12/30/business/30know.html) for some more arguments about why it&#039;s a good idea to slow experts down a bit.</description>
		<content:encoded><![CDATA[<p>Great post, Steve. All too true. You might wnt to check out this article (<a href="http://www.nytimes.com/2007/12/30/business/30know.html" rel="nofollow">http://www.nytimes.com/2007/12/30/business/30know.html</a>) for some more arguments about why it&#8217;s a good idea to slow experts down a bit.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The Inquisitive Coder &#187; Blog Archive &#187; Weekly Links 9</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-238</link>
		<dc:creator>The Inquisitive Coder &#187; Blog Archive &#187; Weekly Links 9</dc:creator>
		<pubDate>Sat, 21 Jun 2008 10:12:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-238</guid>
		<description>[...] You Wanted To Know About MVC and MVP But Were Afraid To Ask The Flawed Theory Behind Unit Testing Test-Driven Development. A Cognitive Justification? TDD, Mocks and [...]</description>
		<content:encoded><![CDATA[<p>[...] You Wanted To Know About <span class="caps">MVC </span>and <span class="caps">MVP</span> But Were Afraid To Ask The Flawed Theory Behind Unit Testing Test-Driven Development. A Cognitive Justification? <span class="caps">TDD,</span> Mocks and [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ilja Preuß</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-235</link>
		<dc:creator>Ilja Preuß</dc:creator>
		<pubDate>Wed, 18 Jun 2008 09:04:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-235</guid>
		<description>Thanks for your great post - the reasoning certainly rings true for me. I always felt that doing TDD significantly changed the way I tackled a problem, but always struggled putting it into words.</description>
		<content:encoded><![CDATA[<p>Thanks for your great post &#8211; the reasoning certainly rings true for me. I always felt that doing <span class="caps">TDD </span>significantly changed the way I tackled a problem, but always struggled putting it into words.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: The Punch Barrel / Test-Driven Development. A Cognitive Justification?</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-234</link>
		<dc:creator>The Punch Barrel / Test-Driven Development. A Cognitive Justification?</dc:creator>
		<pubDate>Mon, 16 Jun 2008 09:40:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-234</guid>
		<description>[...] Test-Driven Development. A Cognitive Justification? [...]</description>
		<content:encoded><![CDATA[<p>[...] Test-Driven Development. A Cognitive Justification? [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin Jack</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-233</link>
		<dc:creator>Colin Jack</dc:creator>
		<pubDate>Sun, 15 Jun 2008 18:03:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-233</guid>
		<description>Wow, Michaels post resulted in two other equally interesting posts about different topics. Good stuff.</description>
		<content:encoded><![CDATA[<p>Wow, Michaels post resulted in two other equally interesting posts about different topics. Good stuff.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Feathers</title>
		<link>http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/comment-page-1/#comment-232</link>
		<dc:creator>Michael Feathers</dc:creator>
		<pubDate>Sun, 15 Jun 2008 17:00:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.m3p.co.uk/blog/2008/06/15/test-driven-development-a-cognitive-justification/#comment-232</guid>
		<description>That is interesting.  One of the things that I noticed early on about TDD is that is forces me into a reflective mindset.  In traditional design it&#039;s easy treat design as a blank sheet.  You draw some boxes and mentally proof your collaborations.  In the process it&#039;s easy to forget the context.

When you do TDD, the context is right there staring you in the face over and over again.  Each change that you make is in the context of code you or someone else have written, and programming becomes more akin to sculpting or sensitive gardening, an activity where you have to look at what you have and make a decision about  what to do next.

To me, that&#039;s the core of it.. getting people to pay at least as much attention to &lt;em&gt;what is there&lt;/em&gt; as they do to their ideas of what should be there.</description>
		<content:encoded><![CDATA[<p>That is interesting.  One of the things that I noticed early on about <span class="caps">TDD </span>is that is forces me into a reflective mindset.  In traditional design it&#8217;s easy treat design as a blank sheet.  You draw some boxes and mentally proof your collaborations.  In the process it&#8217;s easy to forget the context.</p>
<p>When you do <span class="caps">TDD, </span>the context is right there staring you in the face over and over again.  Each change that you make is in the context of code you or someone else have written, and programming becomes more akin to sculpting or sensitive gardening, an activity where you have to look at what you have and make a decision about  what to do next.</p>
<p>To me, that&#8217;s the core of it.. getting people to pay at least as much attention to <em>what is there</em> as they do to their ideas of what should be there.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
