<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx</link><description>It was spring 2003, I had just finished a weekend camping in the southern Arizona desert.&amp;#160; I was dusty and physically exhausted from hours of playing paintball.&amp;#160; For those who have never been in those parts, imagine long straight roads with</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6697236</link><pubDate>Sat, 08 Dec 2007 00:31:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6697236</guid><dc:creator>kevinpilch-bisson</dc:creator><description>&lt;p&gt;Hey Wes,&lt;/p&gt;
&lt;p&gt;Great post! I'm always interested in learning better ways to test and write software. &amp;nbsp;I think that you've misunderstood the purpose of TDD though. &amp;nbsp;In TDD, the tests you write are _definitely not_ supposed to be the exhaustive set of tests, and in fact, their primary purpose is not to &amp;quot;test&amp;quot; the software. &amp;nbsp;The primary purpose is to drive the _design_ or architecture of the software, based on having real consumers for the APIs that you are writing.&lt;/p&gt;
&lt;p&gt;For this reason, many people have stopped using the term TDD, and have started using &amp;quot;Emergent Design Development (EDD)&amp;quot; instead.&lt;/p&gt;
&lt;p&gt;I'd be interested to hear your opinions on the efficacy of unit tests as a methodology for driving design though...&lt;/p&gt;</description></item><item><title>I've begun thinking of TDD as hill-climbing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6697465</link><pubDate>Sat, 08 Dec 2007 00:56:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6697465</guid><dc:creator>Peter Thatcher</dc:creator><description>&lt;p&gt;Lately, I've been begun viewing TDD as a hill-climbing search, or perhaps some other search that hits &amp;nbsp;a local maximum. &amp;nbsp;It seems that if your development is entirely driven by those tests, they can only take you so far, and you'll hit the maximum. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;What takes talent is to look beyond the test and write something that not only fulfills it but does so in an elegant way. &amp;nbsp;The elegant solution, once found, can guide us in new directions which we hadn't thought of before. &amp;nbsp;This may lead us to add to or alter our tests. &amp;nbsp;In this way, the search can break past the local maximum.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6698062</link><pubDate>Sat, 08 Dec 2007 02:31:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6698062</guid><dc:creator>Nathan Stott</dc:creator><description>&lt;p&gt;I agree with you 100%.&lt;/p&gt;
&lt;p&gt;I believe that unit testing is essential, but that functional testing often devolves into an exercise in unbiased learning.&lt;/p&gt;
&lt;p&gt;There is certain core functionality to any framework or application that takes a finite set of inputs. &amp;nbsp;An example of that is an implementation of ActiveRecord. &amp;nbsp;The models will have methods that take a quite finite set of inputs. &amp;nbsp;Perfect.&lt;/p&gt;
&lt;p&gt;However, functional testing involves testing that which is interacted with. &amp;nbsp;Interaction is hard to predict. &amp;nbsp;To properly test a complicated windows or web form would take hundreds of functional tests, and use cases for forms evolve rapidly and often.&lt;/p&gt;
&lt;p&gt;I know you're a bit of a Haskell buff. &amp;nbsp;To put it in Haskell terms, I don't think that testing monads is nearly as useful as testing functions, and too much effort put into the testing of monads is a waste of time.&lt;/p&gt;
&lt;p&gt;No one will ever write a bug-free application and putting too much effort into that costs more money than it saves.&lt;/p&gt;
&lt;p&gt;Great blog, Wes. &amp;nbsp;I'm glad you're finally blogging again. &amp;nbsp;Three in 2 days!&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6705642</link><pubDate>Sat, 08 Dec 2007 18:55:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6705642</guid><dc:creator>wesdyer</dc:creator><description>&lt;p&gt;Kevin:&lt;/p&gt;
&lt;p&gt;Good to hear from you. &amp;nbsp;I am being pedantic on purpose. &amp;nbsp;I am just taking what TDD is defined to be and following it to the letter, so I am following the letter but not the spirit of what it is saying. &amp;nbsp;Btw, I have seen it practiced this way. &amp;nbsp;Testing is extremely important to me and any of my team mates will vouch for me that I write tests as early and often as possible. &amp;nbsp;I used a brain-dead extreme form of TDD to show how process can degrade into suboptimal forms of machine learning. &amp;nbsp;Tests should inform the design but not determine it.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6811372</link><pubDate>Thu, 20 Dec 2007 03:15:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6811372</guid><dc:creator>EGESA RONALD LEONARD</dc:creator><description>&lt;p&gt;This article is nice as it brings forward the concept of TDD. Infact one other thing to stress is this idea that a bug that customers cannot find is not worth finding by test. True, i have held the same idea, but then remeber that a problem postponed is &amp;nbsp;not a problem solved.&lt;/p&gt;
&lt;p&gt;The bug may never be found by customers, but may catch up with the programmer at a later stage when program upgrades are necessary.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6828948</link><pubDate>Fri, 21 Dec 2007 20:21:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6828948</guid><dc:creator>Evan</dc:creator><description>&lt;p&gt;&amp;quot;While tests are invaluable to programmers for debugging purposes, it would be better if programmers returned to the specification in order to understand what they are supposed to develop instead of returning to the tests.&amp;quot;&lt;/p&gt;
&lt;p&gt;Unless you make that step past TDD into BDD where the tests are specifications..&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6830502</link><pubDate>Sat, 22 Dec 2007 00:58:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6830502</guid><dc:creator>wesdyer</dc:creator><description>&lt;p&gt;Evan:&lt;/p&gt;
&lt;p&gt;I still stand by my conclusion if the input space is large enough (infinite definitely qualifies). &amp;nbsp;It is impossible to test all of the values and so the problem may always lurk just out of reach of the tests. &amp;nbsp;The specification doesn't suffer the same problem since it can talk in abstract generalizations that can cover infinite spaces. &amp;nbsp;Tests that are generated either automatically or by humans without knowledge of the internals make this less probable but it still remains possible.&lt;/p&gt;
&lt;p&gt;Don't get me wrong. &amp;nbsp;Programmer written tests help a lot. &amp;nbsp;They are absolutely necessary. &amp;nbsp;But they do not solve all our problems.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6830548</link><pubDate>Sat, 22 Dec 2007 01:03:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6830548</guid><dc:creator>wesdyer</dc:creator><description>&lt;p&gt;EGESA RONALD LEONARD:&lt;/p&gt;
&lt;p&gt;You are right that a bug that is not found in this version may adversely affect a future version. &amp;nbsp;But it still is true that a bug that a user *never* encounters is not important to fix to please the customers.&lt;/p&gt;
&lt;p&gt;That said, I still want to fix all of the bugs because I take personal pride in my work. &amp;nbsp;Even if no one else in the whole world knows about the bug, I do. &amp;nbsp;I care.&lt;/p&gt;
&lt;p&gt;In fact, if developers don't take personal pride in their work then I think morale will slip over the long run which can be catastrophic to a project. &amp;nbsp;So this business about users not finding bugs is more about prioritization and making hard decisions than anything else.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6872571</link><pubDate>Thu, 27 Dec 2007 00:56:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6872571</guid><dc:creator>Bill Campbell</dc:creator><description>&lt;p&gt;Hey - Interesting! Thanks for your thoughts. I find it interesting that folks talk about following TDD to the letter - if that were the case, you'd never have any production code that didn't have a test written for it 'first'. If there wasn't a test, there would be no need for the code, right?&lt;/p&gt;
&lt;p&gt;Regards and Happy New Year!!&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6898116</link><pubDate>Sat, 29 Dec 2007 19:04:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6898116</guid><dc:creator>Keith Burgoyne</dc:creator><description>&lt;p&gt;Good musing, Wes. &amp;nbsp;I always enjoy reading a person's line of reasoning when it is well thought-out. &amp;nbsp;I'll contribute that any &amp;quot;absolute&amp;quot; (theory in this case) always immediately raises a red flag for me. &amp;nbsp;The selection of one theory absolutely to the exclusion of others is invariably wrong. &amp;nbsp;My experience is that many of the design and testing theories have components that are useful at various times, and other components that are non-useful, a waste of time, or possibly even detrimental to a project. &amp;nbsp;The elements of these sets can even shuffle from project to project or even on the same project over time. &amp;nbsp;The true goal, as you state, is to reduce the total impact resulting from bugs in the code. &amp;nbsp;If the focus is primarily on using theory-A or theory-B, then it is not the goal that is really in focus. &amp;nbsp;The various components of theory-A or theory-B should be selected based on their contribution to meeting the true goal.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#6898474</link><pubDate>Sat, 29 Dec 2007 19:46:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6898474</guid><dc:creator>Frank Hileman</dc:creator><description>&lt;p&gt;With design-by-contract, &amp;quot;tests&amp;quot; (precondition, postcondition, invariant assertions) are based on declarative specifications, and the tests are constantly running, at least for debug builds, so they have a better chance of encountering unforseen situations. You demonstrated clearly that TDD is only an adjunct to specification based design. Considering the cost of maintaining intrusive, fine grained tests created using TDD, design-by-contract has a better return on investment.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#7029387</link><pubDate>Tue, 08 Jan 2008 18:50:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7029387</guid><dc:creator>ZachZ</dc:creator><description>&lt;p&gt;To paraphrase Godel, any sufficiently complex system contains inconsistency.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#7110164</link><pubDate>Mon, 14 Jan 2008 21:06:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7110164</guid><dc:creator>TJ</dc:creator><description>&lt;p&gt;If the input space is infinite and EVERY input value generates more than one output value, the E (experiences) would theorethically outgrow the unknown (U) which is imposible because the U is unlimited (infinite).&lt;/p&gt;
&lt;p&gt;Simply said: Program would know more than what's unknown (based on the fact that E is growing while U is shrinking, as well that there are more E records per U record).&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#7116469</link><pubDate>Tue, 15 Jan 2008 10:04:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7116469</guid><dc:creator>wesdyer</dc:creator><description>&lt;p&gt;TJ:&lt;/p&gt;
&lt;p&gt;The input space is not filled with input values but input sequences. &amp;nbsp;The output space is not filled with output values but output sequences. &amp;nbsp;The size of each space is the same. &amp;nbsp;There is no such contradiction.&lt;/p&gt;
</description></item><item><title>re: Musings on Software Testing</title><link>http://blogs.msdn.com/wesdyer/archive/2007/12/07/musings-on-software-testing.aspx#8528193</link><pubDate>Wed, 21 May 2008 17:03:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8528193</guid><dc:creator>idiot programmers</dc:creator><description>&lt;p&gt;what a bunch of CRAP&lt;/p&gt;
&lt;p&gt;what are you smoking dude&lt;/p&gt;
</description></item></channel></rss>