<?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: On Design for Testability</title>
	<atom:link href="http://www.udidahan.com/2010/04/18/on-design-for-testability/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Sat, 11 Feb 2012 15:16:10 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37259</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sun, 30 May 2010 02:57:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37259</guid>
		<description>Shrike,

As I said in the article, you must assume that there are some tests that weren&#039;t written, in which case there is no guarantee of correctness. Striking a balanace between different kinds of tests is difficult (as you said) but is important - and no, not all tests need to be automated necessarily.</description>
		<content:encoded><![CDATA[<p>Shrike,</p>
<p>As I said in the article, you must assume that there are some tests that weren&#8217;t written, in which case there is no guarantee of correctness. Striking a balanace between different kinds of tests is difficult (as you said) but is important &#8211; and no, not all tests need to be automated necessarily.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shrike</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37252</link>
		<dc:creator>Shrike</dc:creator>
		<pubDate>Mon, 17 May 2010 14:11:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37252</guid>
		<description>Udi,
it&#039;s very interessing topic.
Some people say TDD is the only way to go and talk about testing in general from TDD&#039;s point of view. That people tend to talk about &quot;core&quot; (as I call them) unit tests. Where &quot;unit&quot; is a class or method. They insist devs should write only unit-tests which are short, fast and have as few dependencies as possible. 
I can agree such tests are nice thing to have. But the biggest problem I personaly can see here is that such unit-tests do not guarantee our whole system is correct. They guarantee a system&#039;s parts are only correct.
So we have to have some integration (or as they&#039;re often called &quot;layered tests&quot;) tests. 
But if we have to have integration tests why not to make them automated. So we have automated integration tests which guarantee us that out system is ok. 
And here the complex part for me : how to seperate effort onto writing tests between unit and integration tests? How to find right balance?
If I try to explain &quot;core&quot; unit-testing to some mid-experienced dev I&#039;ll have difficulties. As I have to explain why he should point his efforts onto tests which do not fully guarantee correctness of the whole system.</description>
		<content:encoded><![CDATA[<p>Udi,<br />
it&#8217;s very interessing topic.<br />
Some people say TDD is the only way to go and talk about testing in general from TDD&#8217;s point of view. That people tend to talk about &#8220;core&#8221; (as I call them) unit tests. Where &#8220;unit&#8221; is a class or method. They insist devs should write only unit-tests which are short, fast and have as few dependencies as possible.<br />
I can agree such tests are nice thing to have. But the biggest problem I personaly can see here is that such unit-tests do not guarantee our whole system is correct. They guarantee a system&#8217;s parts are only correct.<br />
So we have to have some integration (or as they&#8217;re often called &#8220;layered tests&#8221;) tests.<br />
But if we have to have integration tests why not to make them automated. So we have automated integration tests which guarantee us that out system is ok.<br />
And here the complex part for me : how to seperate effort onto writing tests between unit and integration tests? How to find right balance?<br />
If I try to explain &#8220;core&#8221; unit-testing to some mid-experienced dev I&#8217;ll have difficulties. As I have to explain why he should point his efforts onto tests which do not fully guarantee correctness of the whole system.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37198</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Fri, 23 Apr 2010 07:22:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37198</guid>
		<description>Johannes,

On your statement:

&quot;it took me a few years to learn test-driven design to the point where I really could benefit from it&quot;

I&#039;ve found that to be common. If Design-for-Testability advocates would include the fact that this is a long process involving deep skill acquisition, I wouldn&#039;t have any issue with it. 

What I don&#039;t like is the message that if you have &quot;unit tests&quot; for your code, and your code makes use of interfaces, you will magically get all kinds of benefits. 

Anyway, thanks for your comments.</description>
		<content:encoded><![CDATA[<p>Johannes,</p>
<p>On your statement:</p>
<p>&#8220;it took me a few years to learn test-driven design to the point where I really could benefit from it&#8221;</p>
<p>I&#8217;ve found that to be common. If Design-for-Testability advocates would include the fact that this is a long process involving deep skill acquisition, I wouldn&#8217;t have any issue with it. </p>
<p>What I don&#8217;t like is the message that if you have &#8220;unit tests&#8221; for your code, and your code makes use of interfaces, you will magically get all kinds of benefits. </p>
<p>Anyway, thanks for your comments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37197</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Fri, 23 Apr 2010 07:17:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37197</guid>
		<description>Zilvinas,

Read books written by testers for testers - James Bach is one of the good authors in that space.</description>
		<content:encoded><![CDATA[<p>Zilvinas,</p>
<p>Read books written by testers for testers &#8211; James Bach is one of the good authors in that space.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johannes Brodwall</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37196</link>
		<dc:creator>Johannes Brodwall</dc:creator>
		<pubDate>Thu, 22 Apr 2010 22:41:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37196</guid>
		<description>It&#039;s always sad to see people who assume that just because they haven&#039;t been able to master something, others won&#039;t get value from it.

True, it took me a few years to learn test-driven design to the point where I really could benefit from it. But once I and a few other senior developers had that experience, disseminating the skills to level where we experience benefit require only a few months of pair programming and occasional code dojos.

Once we have a part of our code properly covered with non-coupled tests, the added nimbleness gives us the confidence that we can design for today&#039;s requirements and adapt the code to meet future needs. Since we practice incremental and iterative development, this is essential.</description>
		<content:encoded><![CDATA[<p>It&#8217;s always sad to see people who assume that just because they haven&#8217;t been able to master something, others won&#8217;t get value from it.</p>
<p>True, it took me a few years to learn test-driven design to the point where I really could benefit from it. But once I and a few other senior developers had that experience, disseminating the skills to level where we experience benefit require only a few months of pair programming and occasional code dojos.</p>
<p>Once we have a part of our code properly covered with non-coupled tests, the added nimbleness gives us the confidence that we can design for today&#8217;s requirements and adapt the code to meet future needs. Since we practice incremental and iterative development, this is essential.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Zilvinas</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37195</link>
		<dc:creator>Zilvinas</dc:creator>
		<pubDate>Wed, 21 Apr 2010 08:55:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37195</guid>
		<description>Udi,

Great post. I was wondering if you would be able to recommend any books on testability issues.

Thanks.</description>
		<content:encoded><![CDATA[<p>Udi,</p>
<p>Great post. I was wondering if you would be able to recommend any books on testability issues.</p>
<p>Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37194</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 07:06:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37194</guid>
		<description>Travis,

Your statement &quot;It’s simply a matter of developer training and ability&quot; is almost right. I&#039;d remove the word &quot;simply&quot; from that.

Is it easy to get developers with the right level of ability?
Is it easy to train those developers that are at lower levels of ability?
And what do we do in the meantime?

I&#039;d say that &quot;SRP, DRY, and loose coupling principles&quot; fall under Good Design rather than Design for Testability. As I said in a previous comment, well designed code tends to be testable, but the inverse isn&#039;t necessarily true.

There is lots of value to be gained from well designed systems - I agree. It&#039;s just that we need to understand that that doesn&#039;t happen by itself - hiring practices need to be changed, as do training practices, and more. It is a broader organizational issue than can be solved just by developers writing &quot;unit tests&quot;.</description>
		<content:encoded><![CDATA[<p>Travis,</p>
<p>Your statement &#8220;It’s simply a matter of developer training and ability&#8221; is almost right. I&#8217;d remove the word &#8220;simply&#8221; from that.</p>
<p>Is it easy to get developers with the right level of ability?<br />
Is it easy to train those developers that are at lower levels of ability?<br />
And what do we do in the meantime?</p>
<p>I&#8217;d say that &#8220;SRP, DRY, and loose coupling principles&#8221; fall under Good Design rather than Design for Testability. As I said in a previous comment, well designed code tends to be testable, but the inverse isn&#8217;t necessarily true.</p>
<p>There is lots of value to be gained from well designed systems &#8211; I agree. It&#8217;s just that we need to understand that that doesn&#8217;t happen by itself &#8211; hiring practices need to be changed, as do training practices, and more. It is a broader organizational issue than can be solved just by developers writing &#8220;unit tests&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37193</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 06:59:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37193</guid>
		<description>Szymon,

I think that most people don&#039;t divide up the system at the right level of granularity (services, business components) which results in domain models which are too large, in which case they&#039;re not a unit either :)

When talking to clients about unit testing, I rarely get to the point of discussing the cost of *just* unit testing. Rather I focus on helping them find the right mix of the right kinds of testing throughout the lifecycle of the project - along with getting the right kinds of design decisions, requirements, etc...

Cheers.</description>
		<content:encoded><![CDATA[<p>Szymon,</p>
<p>I think that most people don&#8217;t divide up the system at the right level of granularity (services, business components) which results in domain models which are too large, in which case they&#8217;re not a unit either <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>When talking to clients about unit testing, I rarely get to the point of discussing the cost of *just* unit testing. Rather I focus on helping them find the right mix of the right kinds of testing throughout the lifecycle of the project &#8211; along with getting the right kinds of design decisions, requirements, etc&#8230;</p>
<p>Cheers.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37191</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 06:55:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37191</guid>
		<description>Chris,

As I mentioned in the previous comment, poorly designed systems have all kinds of hidden dependencies that unit tests don&#039;t target. Changes in one part of a system still can break other parts without unit tests going red. In which case, we&#039;re operating under a false sense of security. Is that really such a good thing?</description>
		<content:encoded><![CDATA[<p>Chris,</p>
<p>As I mentioned in the previous comment, poorly designed systems have all kinds of hidden dependencies that unit tests don&#8217;t target. Changes in one part of a system still can break other parts without unit tests going red. In which case, we&#8217;re operating under a false sense of security. Is that really such a good thing?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37190</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 06:52:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37190</guid>
		<description>Kris,

The purpose of refactoring is to improve the design of the code while maintaining its behavior. It is unlikely that that is the highest business priority after a year of production. It is more likely that maintenance programmers will be fixing bugs and adding features - both of which change behavior, ergo not refactoring.

While I agree that a good suite of unit tests could help in refactoring a well designed code base, there is no inherent assurance that the unit tests are good, or that the code base well designed.

Hidden dependencies through shared databases and web services are often the places where design and unit tests break down and refactoring doesn&#039;t necessarily help.

Cheers.</description>
		<content:encoded><![CDATA[<p>Kris,</p>
<p>The purpose of refactoring is to improve the design of the code while maintaining its behavior. It is unlikely that that is the highest business priority after a year of production. It is more likely that maintenance programmers will be fixing bugs and adding features &#8211; both of which change behavior, ergo not refactoring.</p>
<p>While I agree that a good suite of unit tests could help in refactoring a well designed code base, there is no inherent assurance that the unit tests are good, or that the code base well designed.</p>
<p>Hidden dependencies through shared databases and web services are often the places where design and unit tests break down and refactoring doesn&#8217;t necessarily help.</p>
<p>Cheers.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37189</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 06:46:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37189</guid>
		<description>Scott Peterson,

The term &quot;testable code&quot; is open to interpretation. If the test in question is just asserting that the code is implemented a certain way, &quot;testable code&quot; just means &quot;more code&quot; and is actually a violation of the DRY principle.

I agree that good code is often easy to test, but the inverse isn&#039;t necessarily true - not all animals are dogs :)

This stuff isn&#039;t easy, nor is it necessarily easy to teach.</description>
		<content:encoded><![CDATA[<p>Scott Peterson,</p>
<p>The term &#8220;testable code&#8221; is open to interpretation. If the test in question is just asserting that the code is implemented a certain way, &#8220;testable code&#8221; just means &#8220;more code&#8221; and is actually a violation of the DRY principle.</p>
<p>I agree that good code is often easy to test, but the inverse isn&#8217;t necessarily true &#8211; not all animals are dogs <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This stuff isn&#8217;t easy, nor is it necessarily easy to teach.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37188</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 06:41:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37188</guid>
		<description>Basharat,

Much of what you&#039;re saying is &quot;accepted truth&quot; in the industry, but in my consulting I have seen a very different reality. Just like not everyone who writes code can write good code, not everyone who writes &quot;unit tests&quot; does that well.

The assumption that every unit test written is good does not hold up under scrutiny. In which case, it isn&#039;t necessarily catching or preventing bugs - it&#039;s just more code to maintain.

All I&#039;m saying is for us to be more conscious of the investment choices we&#039;re making, and following up with appropriate reflection from time to time on the return on those investments with real evidence rather than faith.

Thanks for your comments.</description>
		<content:encoded><![CDATA[<p>Basharat,</p>
<p>Much of what you&#8217;re saying is &#8220;accepted truth&#8221; in the industry, but in my consulting I have seen a very different reality. Just like not everyone who writes code can write good code, not everyone who writes &#8220;unit tests&#8221; does that well.</p>
<p>The assumption that every unit test written is good does not hold up under scrutiny. In which case, it isn&#8217;t necessarily catching or preventing bugs &#8211; it&#8217;s just more code to maintain.</p>
<p>All I&#8217;m saying is for us to be more conscious of the investment choices we&#8217;re making, and following up with appropriate reflection from time to time on the return on those investments with real evidence rather than faith.</p>
<p>Thanks for your comments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37187</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Wed, 21 Apr 2010 06:35:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37187</guid>
		<description>Scott Bellware,

Thanks for your comments - I think we&#039;re very much on the same page. If a certain bias for iterations exists in the post, that is more of a reflection of the industry than what I believe is best. That being said, I do temper my guidance very much based on what an organization is willing and able to hear at a given time, so I may recommend iterations from time to time as the political realities dictate.</description>
		<content:encoded><![CDATA[<p>Scott Bellware,</p>
<p>Thanks for your comments &#8211; I think we&#8217;re very much on the same page. If a certain bias for iterations exists in the post, that is more of a reflection of the industry than what I believe is best. That being said, I do temper my guidance very much based on what an organization is willing and able to hear at a given time, so I may recommend iterations from time to time as the political realities dictate.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Travis Laborde</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37186</link>
		<dc:creator>Travis Laborde</dc:creator>
		<pubDate>Tue, 20 Apr 2010 13:09:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37186</guid>
		<description>I disagree strongly that there is an argument to be made against &quot;Design for Testability&quot; based on time and budget.  It&#039;s simply a matter of developer training and ability.  As an old saying goes - &quot;the opposite of testable code is... detestable code&quot; :)

Designing for Testability means adhering to SRP, DRY, and loose coupling principles.  Over just about any time span, these principles SAVE time and therefore budget.  Even if you don&#039;t write any tests at all, the benefit gained from designing your code in the &quot;testable&quot; way are immense.</description>
		<content:encoded><![CDATA[<p>I disagree strongly that there is an argument to be made against &#8220;Design for Testability&#8221; based on time and budget.  It&#8217;s simply a matter of developer training and ability.  As an old saying goes &#8211; &#8220;the opposite of testable code is&#8230; detestable code&#8221; <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Designing for Testability means adhering to SRP, DRY, and loose coupling principles.  Over just about any time span, these principles SAVE time and therefore budget.  Even if you don&#8217;t write any tests at all, the benefit gained from designing your code in the &#8220;testable&#8221; way are immense.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Szymon Kulec</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37184</link>
		<dc:creator>Szymon Kulec</dc:creator>
		<pubDate>Mon, 19 Apr 2010 19:28:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37184</guid>
		<description>Considering domain models, or maybe parts bigger than a single class, as units, was also mentioned on the Ayende&#039;s blog. I often include this kind of tests as unit tests, but in the majority, my tests still cover single classes. Don&#039;t you think than wrapping the whole domain model is too much? 

Have you ever informed your employer about possible paths for the project? For instance: &#039;plenty of tests will cost you additional two week&#039;, &#039;without these we can finish the project on time&#039; and so on?

Take care
Szymon</description>
		<content:encoded><![CDATA[<p>Considering domain models, or maybe parts bigger than a single class, as units, was also mentioned on the Ayende&#8217;s blog. I often include this kind of tests as unit tests, but in the majority, my tests still cover single classes. Don&#8217;t you think than wrapping the whole domain model is too much? </p>
<p>Have you ever informed your employer about possible paths for the project? For instance: &#8216;plenty of tests will cost you additional two week&#8217;, &#8216;without these we can finish the project on time&#8217; and so on?</p>
<p>Take care<br />
Szymon</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Oldwood</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37178</link>
		<dc:creator>Chris Oldwood</dc:creator>
		<pubDate>Mon, 19 Apr 2010 13:44:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37178</guid>
		<description>&quot;In either case, we didn’t get the return on investment we expected on the first bit of testing code.&quot;

Your ROI is more than that - each time you run the tests you gain value. You either know sooner that you&#039;ve broken something or have confidence that you hopefully didn&#039;t. The tighter feedback loop *is* your ROI.</description>
		<content:encoded><![CDATA[<p>&#8220;In either case, we didn’t get the return on investment we expected on the first bit of testing code.&#8221;</p>
<p>Your ROI is more than that &#8211; each time you run the tests you gain value. You either know sooner that you&#8217;ve broken something or have confidence that you hopefully didn&#8217;t. The tighter feedback loop *is* your ROI.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kris</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37176</link>
		<dc:creator>kris</dc:creator>
		<pubDate>Mon, 19 Apr 2010 07:55:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37176</guid>
		<description>hi Udi,

You&#039;re missing a very important use case for unit tests (or component/integration tests): refactoring! after a year of production you&#039;ll usually have gathered so much more insight into the business domain that you&#039;ll have to refaactor either to implement new features or to improve the performance. having a suite of unit tests will help you achieve this task more quickly. 

g,
kris</description>
		<content:encoded><![CDATA[<p>hi Udi,</p>
<p>You&#8217;re missing a very important use case for unit tests (or component/integration tests): refactoring! after a year of production you&#8217;ll usually have gathered so much more insight into the business domain that you&#8217;ll have to refaactor either to implement new features or to improve the performance. having a suite of unit tests will help you achieve this task more quickly. </p>
<p>g,<br />
kris</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Peterson</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37175</link>
		<dc:creator>Scott Peterson</dc:creator>
		<pubDate>Mon, 19 Apr 2010 03:36:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37175</guid>
		<description>Testable code is usually cohesive as well.  Maybe that&#039;s the real benefit to unit testing - it makes poor cohesion harder to ignore.</description>
		<content:encoded><![CDATA[<p>Testable code is usually cohesive as well.  Maybe that&#8217;s the real benefit to unit testing &#8211; it makes poor cohesion harder to ignore.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Basharat Wani</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37174</link>
		<dc:creator>Basharat Wani</dc:creator>
		<pubDate>Mon, 19 Apr 2010 00:25:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37174</guid>
		<description>Hey Udi


Good stuff, I have been reading your post since last few years, also many times I quote from your post.

Going through “On Design for Testability”, I see few things differently, I considered the Unit testing as &quot;white-box&quot; testing -- the tests are performed with full knowledge of the source code. Ideally, developer would be able to run unit tests so that all the code paths would be executed as a result of the testing. In other words, the unit tests would need to create the conditions to go through each line of code to ensure all the code was operating correctly today and tomorrow. 

Unit Test is very critical because it is one of the first testing efforts performed on the code and the earlier defects are detected, the easier they are to fix. Early bug-detection is also the most cost-effective methodology, earlier we catch them less it would cost and later they are found higher the cost.

Also when we say Unit-testing should only be attempted with things which are units (or components), this is very subjective and depends on how much capital we want to spend, but I would always prefer to have all the new code written to have unit tests coverage, as an Investment in Future.


Basharat</description>
		<content:encoded><![CDATA[<p>Hey Udi</p>
<p>Good stuff, I have been reading your post since last few years, also many times I quote from your post.</p>
<p>Going through “On Design for Testability”, I see few things differently, I considered the Unit testing as &#8220;white-box&#8221; testing &#8212; the tests are performed with full knowledge of the source code. Ideally, developer would be able to run unit tests so that all the code paths would be executed as a result of the testing. In other words, the unit tests would need to create the conditions to go through each line of code to ensure all the code was operating correctly today and tomorrow. </p>
<p>Unit Test is very critical because it is one of the first testing efforts performed on the code and the earlier defects are detected, the easier they are to fix. Early bug-detection is also the most cost-effective methodology, earlier we catch them less it would cost and later they are found higher the cost.</p>
<p>Also when we say Unit-testing should only be attempted with things which are units (or components), this is very subjective and depends on how much capital we want to spend, but I would always prefer to have all the new code written to have unit tests coverage, as an Investment in Future.</p>
<p>Basharat</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Bellware</title>
		<link>http://www.udidahan.com/2010/04/18/on-design-for-testability/comment-page-1/#comment-37172</link>
		<dc:creator>Scott Bellware</dc:creator>
		<pubDate>Sun, 18 Apr 2010 19:54:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1221#comment-37172</guid>
		<description>Great stuff, Udi. Always nice to see challenges to the status quo, or &quot;orthodoxy&quot;, as I&#039;m want to call it.

That said, I&#039;ve got a lot of experience in balancing internal testing with external testing and my own experience doesn&#039;t jive with all that you&#039;re reporting.

Ultimately, it comes to a matter of competence and learning, which you point out in conclusion. Any organization not learning from their practicing is going to end up with sub-par results on anything they do. Any organization creating fragility - whether designing a marketing strategy or designing a software unit is going to have pain.

I completely disagree with the iteration bias. We&#039;ve begun to abandon iterations and optimize team organization and work management and design beyond what Scrum&#039;s assertions can effectively hold up to. For me, this started more than two years ago, and my work management and organization management expectations are quite a bit different from what they used to be. This includes how we&#039;re making use of testing and the meaning and purpose of testing and its effect on productivity. In the end, I don&#039;t think &quot;agile&quot; has anything to do with this. &quot;Agile&quot; has become so watered down that it&#039;s mostly meaningless at this point, and often an unproductive distraction except when rehabilitating very poorly managed software organization who are still trying to overly manufacturing organizational mechanics and values onto software development. Even then, I&#039;d rather go straight to iterationless work management and control without stopping at the Scrum step.

Ultimately, doing things poorly usually means having poor results, and doing things goodly means having good results. This is the ultimate mitigator, and the fruit that most organizations fail to harvest whether in software projects or other aspects of business development and operations.</description>
		<content:encoded><![CDATA[<p>Great stuff, Udi. Always nice to see challenges to the status quo, or &#8220;orthodoxy&#8221;, as I&#8217;m want to call it.</p>
<p>That said, I&#8217;ve got a lot of experience in balancing internal testing with external testing and my own experience doesn&#8217;t jive with all that you&#8217;re reporting.</p>
<p>Ultimately, it comes to a matter of competence and learning, which you point out in conclusion. Any organization not learning from their practicing is going to end up with sub-par results on anything they do. Any organization creating fragility &#8211; whether designing a marketing strategy or designing a software unit is going to have pain.</p>
<p>I completely disagree with the iteration bias. We&#8217;ve begun to abandon iterations and optimize team organization and work management and design beyond what Scrum&#8217;s assertions can effectively hold up to. For me, this started more than two years ago, and my work management and organization management expectations are quite a bit different from what they used to be. This includes how we&#8217;re making use of testing and the meaning and purpose of testing and its effect on productivity. In the end, I don&#8217;t think &#8220;agile&#8221; has anything to do with this. &#8220;Agile&#8221; has become so watered down that it&#8217;s mostly meaningless at this point, and often an unproductive distraction except when rehabilitating very poorly managed software organization who are still trying to overly manufacturing organizational mechanics and values onto software development. Even then, I&#8217;d rather go straight to iterationless work management and control without stopping at the Scrum step.</p>
<p>Ultimately, doing things poorly usually means having poor results, and doing things goodly means having good results. This is the ultimate mitigator, and the fruit that most organizations fail to harvest whether in software projects or other aspects of business development and operations.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

