<?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: A frequently asked TDD question	</title>
	<atom:link href="http://matteo.vaccari.name/blog/archives/343/feed" rel="self" type="application/rss+xml" />
	<link>http://matteo.vaccari.name/blog/archives/343</link>
	<description>Extreme enthusiasm</description>
	<lastBuildDate>
	Mon, 25 Feb 2019 15:18:16 +0000	</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.1.1</generator>
			<item>
				<title>
				By: Extreme Enthusiasm &#187; Blog Archive &#187; Antonio Ganci on design				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93172</link>
		<dc:creator><![CDATA[Extreme Enthusiasm &#187; Blog Archive &#187; Antonio Ganci on design]]></dc:creator>
		<pubDate>Sun, 18 Apr 2010 17:14:23 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93172</guid>
					<description><![CDATA[[...] collegue Antonio Ganci posted an article (Italian) that describes exactly what I meant in A Frequently Asked TDD Question and its followup. It&#8217;s about what you can accomplish if you&#8217;re really good in software [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] collegue Antonio Ganci posted an article (Italian) that describes exactly what I meant in A Frequently Asked TDD Question and its followup. It&#8217;s about what you can accomplish if you&#8217;re really good in software [&#8230;]</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: matteo				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93153</link>
		<dc:creator><![CDATA[matteo]]></dc:creator>
		<pubDate>Thu, 08 Apr 2010 06:34:48 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93153</guid>
					<description><![CDATA[Giorgio: the problem with frameworks is that they let you do everything that the framework thinks you should do.  Once you need to do something that is outside what is considered proper by the framework authors, you&#039;re out of luck.  If all you need to do is to change the structure of the URLs in your internal links, Rails routes are wonderful.  If what you need to do is to apply authorization rules to links so that they are active only if you&#039;re authorized to use them, then Rails link_to won&#039;t help you.  You might do it by monkey-patching link_to, but I&#039;m not comfortable with this sort of things.  In Java you might do it by rewriting the framework class and placing it higher in the classpath than the framework original class.  But it sucks to have to do this.  The proper solution is to find all the places where you used link_to and change it to my_link_to.  This sucks also, but it sucks a bit less, IMO :-)]]></description>
		<content:encoded><![CDATA[<p>Giorgio: the problem with frameworks is that they let you do everything that the framework thinks you should do.  Once you need to do something that is outside what is considered proper by the framework authors, you&#8217;re out of luck.  If all you need to do is to change the structure of the URLs in your internal links, Rails routes are wonderful.  If what you need to do is to apply authorization rules to links so that they are active only if you&#8217;re authorized to use them, then Rails link_to won&#8217;t help you.  You might do it by monkey-patching link_to, but I&#8217;m not comfortable with this sort of things.  In Java you might do it by rewriting the framework class and placing it higher in the classpath than the framework original class.  But it sucks to have to do this.  The proper solution is to find all the places where you used link_to and change it to my_link_to.  This sucks also, but it sucks a bit less, IMO :-)</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: TapaGeuR &#187; ITGIF – “IT-God” It’s Friday #15				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93150</link>
		<dc:creator><![CDATA[TapaGeuR &#187; ITGIF – “IT-God” It’s Friday #15]]></dc:creator>
		<pubDate>Fri, 02 Apr 2010 18:50:32 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93150</guid>
					<description><![CDATA[[...] (Red-Green-Refactor in detail) What is “simplicity” in programming? How to Manage Programmers A frequently asked TDD question Scrum Gathering: Community of Practice Testing Exceptions in JUnit 4.7 Top 10 PHP Techniques That [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] (Red-Green-Refactor in detail) What is “simplicity” in programming? How to Manage Programmers A frequently asked TDD question Scrum Gathering: Community of Practice Testing Exceptions in JUnit 4.7 Top 10 PHP Techniques That [&#8230;]</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Giorgio Sironi				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93148</link>
		<dc:creator><![CDATA[Giorgio Sironi]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 18:53:05 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93148</guid>
					<description><![CDATA[&quot;The problem with the Big Design Upfront is the Big, not the Upfront.&quot;
Regarding the link example, view helpers in web frameworks do exactly this. They let you change the structure of all the links in the application simply by rewriting a route. :)]]></description>
		<content:encoded><![CDATA[<p>&#8220;The problem with the Big Design Upfront is the Big, not the Upfront.&#8221;<br />
Regarding the link example, view helpers in web frameworks do exactly this. They let you change the structure of all the links in the application simply by rewriting a route. :)</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: FredV				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93131</link>
		<dc:creator><![CDATA[FredV]]></dc:creator>
		<pubDate>Mon, 22 Mar 2010 12:21:21 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93131</guid>
					<description><![CDATA[The TDD mantra has done more damage than good.]]></description>
		<content:encoded><![CDATA[<p>The TDD mantra has done more damage than good.</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Extreme Enthusiasm &#187; Blog Archive &#187; Answering Luca&#8217;s comment				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93120</link>
		<dc:creator><![CDATA[Extreme Enthusiasm &#187; Blog Archive &#187; Answering Luca&#8217;s comment]]></dc:creator>
		<pubDate>Sat, 20 Mar 2010 09:25:15 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93120</guid>
					<description><![CDATA[[...] commented on my previous post. My answer has got so long that it became a full [...]]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] commented on my previous post. My answer has got so long that it became a full [&#8230;]</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Luca Minudel				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93117</link>
		<dc:creator><![CDATA[Luca Minudel]]></dc:creator>
		<pubDate>Fri, 19 Mar 2010 20:16:28 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93117</guid>
					<description><![CDATA[AutomaGic no, but automatic maybe, let me try with examples.

1- a team not doing tdd have training about solid principles and the demeter law, than the team is requested to produce code that conform to these principles

2- instead the same team have training about tdd with mock objects: about the practices and smells prescribed by the practice and the refacorings to remove duplications and clarify code intent. than the team is requested to write code driven by tdd with mock objects

in the example -1- the learning and application of the principles is non-automatic: say it is intentional.
in my experience i have observed many devs and 1 team succeeding into learning the principles and still failing to produce code that adhere to the principles

in the example -2- there is nothing explicit about the principles (this is were i mis?-use the word &quot;automatic&quot;) still the practices prescribed by tdd with mocks lead to remove and prevent many violations of the principles.
in my experience have observed 1 team that so produced code more adherent to the principles without an explicit policy to do so. then team observed the characteristics of the code (more easy to understand and change) and some member got interested into the principles, studied them and began to apply them in a more aware, intentional and extensive way.



if i understood your point, you suggest to apply tdd and also as in -1- teach design principles and ask the team to follow them.

while my point is to apply tdd with mock objects and support the observations of the effects on the code produced and support any curiosity about the principles from team members


is this correct? in your experience have you observed dynamic similar to the examples -1- and -2- or totally different ones?



if you arrived here, thank you for reading all this long comment.]]></description>
		<content:encoded><![CDATA[<p>AutomaGic no, but automatic maybe, let me try with examples.</p>
<p>1- a team not doing tdd have training about solid principles and the demeter law, than the team is requested to produce code that conform to these principles</p>
<p>2- instead the same team have training about tdd with mock objects: about the practices and smells prescribed by the practice and the refacorings to remove duplications and clarify code intent. than the team is requested to write code driven by tdd with mock objects</p>
<p>in the example -1- the learning and application of the principles is non-automatic: say it is intentional.<br />
in my experience i have observed many devs and 1 team succeeding into learning the principles and still failing to produce code that adhere to the principles</p>
<p>in the example -2- there is nothing explicit about the principles (this is were i mis?-use the word &#8220;automatic&#8221;) still the practices prescribed by tdd with mocks lead to remove and prevent many violations of the principles.<br />
in my experience have observed 1 team that so produced code more adherent to the principles without an explicit policy to do so. then team observed the characteristics of the code (more easy to understand and change) and some member got interested into the principles, studied them and began to apply them in a more aware, intentional and extensive way.</p>
<p>if i understood your point, you suggest to apply tdd and also as in -1- teach design principles and ask the team to follow them.</p>
<p>while my point is to apply tdd with mock objects and support the observations of the effects on the code produced and support any curiosity about the principles from team members</p>
<p>is this correct? in your experience have you observed dynamic similar to the examples -1- and -2- or totally different ones?</p>
<p>if you arrived here, thank you for reading all this long comment.</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: matteo				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93115</link>
		<dc:creator><![CDATA[matteo]]></dc:creator>
		<pubDate>Fri, 19 Mar 2010 07:42:43 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93115</guid>
					<description><![CDATA[Hi Luca,

when you say &quot;the ability of the team members to learn from this and adapt&quot; surely we cannot think this as something &quot;almost automatic&quot;, can we? :-)  And when you say &quot;when the team do it right and learn from it&quot; again, how do we know that we&#039;re doing it right?  How can we know how &quot;right&quot; is?]]></description>
		<content:encoded><![CDATA[<p>Hi Luca,</p>
<p>when you say &#8220;the ability of the team members to learn from this and adapt&#8221; surely we cannot think this as something &#8220;almost automatic&#8221;, can we? :-)  And when you say &#8220;when the team do it right and learn from it&#8221; again, how do we know that we&#8217;re doing it right?  How can we know how &#8220;right&#8221; is?</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Luca Minudel				</title>
				<link>http://matteo.vaccari.name/blog/archives/343/comment-page-1#comment-93114</link>
		<dc:creator><![CDATA[Luca Minudel]]></dc:creator>
		<pubDate>Fri, 19 Mar 2010 00:01:30 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=343#comment-93114</guid>
					<description><![CDATA[Hi Matteo, agree that just following blindly the TDD mantra will not always lead to develop a design that consist of many highly cohesive, loosely coupled components: TDD is not an excuse to turn off the brain and to stop learning.

Instead if I understand correctly, I disagree when you say 
&#062; There is nothing “almost automatic” in this process.

XP is explicitly defined [1] to create a set of generative rules [2] that do have some automatic effects that works in combination with the ability of team members to learn from this and adapt coding to it [3].

Indeed when I read about CAS in [3] I recognized many concepts referenced in XP Explained and Cockburn make it clear too in [1].

What I can add is that TDD with mock objects can be very effective to guide the team toward the correct understanding and application of the design principles, when the team do it right and learn from it.





[1] Agile software development: the business of innovation, Highsmith-Cockburn, 2001, http://alistair.cockburn.us/Agile+software+development:+the+business+of+innovation

[2] Generative Systems, http://en.wikipedia.org/wiki/Generative_systems

[3] Complex adaptive systems (CAS), http://en.wikipedia.org/wiki/Complex_adaptive_system]]></description>
		<content:encoded><![CDATA[<p>Hi Matteo, agree that just following blindly the TDD mantra will not always lead to develop a design that consist of many highly cohesive, loosely coupled components: TDD is not an excuse to turn off the brain and to stop learning.</p>
<p>Instead if I understand correctly, I disagree when you say<br />
&gt; There is nothing “almost automatic” in this process.</p>
<p>XP is explicitly defined [1] to create a set of generative rules [2] that do have some automatic effects that works in combination with the ability of team members to learn from this and adapt coding to it [3].</p>
<p>Indeed when I read about CAS in [3] I recognized many concepts referenced in XP Explained and Cockburn make it clear too in [1].</p>
<p>What I can add is that TDD with mock objects can be very effective to guide the team toward the correct understanding and application of the design principles, when the team do it right and learn from it.</p>
<p>[1] Agile software development: the business of innovation, Highsmith-Cockburn, 2001, <a href="http://alistair.cockburn.us/Agile+software+development:+the+business+of+innovation" rel="nofollow">http://alistair.cockburn.us/Agile+software+development:+the+business+of+innovation</a></p>
<p>[2] Generative Systems, <a href="http://en.wikipedia.org/wiki/Generative_systems" rel="nofollow">http://en.wikipedia.org/wiki/Generative_systems</a></p>
<p>[3] Complex adaptive systems (CAS), <a href="http://en.wikipedia.org/wiki/Complex_adaptive_system" rel="nofollow">http://en.wikipedia.org/wiki/Complex_adaptive_system</a></p>
]]></content:encoded>
						</item>
			</channel>
</rss>
