<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>The Testing Blog</title>
	<atom:link href="http://thetestingblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thetestingblog.com</link>
	<description>Why, testing, of course!</description>
	<lastBuildDate>Thu, 12 Jan 2012 00:58:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thetestingblog.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Testing Blog</title>
		<link>http://thetestingblog.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thetestingblog.com/osd.xml" title="The Testing Blog" />
	<atom:link rel='hub' href='http://thetestingblog.com/?pushpress=hub'/>
		<item>
		<title>Are you getting a positive ROI from testing?</title>
		<link>http://thetestingblog.com/2011/03/24/are-you-getting-a-positive-roi-from-testing/</link>
		<comments>http://thetestingblog.com/2011/03/24/are-you-getting-a-positive-roi-from-testing/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 21:14:05 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=476</guid>
		<description><![CDATA[Last night I watched a movie called The Tourist with Angelina Jolie and Johnny Depp. Despite the promising previews, it was a huge turd. The movie was chalked full of awful dialog, worse acting, and cheesy clichés. If you watch enough movies, you might come to the conclusion that there&#8217;s no petty crime in Europe. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=476&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last night I watched a movie called The Tourist with Angelina Jolie and Johnny Depp.  Despite the promising previews, it was a huge turd.  The movie was chalked full of awful dialog, worse acting, and cheesy clichés.  If you watch enough movies, you might come to the conclusion that there&#8217;s no petty crime in Europe.  All European criminals are rich playboy savants that pull off only the most grandiose of crimes.  They are all philosophical and very civilized, yet there&#8217;s a brutal streak to them.  I can recall several instances of the &#8220;gentleman&#8221; gangster killing someone with his bare hands and then instantly returning to civility?  In these movies, there&#8217;s almost always a self-reflective explanation of their plans or motives.  And somehow, the police in Europe are either corrupt or powerless to stop these kingpins.  Basically, almost every European villain since 1964 is Goldfinger.</p>
<p>The accepted, overplayed archetypes present in the Tourist made me think about testing.  Just like the movie clichés, we&#8217;re so stupid in freely accepting bullshit testing patterns and practices.  MY definition of a bullshit testing pattern or practice: one that doesn&#8217;t work for your situation.  Testing methods that might be pure gold to your project might be pure garbage to another.  (We can&#8217;t all be Charlie Sheen, converting &#8220;tin cans into pure gold&#8221;).  I&#8217;ve heard it said that there are no best practices in testing, only good ones.  <strong>The worst thing you can do as a QA group is do work that doesn&#8217;t somehow help the quality of your software.  When doing anything in testing, you need to ask yourself, what&#8217;s my return on investment (ROI)?  Is the testing that we&#8217;re doing telling us anything about the code?</strong></p>
<p>One area that seems to be rife with bullshit is test automation.  YES, I SAID IT!!!  In fact, if you&#8217;re using off-the-shelf test automation tools (like Mercury products), then there&#8217;s a 90% chance (with a +-10% margin of error) that your test automation is complete and utter bullshit!  Before you get mad at me, ask yourself, how many bugs have you found by running that behemoth suite of tests?  How has it helped your product actually get better?  Are you getting any assurance that your product is up and running?  Was it worth the oil sheik fortune that you paid for it?</p>
<p>Let me give you a real world example on automation bullshit.  There&#8217;s this product team that I have intimate knowledge of.  This product team has both unit tests (JUnit) and Selenium UI tests being written against their code base.  The unit tests are being run with each build, and the build won&#8217;t complete if any tests break.  The Selenium tests are scheduled to run nightly in Hudson at various intervals so they don&#8217;t overlap.  Except for a one hour reserved maintenance window, the Selenium tests keep the servers busy all night.  Yet, with all this &#8220;testing&#8221; that is being done, the product still often arrives to the QA team egregiously broken.  Why is that?  Don&#8217;t the unit tests find problems?  The offshore team writing the Selenium tests told me that they have 700+ tests running at regular intervals.  He went on to say that they have no bugs to report from running those tests, but when they do, they will let me know.  Hmm, so you&#8217;ve spent months creating these suites, and you aren&#8217;t finding any bugs?  On the other hand, you&#8217;ve paid another team to write unit tests on code they didn&#8217;t write, and major problems are still getting through?  You have these Cobetura reports show that you&#8217;re getting close to complete coverage on the code base.  Complete coverage and there&#8217;s still problems.  YOU GOT TO BE KIDDING!!!  WHAT A STEAMING LOAD OF BULLSHIT!!!  One team is writing Selenium tests.  One team is writing JUnit tests.  And there are no bugs to show for it.  There are no red flags showing us potential defects.  There is no confident assurance that anything is working or not working.  I think it&#8217;s safe to say that the company is getting a negative return on their testing investment.  And that, in this case, automation is a complete waste of time.</p>
<p>Obviously, JUnit, Cobertura, and Selenium aren&#8217;t bad tools.  They just happen to be bad tools in the wrong hands&#8211;in the wrong situations.  They are used to create all these &#8220;tests&#8221;.  Instead of just accepting these &#8220;tests&#8221;, teams should be testing that the tests do something meaningful.  They should be looking to the yield of the fruits of their labor, not how much work they&#8217;ve done.   <strong>For every automated test written, you should prove how it can fail by making it fail. </strong>Think about it!  Test it!  Have others think about it too!</p>
<p>Let&#8217;s get away from automation because my point isn&#8217;t to trash automation.  Here&#8217;s another example.  Given Agile&#8217;s popularity, I think the full manual regression of a product is very passé.  The full regression of a big product could take weeks or months.  If your dev team is adding code everyday, then it&#8217;s not pragmatic to take on a full regression.  You need to be more surgical with your testing, more precise.  Focus on testing the parts that are actually effected by change.  The full regression is one of those archetypes that&#8217;s accepted because it&#8217;s familiar, but it&#8217;s unrealistic, antiquated, and pretty stupid in a continuous integration world.  However, you may be in an industry that requires that kind of attention to every detail.  And in your case, that might not be a bullshit testing practice.</p>
<p>My point is not to tell you what you&#8217;re doing to test your product is bullshit.  My point is to wake you up to practices that aren&#8217;t helping your product.  I understand that not all tests are created to find problems, but some testing is there to assure you don&#8217;t have problems (regression testing).  However, are you sure that your tests will reveal a problem when there is a problem?  My point is to be skeptical.  Don&#8217;t just do something because you saw it done like this when you worked at IBM or AT&amp;T.  Don&#8217;t just do something because that&#8217;s the only thing you know to do.  Do something because it&#8217;s going to make the code better.  Start with a goal for the testing in mind.  If your goal is to tell you X, then come up with scenarios where that X would be revealed.  Then execute those scenarios!  Just like we don&#8217;t trust the developer code handed to us.  Don&#8217;t let your left hand trust the test case that your right hand created.  Remember, at the end of the day, it&#8217;s all about the return on investment.  Just like developers deliver value by coding something useful, testers need to deliver value by uncovering problems or telling the true story of the product.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/476/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=476&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2011/03/24/are-you-getting-a-positive-roi-from-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>
	</item>
		<item>
		<title>Hyperbole in Testing! (Shame on us)</title>
		<link>http://thetestingblog.com/2010/12/01/hyperbole-in-testing-shame-on-us/</link>
		<comments>http://thetestingblog.com/2010/12/01/hyperbole-in-testing-shame-on-us/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 22:29:50 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=466</guid>
		<description><![CDATA[It&#8217;s funny how it&#8217;s always easier to point out the speck in someone else&#8217;s eye and ignore the giant plank in your own as a great 1st century religious figure once pointed out.  (I&#8217;m talking about Jesus!!  Matthew 7:3.  It&#8217;s Christmas time!!) And no other group on the whole face of the earth is better [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=466&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s funny how it&#8217;s always easier to point out the speck in someone else&#8217;s eye and ignore the giant plank in your own as a great 1st century religious figure once pointed out.  (I&#8217;m talking about Jesus!!  Matthew 7:3.  It&#8217;s Christmas time!!)</p>
<p>And no other group on the whole face of the earth is better at pointing out flaws than software testers.  But when does testing go too far?  When are our scenarios become too outlandish to reasonably fit into reality?</p>
<p><strong>Here&#8217;s an actual scenario:</strong></p>
<p>For the past couple weeks, we&#8217;ve been trying to get some new hire testers up to speed on our product.  They are zealous and making good progress.  One of these testers found an address control in our UI that&#8217;s doing no validation between the City, State, and Zip.  i.e you can put in &#8220;CA&#8221; for the state and &#8220;10100&#8243; for the zip.  Clearly without looking, you can tell that a California zip would have a lot higher number than that.  And if you match it up for the city, you can be even more specific.  Good find.  It&#8217;s perfectly reasonable to assume that those values should be validated.  That&#8217;s a very basic thing now.  There are services out there to assist with that.  Not hard to develop; we did lots of that kind of stuff at Edfinancial.  The tester submitted the &#8220;Bug&#8221; to development, and they denied it on the grounds that it works as coded and no requirements to validate the City, State, and Zip.  That&#8217;s a reasonable response too.  Though it&#8217;s a defect that might cause a problem given a certain data set, it&#8217;s really management&#8217;s call on whether it needs to be fixed.</p>
<p>This zealous new tester decided to write a response to development, arguing that they must fix it because it could put our company in legal troubles, violating compliance and privacy agreements.  Though my senior in age and experience, he wisely asked me advice on whether to send it or not.  Given my knowledge of the culture,  I told him there&#8217;s no way in Hell that I would commit that response to the ticket.  He did his job.  He reported the defect, explaining the scenario nicely.  End of story.  Just drop it.  He countered with other passionate arguments that the mail from us might end up in a competitor&#8217;s hand, given a Zip Code mix up, and it might cost our company millions of dollars to straighten out the problem.  I told him that his arguments weren&#8217;t really sound because the probability of that actually happening is slim to none.  Out of the millions of addresses in the US, what is the chance that the letter, because of a bad Zip Code, could end up in a competitor&#8217;s hand?  Even if it did, what are the chances that the competitor would open mail not directed to them?  Even if they did, what kind of ruthless havoc could they inflict on our company?  They certainly wouldn&#8217;t want to advertise that they broke federal law by opening someone else&#8217;s mail.  In my mind, it&#8217;s a moot point.  Maybe it could happen, but there&#8217;s no realistic chance.</p>
<p><strong>Epiphany:</strong></p>
<p>Then it hit me!  <strong>As developers underplay the chances of their bugs causing a problem, we testers often overplay the effects of leaving bugs in! </strong> We traffic in hyperbole as much if not more than developers.  We predict doom and gloom when the truth is everything will probably be fine.  So, why do we do it?</p>
<ul>
<li><strong>The Business Loves Emergencies:</strong> Maybe we believe that if we don&#8217;t paint a picture of Armageddon, it won&#8217;t ever get fixed.  At my company, there&#8217;s nothing like a good fire to get the coders up and running, especially when it happens at odd hours!</li>
<li><strong>Hedging Against Disaster</strong>: Maybe we can&#8217;t represent the bug in proper context because we&#8217;re afraid that it might be bigger than we expected.  We say it&#8217;s no problem, then it&#8217;s the BP oil spill.  It&#8217;s better to be on the &#8220;I told you so&#8221; end of a disaster.</li>
<li><strong>Self-Importance:</strong> Maybe we have to make the bugs look bigger so that we can feel better about the contribution we&#8217;re making.  Maybe we&#8217;re a bunch of ego maniacs starved for accolades.</li>
</ul>
<p><strong>Final Thought: </strong></p>
<p>As a tester, credibility is king.  If you&#8217;re a credible, the business will heed just your word.  If you&#8217;re a chicken little tester, clucking at every little thing, they will take everything you say with a grain of salt.  Be honest as you can with yourself.  &#8221;To thine own self be true, &#8221; as The Bard said.  Don&#8217;t focus on the trivial.  Focus on the big picture.  Focus on testing!</p>
<p><strong>Postscript:</strong></p>
<p>Here&#8217;s something interesting.  According to one of our subject matter experts, the <strong>suspect address control isn&#8217;t being used by ANY of our current customers</strong>.  So, the lack of validation is all really &#8220;Much ado about nothing.&#8221;  Two Shakespeare references in one post!  Score!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/466/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/466/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/466/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/466/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/466/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/466/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/466/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/466/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=466&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/12/01/hyperbole-in-testing-shame-on-us/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>
	</item>
		<item>
		<title>Have you heard about NUnit Attributes and how they&#8217;re awesome?</title>
		<link>http://thetestingblog.com/2010/08/31/have-you-heard-about-nunit-attributes-and-how-theyre-awesome/</link>
		<comments>http://thetestingblog.com/2010/08/31/have-you-heard-about-nunit-attributes-and-how-theyre-awesome/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 23:16:50 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[NUnit]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[test automation]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=425</guid>
		<description><![CDATA[VERY IMPORTANT!!! Some attributes in this article are only available in NUnit 2.5 and later. I would strongly recommend upgrading your NUnit to the newest version. Okay, so, have you heard about NUnit attributes, and how they&#8217;re awesome? Sure you&#8217;ve heard of Setup, Test, TestFixture, and TearDown? But how about Values? How about Range? The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=425&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>VERY IMPORTANT!!! Some attributes in this article are only available in NUnit 2.5 and later.  I would strongly recommend upgrading your NUnit to the newest version.</strong></p>
<p>Okay, so, have you heard about NUnit attributes, and how they&#8217;re awesome?<br />
Sure you&#8217;ve heard of Setup, Test, TestFixture, and TearDown?  But how about Values?  How about Range?</p>
<p>The Values attribute allows you to run the same test several times with different values.  It makes it where you&#8217;re not doing something crazy like copy and pasting the same test, over and over again!  I was close to that situation, but it hurt my soul too much to do that.  So, in order to save my soul, I had to seek a path for redemption.  Here&#8217;s what I found:</p>
<p>Okay, to try this, you may need to set up a sample test.  If you need to start from scratch, check out my End-to-End Example: http://thetestingblog.com/2009/09/10/selenium-rc-in-c-using-nunit-an-end-to-end-example/</p>
<p>My example test verifies that the text &#8220;Daniel Brown&#8221; is present on the main testing blog page&#8211;a simple pass or fail.  But imagine we wanted to run the test 3 times, each time verifying the presence of a different Testing Blog author.  Here&#8217;s how we would do it using the Values attribute:</p>
<p><pre class="brush: csharp;">
        [Test]
        public void ValuesTest([Values(&quot;Daniel Brown&quot;, &quot;Marisa Seal&quot;, &quot;Josh Carroll&quot;)] string textPresent)
        {
            selenium.Open(&quot;http://www.google.com&quot;);
            selenium.Type(&quot;q&quot;, &quot;thetestingblog.com&quot;);
            selenium.Click(&quot;btnI&quot;);
            selenium.WaitForPageToLoad(&quot;60000&quot;);
            Assert.IsTrue(selenium.IsTextPresent(textPresent));
        }
</pre></p>
<p>As you can see, we&#8217;re basically passing the argument &#8220;textPresent&#8221; into the method.  The values are what you want the argument to be.  For each value, run the test once with &#8220;textPresent&#8221; = to that value:<br />
<code>[Values("Daniel Brown", "Marisa Seal", "Josh Carroll")] string stringPresent</code></p>
<p>So, in the case of this test; here&#8217;s how it would run:<br />
SetupTest();<br />
ValuesTest(&#8220;Daniel Brown&#8221;);<br />
TeardownTest();<br />
SetupTest();<br />
ValuesTest(&#8220;Marisa Seal&#8221;);<br />
TeardownTest();<br />
SetupTest();<br />
ValuesTest(&#8220;Josh Carroll&#8221;);<br />
TeardownTest();</p>
<p>This is how it looks in the test runner:<br />
<a href="http://thetestingblog.files.wordpress.com/2010/08/49.jpg"><img class="aligncenter size-full wp-image-435" title="49" src="http://thetestingblog.files.wordpress.com/2010/08/49.jpg?w=544" alt=""   /></a></p>
<p>Okay, that wasn&#8217;t too bad.  Now, let&#8217;s go a crazy.  Let&#8217;s get nuts.  Potentially throwing best practices to the wind.  We&#8217;re going make this example where it pulls the values from a text file instead of hard coding them.  To do that, let&#8217;s add a text file to our project:</p>
<p>Right click on your project (&#8220;TestingBlogSeleniumRc&#8221;) in the Solution Explorer -&gt; <strong>Add </strong>-&gt; <strong>New Item&#8230; </strong></p>
<p>Select Text File and call it ValueList.txt</p>
<p>Open the file in your editor and type the three values into the text file.  One per line:</p>
<div id="_mcePaste">Daniel Brown</div>
<div id="_mcePaste">Marisa Seal</div>
<div id="_mcePaste">Josh Carroll</div>
<div><a href="http://thetestingblog.files.wordpress.com/2010/08/60.jpg"><img class="aligncenter size-full wp-image-440" title="60" src="http://thetestingblog.files.wordpress.com/2010/08/60.jpg?w=544&#038;h=224" alt="" width="544" height="224" /></a></div>
<p>Next we want to make sure that the text file is copied over into the bin folder on build.</p>
<p>Right click on your project (&#8220;TestingBlogSeleniumRc&#8221;) in the Solution Explorer and select <strong>Properties</strong>.  Then select <strong>Build Events</strong>.  Under the <strong>Pre-build event command line: </strong>(or post-build; it doesn&#8217;t matter) paste in:</p>
<p><code>copy "$(ProjectDir)ValueList.txt" "$(TargetDir)"</code></p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/08/59.jpg"><img class="aligncenter size-full wp-image-438" title="59" src="http://thetestingblog.files.wordpress.com/2010/08/59.jpg?w=544&#038;h=272" alt="" width="544" height="272" /></a></p>
<p>Our test is going to be looking for ValueList.txt so that copy command assures that it&#8217;s in the same folder as the test dll.</p>
<p><strong>(FULL CODE EXAMPLE BELOW)</strong></p>
<ul>
<li>We need to add a reference to System.IO</li>
<li>Next we&#8217;re going to add a global string array to our class called <strong>textPresentList</strong></li>
<li>We are going to read the ValueList.txt file into an array in our setup.  As coded, it should only be read in the first time the SetupTest() method is run.  If you&#8217;re a Unit Test purist, you could easily change it to read the file in every time, but I thought it seemed like a waste.</li>
<li>Next we need to add the <span style="color:#33cccc;">Range </span>attribute to a copied and renamed version of our first test.  The range should be hard coded from 0 to 2.  (I tried to do something clever like put it from 0 to textPresentList.Length-1, but the compile wouldn&#8217;t have it.  These NUnit attribute values, it appears have to be somewhat static.  This kludge that I&#8217;m showing is way to get around the static nature if only a little bit.  This way the values can be dynamic even if the number of values can&#8217;t be.  By the way, if anyone has a better idea to make it more dynamic, please post it.)</li>
<li>Change the <strong>selenium.IsTextPresent(textPresent)</strong> to <strong>selenium.IsTextPresent(textPresentList[i])</strong>.</li>
<li>Then Compile and Run.</li>
</ul>
<p><a href="http://thetestingblog.files.wordpress.com/2010/08/63.jpg"><img class="aligncenter size-full wp-image-441" title="63" src="http://thetestingblog.files.wordpress.com/2010/08/63.jpg?w=544" alt=""   /></a></p>
<p>You won&#8217;t be able to see the values from the file in the Test Runner, but you could write the value translations to the console so that you could see which index corresponds to which value:<br />
<code>Console.WriteLine("Index " + i +": " + textPresentList[i]);</code></p>
<p>In the Test Runner, select the <strong>Text Output</strong> tab to view the output:</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/08/66.jpg"><img class="aligncenter size-full wp-image-444" title="66" src="http://thetestingblog.files.wordpress.com/2010/08/66.jpg?w=544&#038;h=262" alt="" width="544" height="262" /></a></p>
<p>The whole point of this post is not to show you what to do, but instead to open up your mind to possibilities.  NUnit has some cool functionality, and most of us never scrape the surface of it&#8217;s potential.  I challenge you to go and explore the various attributes available for yourself.  Here&#8217;s the link: <a href="http://nunit.org/index.php?p=attributes&amp;r=2.5.7">http://nunit.org/index.php?p=attributes&amp;r=2.5.7</a></p>
<p><strong>Remember upgrade your NUnit to the newest version.  Chances are that you&#8217;re not current.</strong></p>
<p><strong>FULL CODE:</strong></p>
<p><pre class="brush: csharp;">
using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;

namespace TestingBlogSeleniumRc
{
	[TestFixture]
	public class FirstTest
	{
		private ISelenium selenium;
        private string[] textPresentList;

		[SetUp]
		public void SetupTest()
		{
            if (textPresentList == null)
                textPresentList = File.ReadAllLines(&quot;ValueList.txt&quot;);
			selenium = new DefaultSelenium(&quot;localhost&quot;, 4444, &quot;*iexplore&quot;, &quot;http://www.google.com/&quot;);
			selenium.Start();
		}

		[TearDown]
		public void TeardownTest()
		{
		    selenium.Stop();
		}

        [Test]
        public void DynamicValuesTest([Range(0,2)] int i)
		{
			selenium.Open(&quot;http://www.google.com&quot;);
			selenium.Type(&quot;q&quot;, &quot;thetestingblog.com&quot;);
			selenium.Click(&quot;btnI&quot;);
			selenium.WaitForPageToLoad(&quot;60000&quot;);
            Console.WriteLine(&quot;Index &quot; + i +&quot;: &quot; + textPresentList[i]);
            Assert.IsTrue(selenium.IsTextPresent(textPresentList[i]));
		}
        [Test]
        public void ValuesTest([Values(&quot;Daniel Brown&quot;, &quot;Marisa Seal&quot;, &quot;Josh Carroll&quot;)] string textPresent)
        {
            selenium.Open(&quot;http://www.google.com&quot;);
            selenium.Type(&quot;q&quot;, &quot;thetestingblog.com&quot;);
            selenium.Click(&quot;btnI&quot;);
            selenium.WaitForPageToLoad(&quot;60000&quot;);
            Assert.IsTrue(selenium.IsTextPresent(textPresent));
        }
	}
}</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/425/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=425&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/08/31/have-you-heard-about-nunit-attributes-and-how-theyre-awesome/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/08/49.jpg" medium="image">
			<media:title type="html">49</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/08/60.jpg" medium="image">
			<media:title type="html">60</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/08/59.jpg" medium="image">
			<media:title type="html">59</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/08/63.jpg" medium="image">
			<media:title type="html">63</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/08/66.jpg" medium="image">
			<media:title type="html">66</media:title>
		</media:content>
	</item>
		<item>
		<title>Replace Adobe Acrobat Reader FOREVER!!!</title>
		<link>http://thetestingblog.com/2010/07/06/replace-adobe-acrobat-reader-forever/</link>
		<comments>http://thetestingblog.com/2010/07/06/replace-adobe-acrobat-reader-forever/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 16:41:58 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=418</guid>
		<description><![CDATA[You know what pisses me off?  It&#8217;s the little things!  To quote the grunge band Bush, &#8220;It&#8217;s the little things that kill, tearing at my brains again.&#8221;  Why?  Because they seem to irritate the most&#8211;irritate you to death.  It&#8217;s the fly buzzing around while you&#8217;re trying to relax.  It&#8217;s the splinter in your hand.  It&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=418&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You know what pisses me off?  It&#8217;s the little things!  To quote the grunge band Bush, &#8220;It&#8217;s the little things that kill, tearing at my brains again.&#8221;  Why?  Because they seem to irritate the most&#8211;irritate you to death.  It&#8217;s the fly buzzing around while you&#8217;re trying to relax.  It&#8217;s the splinter in your hand.  It&#8217;s the neighbor&#8217;s dog barking at night while you try to sleep.  Little things should be fixed and not tolerated.  For years I&#8217;ve been a victim of Adobe Reader&#8217;s endless automatic updates, resource grabbing, and slow runtime.  It&#8217;s such bullshit!  It&#8217;s just a crappie PostScript viewer!  You can&#8217;t even use it to edit anything!  Adobe Reader ≈ 140 MB, Notepad++ ≈ 9MB.  What&#8217;s wrong with this picture?</p>
<p>Here was the spark that finally spurred me to action this morning.  And I&#8217;ve seen this before but it just hit me particularly wrong this morning:</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/07/9.jpg"><img class="aligncenter size-full wp-image-420" title="9" src="http://thetestingblog.files.wordpress.com/2010/07/9.jpg?w=544" alt=""   /></a></p>
<p>RESTART!!!!  You got to be kidding!!!  Why the Hell do I have to restart?  All I did was update a viewer, really just a plugin for a browser.  Adobe, do you have any idea how long it takes my work computer to restart?  What could be so important that you&#8217;re making me reboot?  If it&#8217;s such a pain for me, it&#8217;s most likely a pain for other people too.  Have you considered the irritation you&#8217;re causing everyone?</p>
<h2>The Solution: Foxit</h2>
<p>Okay, I&#8217;ve had enough.  I uninstalled Adobe Reader, and I installed a replacement product that my friend Brandon recommended called Foxit.  <a href="http://www.foxitsoftware.com/pdf/reader/">http://www.foxitsoftware.com/pdf/reader/</a></p>
<ul>
<li>My first worry was that it doesn&#8217;t work with my browsers.  However, that worry was unfounded.  I tested pulling up a PDF from a URL in IE8, Firefox, and even Chrome (my browser of choice).</li>
<li>My first observation was the speed.  It was so much faster than Adobe.  (Didn&#8217;t Adobe invent PDF&#8217;s?)</li>
<li>Plus, the Interface looks pretty refined and easy to use.</li>
<li>Foxit install is 10.44 MB versus Adobe Reader 9.3 at 143 MB</li>
</ul>
<p>I don&#8217;t completely endorse the product because I haven&#8217;t had substantial time using it, but so far I like it.   The main thing is that I got a chance to pwn Adobe!  Take that you bastards!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/418/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/418/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/418/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=418&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/07/06/replace-adobe-acrobat-reader-forever/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/07/9.jpg" medium="image">
			<media:title type="html">9</media:title>
		</media:content>
	</item>
		<item>
		<title>Fear of Success</title>
		<link>http://thetestingblog.com/2010/05/03/fear-of-success/</link>
		<comments>http://thetestingblog.com/2010/05/03/fear-of-success/#comments</comments>
		<pubDate>Tue, 04 May 2010 03:16:13 +0000</pubDate>
		<dc:creator>Josh Carroll</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=409</guid>
		<description><![CDATA[by Josh Carroll I was in the middle of making a rather lengthy comment on Daniel&#8217;s most recent blog post when I decided it was long enough to warrant a full posting. I wanted to get across the point that the situation Daniel finds himself in is not solely the plight of the software tester. Rather, anyone [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=409&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>by Josh Carroll</p>
<p>I was in the middle of making a rather lengthy comment on <a href="http://thetestingblog.com/2010/04/30/exploratory-testing-and-a-prophet-without-honor/">Daniel&#8217;s most recent blog post</a> when I decided it was long enough to warrant a full posting.</p>
<p>I wanted to get across the point that the situation Daniel finds himself in is not solely the plight of the software tester. Rather, anyone who esteems software quality runs the risk of being <a href="http://www.joelonsoftware.com/items/2009/09/23.html">criticized</a>, <a href="http://www.gigamonkeys.com/blog/2009/10/05/coders-unit-testing.html">dismissed</a>, or <a href="http://www.codinghorror.com/blog/2009/02/the-ferengi-programmer.html">made fun of</a>. Why is it that organizations and groups are so resistant to something that will improve their process, their product, and their bottom line. The idea is one I have been thinking a lot about, and I believe I have had an epiphany.</p>
<p><strong>Sometimes, people are more afraid of success than failure!</strong></p>
<p>Wait&#8230; what did you say?!? You heard right, and I&#8217;ll say it again. <em>Sometimes, people are more afraid of success than failure.</em></p>
<p>I recently gave a presentation where I cited the <a title="Microsoft study on TDD" href="http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf">Microsoft study on TDD</a> that found:</p>
<blockquote><p>The results of the case studies indicate that the pre-release defect density of the four products decreased between 40% and 90% relative to similar projects that did not use the TDD practice. Subjectively, the teams experienced a 15–35% increase in initial development time after adopting TDD.</p></blockquote>
<p>The idea that up to 90% of your test and fix cycles can be eliminated represents an enormous cost savings even if you factor in the high end estimate of 35% increase in initial development time. You will more than make that time up by not having to fix the 90% of bugs that are now gone from the system. With numbers like that you would think that management would be breaking people&#8217;s knuckles for not using TDD. Developer&#8217;s would be falling over themselves to TDD even the smallest spec of code just to avoid doing maintenance (<em>curse the ground that software maintenance walks on</em>).</p>
<p>But alas, there was no stampede. No rush to go forth and test. No proclamation from management that it must be so. So&#8230; what gives?</p>
<p>What gives is that it might just work! Developers might just write cleaner code, and be more productive. Testers might be able to confirm code quickly and have the freedom to explore automated acceptance testing. Deadlines might be met, and the company might save money. And&#8230; and&#8230; <strong>we might have to admit that we have been doing it all wrong for a very long time.</strong></p>
<p>And there it is; the big white elephant in the room of software quality. Not fear of failure, but fear of success. Because <strong>success means having to admit things can and should be better</strong>. Even worse, that they <em>could have been better</em> all along. And we don&#8217;t like that. Most of us like to think we are pretty smart, that we are pretty damn good at what we do. When someone shows us a better way, our little bubble bursts, and we are forced to admit that we aren&#8217;t as special as we&#8217;d like to think we are.</p>
<p>The mediocre will always defend the status quo because their sense of worth is derived from being the smartest, funniest, sexiest, whateverist person around. They are a big fish in a little pond, and they like it that way.</p>
<p>The exceptional are never satisfied with the quality of their own work. They assume that there must be a better way, and seek out the best and brightest in the world to learn from. They draw their sense of worth from knowing they are better today than they were yesterday.</p>
<p>Exceptionalism is the arch-enemy of mediocrity, and success is it&#8217;s kryptonite!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/409/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=409&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/05/03/fear-of-success/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/213ff080fa03648f0b71e4f4658a8046?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Josh</media:title>
		</media:content>
	</item>
		<item>
		<title>Exploratory Testing and A Prophet Without Honor</title>
		<link>http://thetestingblog.com/2010/04/30/exploratory-testing-and-a-prophet-without-honor/</link>
		<comments>http://thetestingblog.com/2010/04/30/exploratory-testing-and-a-prophet-without-honor/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 20:01:40 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=404</guid>
		<description><![CDATA[This week I gave an Introductory to Exploratory Testing for the Kansas City DotNext technology group.  The presentation went better than I thought.  I worked really hard on preparing it so I guess I shouldn&#8217;t be shocked it went well.  How does the old saying go?  &#8221;The harder I work, the luckier I get&#8221;.  Also, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=404&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This week I gave an Introductory to Exploratory Testing for the Kansas City DotNext technology group.  The presentation went better than I thought.  I worked really hard on preparing it so I guess I shouldn&#8217;t be shocked it went well.  How does the old saying go?  &#8221;The harder I work, the luckier I get&#8221;.  Also, I went totally PowerPoint-free; I only used the big easel pads.  I was proud of myself for breaking away.</p>
<p>I was very impressed by the people that attended the talk.  They were all software developers and highly technical. Plus, they all seemed interested in testing.  (Of course, when I pulled out the candy, people got even more interested.)  I was glad to have an audience that challenged, asked questions, and made terrific observations and points.  People mentioned technologies they used.  They talked about patterns and approaches, citing real world implementations.  As I speaker, I couldn&#8217;t ask for more.</p>
<p>Not one person from my current company came to the presentation, though I informed everyone through email with notice.  That seems reasonable.  The presentation was downtown KC (our company is 25 mins away in the suburbs); someone would have had to be very interested in coming to want to go.  Either that or really owe me a favor (i.e. I went to one of their presentations or baby sat for their kids).  I wasn&#8217;t shocked that no one came.  What I was shocked about was how few people replied to wish me luck or asked me about it.  This is after I sent out an email with the phrase, &#8220;I’m presenting on Exploratory Testing tomorrow, April 27<sup>th</sup> at 7:00 pm at the DotNext meeting.  Wish me luck.&#8221;  Three people out of 30 wished me luck.  And one guy asked me about it the next day.  That tells me that people don&#8217;t care.  And they don&#8217;t even care about faking to care.  What does that tell you?  Two groups of software developers: one group wanted to listen (total strangers) and one didn&#8217;t want to condescend interest (people I know).</p>
<p><strong><em>Jesus said to them, &#8220;A prophet is not without honor except in his hometown and among his own relatives and in his own household.&#8221;</em> (Mark 6:4)</strong></p>
<p>Most of the time, QA people don&#8217;t get the respect they deserve.  Working with my colleague Marisa  at Edfinancial, QA was well respected and not seen as the pariahs of the group.  Most organizations don&#8217;t respect their QA prophets.  We, the prophets, tell them that their shortcuts are going to bite them in the butt.  We tell them that standards and sound process will help things, and they don&#8217;t believe us.  We tell them that bugs need to be fixed and defects are dangerous, and they don&#8217;t listen.  No only will they not listen, but they also want to stone us and run us out of town.</p>
<p><strong>My question is where do you, <strong>as a QA prophet, </strong>draw your purpose and satisfaction?</strong></p>
<p><strong><span style="font-weight:normal;">Here&#8217;s the part that I give the answer, right? </span></strong></p>
<p><strong><span style="font-weight:normal;">Wrong.  I don&#8217;t have the answer.  All I know is that it&#8217;s probably something intrinsic.  I think that will and desire have to come from within. </span></strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/404/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/404/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=404&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/04/30/exploratory-testing-and-a-prophet-without-honor/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>
	</item>
		<item>
		<title>QA, Being A Professional, and Waiting Tables</title>
		<link>http://thetestingblog.com/2010/04/08/qa-being-a-professional-and-waiting-tables/</link>
		<comments>http://thetestingblog.com/2010/04/08/qa-being-a-professional-and-waiting-tables/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 01:59:03 +0000</pubDate>
		<dc:creator>Josh Carroll</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[professionalism]]></category>
		<category><![CDATA[quality]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=390</guid>
		<description><![CDATA[by Josh Carroll If you are a little lost by the title, it will all make sense in a moment&#8230; um&#8230; sort of. Until I started my career as a software developer I worked a lot of other jobs. I have had a job since I was 16 years old, and that was just an [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=390&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>by Josh Carroll</p>
<p>If you are a little lost by the title, it will all make sense in a moment&#8230; um&#8230; sort of.</p>
<p>Until I started my career as a software developer I worked a lot of other jobs. I have had a job since I was 16 years old, and that was just an excuse to get out of doing manual work for my parents around the house. I&#8217;ve worked as a bagger at a grocery store, cashier at a big-box-mart, usher, concessions, and box clerk for a movie theater, tech support for a DSL provider, general laborer for a masonry outfit, and the last job I worked before slinging code full-time was waiting tables.</p>
<p>All of these jobs really have one thing in common: <strong>I was the person who always caught the tail end of the customer&#8217;s experience: whether it was good or bad&#8230; <em>especially</em> when it was bad!</strong></p>
<p><strong><span style="font-weight:normal;">Waiting tables is an interesting experience, and one I think everyone should have to do at least once in their life. As a waiter you are the face of the dining experience for the customer. Before the customer even gets there, you are preparing the store to make their time enjoyable. You clean the kitchen, wash dishes, stock pantry items, napkins, silverware. You go over your section to make sure that everything is set up correctly and clean.</span></strong></p>
<p>Once a table in your section has been seated, as far as the customer is concerned, you <em>are</em> the restaurant. You size up the customer to figure out what kind of approach you should take (believe me it makes a difference). You give them an overview of the menu, get their drinks, throw out a couple of suggestions, and meticulously write down the order  making double sure to repeat back the order so there are no misunderstandings. Without delaying, you ensure that the order is put into the computer accurately and check to see that the kitchen staff gets the ticket. If needed you even explain any nuances of the order to the cooks: &#8220;&#8216;SUB BAKER ADD CHEESE.&#8217; Hey Joe, they want a baked potato instead of mashed, and they want to add cheese to the sandwich, NOT the baker!&#8221;</p>
<p>While waiting for the food you are feverishly busing, washing, and resetting tables for the next set of patrons that walk into your section; you make sure they think they are the first people to sit there. A single spec of food left on the table or the floor can ruin the whole meal! Every time you walk into the kitchen you are checking the status of your food.</p>
<p>&#8220;307 IN THE WINDOW!&#8221;</p>
<p>Your order is up and now you are checking every detail to make sure the food you have matches the ticket. You tidy up the presentation a little and make sure the plates are picture perfect. Drop the food off to the table and make sure they have everything they need: drink, condiments, extra napkins, steak knives, etc&#8230; You let the table dig in and about two minutes later you come back to make sure everything was up to par. <strong>You never take them at their word either! </strong>You have to actually <em>look</em> at their plates, and their faces to see if they are telling the truth.<strong> ﻿</strong>Most people are too sheepish to tell you everything sucks, and they will simply not come back to the restaurant if the experience is bad. It is up to you to see this and recover their patronage.</p>
<p>Ok. So what? Why waste your time with this?</p>
<p>Because QA and waiting tables have a lot in common. <strong>As QA, you are the standard bearer for a quality user experience</strong> much the same way that a waiter is the standard bearer for a quality dining experience. In order to really be effective you have to be involved in the process from start to finish. You need to be there when the user story is first conceptualized in order to effectively develop a testing strategy. You need to determine the set of criteria by which a story can be considered done (acceptance criteria). You also need a repeatable way to ensure the story as coded meets those criteria (Fit/FitNesse, StoryTeller, Selenium).</p>
<p>As the story is being developed you need to be in constant communication with the developer (cook) to make sure that any misunderstandings are cleared up immediately. Developers make assumptions if the acceptance criteria are vague. So find out what those assumptions are, and refine your acceptance tests accordingly. Be proactive about communicating your testing strategy to the developer(s) working on the story so they won&#8217;t be tempted to just throw it over the wall. A good developer will make your job easier here, but <strong>good acceptance tests do NOT care how well written the code is. </strong>Remember that your main goal is not to find bugs, but to verify that the feature/product will meet the customers needs. An acceptance test that fails is not a bug, it is simply an incomplete feature, and <strong>we don&#8217;t ship incomplete features.</strong></p>
<p>Being a QA professional takes a lot of discipline and involves a lot of responsibility, but it is your job as a professional to demand software quality above all else. A professional will stand on principle in this area while an amateur will make excuses for the level of quality&#8230; <em>&#8220;I don&#8217;t have enough time to do automated testing! The developers write bad code! My boss doesn&#8217;t appreciate QA!&#8221;</em>&#8230; All those things may be true, and may make it harder to do your job, but it <strong><em>doesn&#8217;t change your job!</em><span style="font-weight:normal;"> </span></strong></p>
<p>QA can be a tiring and thankless job, but the professional derives pleasure from a job well done. Be committed to the project/story/user, and not your own hide. This is what separates &#8220;testers&#8221; from Software Quality Professionals. This is the difference between a great user experience and a mediocre one.</p>
<p>The meal is over, and the customer is satisfied. On their way out the table says &#8220;The meal was excellent! Be sure and thank the cook for me,&#8221; as they hand you a three dollar tip.</p>
<p>&#8220;I&#8217;ll do that sir!&#8221; You say with a smile, knowing that you <em>did your job</em>. You made sure that everything was perfect. You took care of all the grimy little details so they could concentrate on what they came there for&#8230; a <strong><em>good</em></strong> meal.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/390/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/390/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/390/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=390&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/04/08/qa-being-a-professional-and-waiting-tables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/213ff080fa03648f0b71e4f4658a8046?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Josh</media:title>
		</media:content>
	</item>
		<item>
		<title>Selenium RC In C# as a Console App: Another End-To-End Example</title>
		<link>http://thetestingblog.com/2010/02/02/selenium-rc-in-console-app/</link>
		<comments>http://thetestingblog.com/2010/02/02/selenium-rc-in-console-app/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 18:26:10 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[test automation]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=364</guid>
		<description><![CDATA[The purpose of this post is to show people how to wrap a Selenium RC test up into a console app (*.exe) so can been executed from the command line.  This is a solution makes it where you don&#8217;t have to have NUnit involved. Déjà vu all over again! Another basic Selenium example. What the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=364&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The purpose of this post is to show people how to wrap a Selenium RC test up into a console app (*.exe) so can been executed from the command line.  This is a solution makes it where you don&#8217;t have to have NUnit involved.</p>
<p>Déjà vu all over again!  Another basic Selenium example.  What the  heck!?  Can&#8217;t this guy do anything else?</p>
<p>Well, I agree this is somewhat repetitive, but I hope that this sequel will be in the league of Empire Strikes Back or Star Trek: The Wrath of Khan.  Both movies, though they were sequels, were arguably greater than the originals. These sequels introduce us to the likes of Ricardo Montalban playing &#8220;Khan&#8221; and Billy Dee Williams playing &#8220;Lando Calrissian&#8221;.  And of course,  a muppet playing &#8220;Yoda&#8221;.</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/collage1.jpg"><img class="aligncenter size-full wp-image-366" title="collage" src="http://thetestingblog.files.wordpress.com/2010/02/collage1.jpg?w=544&#038;h=450" alt="" width="544" height="450" /></a></p>
<p>Of course, many sequels start off with the desire to be Empire, and instead they end up being:</p>
<ul>
<li>Caddyshack II</li>
<li>Beastmaster 2: Through the Portal of Time</li>
<li>Speed 2: Cruise Control</li>
<li>Batman and Robin (No, we don&#8217;t need nipples on the Batman suit, Joel Schumacher.  But thanks for asking.)</li>
<li>Mannequin: On the Move.</li>
<li>Or the biggest sacrileges of all time Godfather III</li>
<li>And Episode I (Empire, it is not!).</li>
</ul>
<p>My hope is that this post doesn&#8217;t suck like those movies.  At the very least it&#8217;s nipple and Clooney free.</p>
<hr />First off, you need to get all these things (if you don&#8217;t have them):</p>
<ul>
<li><a href="http://release.seleniumhq.org/selenium-remote-control/1.0.1/selenium-remote-control-1.0.1-dist.zip">Selenium RC</a></li>
<li><a href="http://www.mozilla.com/products/download.html?product=firefox-3.5.2&amp;os=win&amp;lang=en-US">Firefox</a></li>
<li><a href="http://release.openqa.org/selenium-ide/1.0.2/selenium-ide-1.0.2.xpi">Selenium IDE</a></li>
<li><a href="http://www.java.com/en/download/index.jsp">Java Runtime Environment</a> (You should already have this)</li>
<li><a href="http://www.microsoft.com/express/Downloads/#2008-Visual-CS">Visual C# 2008 Express Edition </a> (Only get this if you don&#8217;t have a full version of Visual Studio)</li>
</ul>
<hr /><strong>Install instructions for the downloads:</strong></p>
<p><strong>Selenium RC</strong><br />
-No installation necessary. Just find a permanent location and unzip it there. I unzipped mine at <span style="color:#0000ff;">C:\</span> just to make things simple</p>
<p><strong>Firefox, Visual Studio Express, and Java</strong><br />
-Just run the respective installs with all defaults selected.</p>
<p><strong>Selenium IDE</strong><br />
-To install, right click on the file and select &#8220;Open With&#8230;&#8221;<br />
-Select Firefox in the programs list. If it&#8217;s not in the immediate menu, browse to it. (default location should be &#8220;<span style="color:#0000ff;">C:\Program Files\Mozilla Firefox\firefox.exe</span>&#8220;<br />
-When Firefox launches, click button in the dialog box that says &#8220;Install Now&#8221;.<br />
-After the install of the plug-in, hit the &#8220;Restart Firefox&#8221; button when you see it.</p>
<hr /><strong>Phase One: Record a Test using Selenium IDE</strong></p>
<p>Okay, so, now that you have the tools, we&#8217;re going to record a simple test in Selenium IDE. Even though we want to eventually run the test in Selenium RC, Selenium IDE is a great tool for getting the basic test recorded since it&#8217;s all UI point and click.</p>
<ul>
<li>Start up Firefox.</li>
<li>Click on the &#8220;Tools&#8221; menu and click on &#8220;Selenium IDE&#8221;</li>
<li><em>(Take your time to explore the Selenium IDE form)</em></li>
<li>Notice that it&#8217;s already recording.  The red circle button on the right side is pressed in:</li>
<li>Type &#8220;<span style="color:#0000ff;">www.google.com</span>&#8221; the main Firefox browser address bar and navigate to it.</li>
<li>In the search box, type in &#8220;<span style="color:#0000ff;">thetestingblog.com</span>&#8221; and hit the &#8220;I&#8217;m Feeling Lucky&#8221; button.</li>
<li><em>Notice in your Selenium IDE window that steps are being recorded.</em></li>
<li><em>With any luck, you hopefully landed on this blog&#8217;s home page.</em></li>
<li>Highlight the text &#8220;Daniel Brown&#8221; on the page, right click.  You should select the option that says &#8220;VerifyTextPresent Daniel Brown&#8221;.  See below:</li>
</ul>
<p><img class="aligncenter size-full wp-image-194" title="Screenshot_VerifyTextPresent" src="http://thetestingblog.files.wordpress.com/2009/09/screenshot_verifytextpresent.jpg?w=544&#038;h=378" alt="Screenshot_VerifyTextPresent" width="544" height="378" /></p>
<ul>
<li><em>Okay, we got our test recorded.  Now let&#8217;s run it to make sure it passes.</em></li>
<li>Unclick the red circle button to turn off recording.</li>
<li>Click on the green play triangle with the single bar to run the test</li>
</ul>
<p><img class="aligncenter size-full wp-image-197" title="Screenshot_PassedIDETest" src="http://thetestingblog.files.wordpress.com/2009/09/screenshot_passedidetest2.jpg?w=544" alt="Screenshot_PassedIDETest"   /></p>
<ul>
<li>All green, it passed.  Good.</li>
<li>Now we want to convert this test to C#.</li>
<li>Select &#8220;Options -&gt;Format -&gt; C# &#8211; Selenium RC&#8221; from the Selenium IDE window.</li>
</ul>
<p><img class="aligncenter size-full wp-image-198" title="Screenshot_ConvertToCSharp" src="http://thetestingblog.files.wordpress.com/2009/09/screenshot_converttocsharp.jpg?w=544" alt="Screenshot_ConvertToCSharp"   /></p>
<ul>
<li>Next select all the C# code and copy it.</li>
</ul>
<hr /><strong>Phase Two: Setup the C# Console App</strong></p>
<ul>
<li>Open up Visual Studio</li>
<li>Select &#8220;File -&gt;New -&gt;Project&#8221;</li>
<li>In the New Project window under project types, select &#8220;Visual C# -&gt;Windows&#8221;</li>
<li>Select the &#8220;Console Application&#8221; Template and name it something like &#8220;TestingBlogSeleniumTest&#8221; and click &#8220;Ok&#8221;.</li>
<li>It will create the project along with a file called &#8220;Program.cs&#8221;.  Paste your SeleniumIDE test into Notepad.  You&#8217;re going to take pieces out of the test and put it in &#8220;Program.cs&#8221;.</li>
</ul>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/toppart2.jpg"><img class="aligncenter size-full wp-image-374" title="TopPart" src="http://thetestingblog.files.wordpress.com/2010/02/toppart2.jpg?w=544&#038;h=214" alt="" width="544" height="214" /></a></p>
<ol>
<li>Add the using references from the SeleniumIDE test.  Replace any that are there.</li>
<li>Add the &#8220;ISelenium&#8221; and &#8220;StringBuilder&#8221; object references inside the Main() method.  As you see, I removed the &#8220;private&#8221; access control prefixes.  We don&#8217;t need them.</li>
<li>Add the body of the SetupTest() method after the object references.  (I put a comment to designate that it was part of the setup.)</li>
<li>Change &#8220;*chrome&#8221; to &#8220;*iexplore&#8221; for Internet Explorer.  Use &#8220;*firefox&#8221; for Firefox.  (There are other browser options, but those work best.)</li>
<li>Change the URL to the site you start your test on.  In this case, change that URL to &#8220;http://www.google.com/&#8221; since we&#8217;re starting from Google.</li>
</ol>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/paste-in-bodies2.jpg"><img class="aligncenter size-full wp-image-375" title="Paste in Bodies" src="http://thetestingblog.files.wordpress.com/2010/02/paste-in-bodies2.jpg?w=544&#038;h=412" alt="" width="544" height="412" /></a></p>
<p>6. Paste body of the TheUntitledTest() method into the Main() method.</p>
<p>7. Paste body of the TeardownTest() method into the Main() method.</p>
<p>8.  Get rid of the Try/Catch blocks on Teardown.</p>
<p>9. Get rid of the StringBuilder references.</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/replacebodytext1.jpg"><img class="aligncenter size-full wp-image-376" title="ReplaceBodyText" src="http://thetestingblog.files.wordpress.com/2010/02/replacebodytext1.jpg?w=544&#038;h=317" alt="" width="544" height="317" /></a></p>
<p>10.  Get rid of the Try/Catch block in the test body, replacing it with an if statement that writes to the console window if true (See my code below).  Notice that I have to cast the Selenium.IsTextPresent statement as a boolean.  I don&#8217;t understand why it doesn&#8217;t work without it because the return type for that method should be boolean.  But whatever.  I&#8217;m just dummy tester; what do I know?</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/closeup.jpg"><img class="aligncenter size-full wp-image-372" title="closeup" src="http://thetestingblog.files.wordpress.com/2010/02/closeup.jpg?w=544&#038;h=120" alt="" width="544" height="120" /></a></p>
<ul>
<li>Next we need to add all the references so this thing will run.</li>
<li>Go to the solution explorer, and right click on the &#8220;References&#8221; and select &#8220;Add Reference&#8230;&#8221;</li>
<li>Hit the &#8220;Browse&#8221; tab and navigate to where you unzipped your SeleniumRC files.  Look in the dotnet client driver folder.  Here&#8217;s the path to mine:</li>
</ul>
<p><span style="color:#0000ff;">C:\selenium-remote-control-1.0.1\selenium-dotnet-client-driver-1.0.1\</span></p>
<ul>
<li>Once you navigate to where the proper *.dlls are, select all of them and click &#8220;OK&#8221; to add them to the project.  (I know you can probably get away with adding less, but let&#8217;s keep it simple.)</li>
</ul>
<p><img class="aligncenter size-full wp-image-203" title="Add References" src="http://thetestingblog.files.wordpress.com/2009/09/add-references1.jpg?w=544&#038;h=292" alt="Add References" width="544" height="292" /></p>
<ul>
<li>Build the project to see if it works.  (Mine worked.  Hopefully yours did too.)</li>
</ul>
<hr /><strong>Phase Three: Running the Selenium RC test Console App</strong></p>
<ul>
<li>In order to run the Selenium RC test, you first have to have the Selenium RC server running.  The Selenium RC server folder should be in the files you unzipped.  Normally, I have a batch file on my desktop created to run the Selenium Server, but for our purposes, we&#8217;ll just run this from the &#8220;Start -&gt; Run&#8221; commandline, using this command:</li>
</ul>
<p><span style="color:#0000ff;">java -jar C:\selenium-remote-control-1.0.1\selenium-server-1.0.1\selenium-server.jar</span></p>
<ul>
<li>You should see some a dos window popup, and you will see something like the screenshot below.  DON&#8217;T CLOSE IT WHILE TESTING; IT NEEDS TO STAY RUNNING.  If you don&#8217;t have Java installed, this won&#8217;t work.  But most people should already have Java.</li>
</ul>
<p><img class="aligncenter size-full wp-image-205" title="SeleniumServer" src="http://thetestingblog.files.wordpress.com/2009/09/seleniumserver.jpg?w=544&#038;h=272" alt="SeleniumServer" width="544" height="272" /></p>
<p>Next you need to select Debug from your Visual Studio menu and select &#8220;Start Without Debugging&#8221;. (I&#8217;m choosing this option because it doesn&#8217;t close the console window after the end of execution.  The debug option does.)</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/start.jpg"><img class="aligncenter size-full wp-image-377" title="Start" src="http://thetestingblog.files.wordpress.com/2010/02/start.jpg?w=544&#038;h=306" alt="" width="544" height="306" /></a></p>
<p>You should see the Selenium window(s) pop-up.  And it should do it&#8217;s thing.  When it&#8217;s finished, you should see something like this:</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/19.jpg"><img class="aligncenter size-full wp-image-378" title="19" src="http://thetestingblog.files.wordpress.com/2010/02/19.jpg?w=544&#038;h=274" alt="" width="544" height="274" /></a></p>
<p>So, where is my test executable?  Well, it&#8217;s in the bin\debug folder of the project.  For me, the path to it looks like this:</p>
<p>C:\Documents and Settings\dbrown\My Documents\Visual Studio 2008\Projects\TestingBlogSeleniumTest\TestingBlogSeleniumTest\bin\Debug\</p>
<p>So, what do I need to run the program?  Just take the executable file and the dll&#8217;s.  Make sure the dll&#8217;s are in the same folder as the test when you execute it, otherwise you will get a big fat error.  If you send the executable to someone, make sure you send the dll&#8217;s too.</p>
<p><a href="http://thetestingblog.files.wordpress.com/2010/02/debugfolder.jpg"><img class="aligncenter size-full wp-image-380" title="debugfolder" src="http://thetestingblog.files.wordpress.com/2010/02/debugfolder.jpg?w=544&#038;h=265" alt="" width="544" height="265" /></a></p>
<p>Remember if you port that executable to another computer, it needs to be a Windows box with the .NET framework installed and Selenium server needs to be running.  I hope this actually helps someone.  I&#8217;m going to post some tricks to &#8220;sex up&#8221; your console app.  Be looking for them shortly. <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Sorry, I still haven&#8217;t figured out Selenium GRID good enough to post on it.  Maybe Marisa could post on it?  She&#8217;s awesome like that.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/364/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/364/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/364/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/364/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/364/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/364/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/364/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/364/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=364&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/02/02/selenium-rc-in-console-app/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/collage1.jpg" medium="image">
			<media:title type="html">collage</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/screenshot_verifytextpresent.jpg" medium="image">
			<media:title type="html">Screenshot_VerifyTextPresent</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/screenshot_passedidetest2.jpg" medium="image">
			<media:title type="html">Screenshot_PassedIDETest</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/screenshot_converttocsharp.jpg" medium="image">
			<media:title type="html">Screenshot_ConvertToCSharp</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/toppart2.jpg" medium="image">
			<media:title type="html">TopPart</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/paste-in-bodies2.jpg" medium="image">
			<media:title type="html">Paste in Bodies</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/replacebodytext1.jpg" medium="image">
			<media:title type="html">ReplaceBodyText</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/closeup.jpg" medium="image">
			<media:title type="html">closeup</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/add-references1.jpg" medium="image">
			<media:title type="html">Add References</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/seleniumserver.jpg" medium="image">
			<media:title type="html">SeleniumServer</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/start.jpg" medium="image">
			<media:title type="html">Start</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/19.jpg" medium="image">
			<media:title type="html">19</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2010/02/debugfolder.jpg" medium="image">
			<media:title type="html">debugfolder</media:title>
		</media:content>
	</item>
		<item>
		<title>I Hate Software Excuses (And You Should Too)</title>
		<link>http://thetestingblog.com/2010/01/11/i-hate-software/</link>
		<comments>http://thetestingblog.com/2010/01/11/i-hate-software/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 22:29:32 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=362</guid>
		<description><![CDATA[It&#8217;s been a couple weeks since I started my job in Kansas, and for the most part, I&#8217;ve really enjoyed being here.  Having a fresh perspective, it&#8217;s always interesting to see the quirks of the people and the culture.  My new company is located in a shining bronze edifice called Lighton.  Inside this marvelous complex [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=362&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a couple weeks since I started my job in Kansas, and for the most part, I&#8217;ve really enjoyed being here.  Having a fresh perspective, it&#8217;s always interesting to see the quirks of the people and the culture.  My new company is located in a shining bronze edifice called Lighton.  Inside this marvelous complex is a gym.  Each company gets a quota of the number of gym access fobs that they can hand out.  Of course, being the new guy, I wasn&#8217;t able to get one.  There were none available.</p>
<p>Then something happened one day!  A fob became available.  As soon as I got the email, I replied to all claiming my stake over the available fob.  Much to the chagrin of the office admin, who seems to have a problem with me, I ended up with the fob!  But she wouldn&#8217;t let me physically have it until the registration is changed over in the system.  That should take a day.  I was fine with that, but I shouldn&#8217;t have been.  The whole reason for having electronic systems is so that things can happen instantly.  Well, maybe it&#8217;s not the system itself.  Maybe it&#8217;s the human keying it into the system that&#8217;s the bottleneck.</p>
<p>Once I received the fob from our admin, I went to use it.  It didn&#8217;t work.  Damn.  I wondered if the office admin was vindictive enough to run a magnet across my fob.  Then I checked myself for thinking so highly of myself.  (Like she really cares enough to sabotage my fob!) I asked a maintenance man, who just happen to be passing by what I can do.  He asked me if I&#8217;m suppose to have access.  Did I pay for the fob?  Am I using someone else&#8217;s fob?  I was a little annoyed by the questions, but I kept a smile on my face and assured him that I&#8217;m suppose to have access.  He then directed me to the 3rd floor office of the building managers.</p>
<p>The lady in there was very cordial, and she told me that it&#8217;s possible I wasn&#8217;t pointing the fob correctly at the access point.  I knew that the fob should work, but I was willing to condescend her.  We walked down together.  She pointed the fob at the access panel, and sure enough, it didn&#8217;t work.  She told me that she didn&#8217;t understand; it should work.  Then, as if by magic, she remembered that they are working on the door; they are doing a software upgrade so the system may be down.  Obviously that wasn&#8217;t the case because there were people in the gym working out.  If the door was inaccessible, then they wouldn&#8217;t have been able to get in.  We went back up to her office.  She told me to call her in the afternoon, and she would attempt to re-add me to the system.  I told her okay, and I took a business card off here desk (she&#8217;s on the hook.).</p>
<p>In the afternoon, I called her, and she said that I was already in the system so my fob must be bad.  Come to her office and get another fob.  I get another fob from her, and she said that I&#8217;ll probably be good to go.  I told her that if it doesn&#8217;t work I&#8217;m coming back up stairs to see her.  I went down, and tried it.  No, it didn&#8217;t work.  So I marched back up stairs.  I&#8217;m very perturbed, but you have to keep on a good face.  She tells me that the software upgrade may have had trouble.  she&#8217;ll send one of the maintenance guys to give the fob to me once they get it working.  Later in the day, she calls me and tells me that the problem will be resolved early next week.</p>
<p>On Monday (today), my good friend, the office admin, came by and gave me the fob.  Hmm, I assume they got it working.  Being a tester, I got to go try it.  So I walk over to the workout facility and try it.  It doesn&#8217;t work.  I wanted to be mad, but I couldn&#8217;t bring myself to be angry.  It&#8217;s typical.  I thought they were going to try it before they sent it back over?  That&#8217;s what the lady promised.</p>
<p>Immediately, I go upstairs to the property management office.  Another lady greets me, and I tell her who I am.  She apologizes to me.  Apparently the other lady set me up wrong.  She explained that there&#8217;s two databases that needed to be updated with the information.  The first lady had just updated one.  Everything should be fine tomorrow once the system updates are in place.  The lady, to her credit, asked me if I wanted to use her fob to go workout.  I told her no; I just would like mine going eventually.  She told me that it should be fine tomorrow.  I told her that I didn&#8217;t believe her, but I will try it tomorrow.</p>
<p><strong>WHAT&#8217;S THE POINT OF THIS WHOLE STORY?</strong></p>
<p>I&#8217;m sick and tired of software excuses!  Don&#8217;t tell me the system takes a whole day to update!  I don&#8217;t give a crap that the system is down.  I don&#8217;t give a crap that two databases need to be updated.  It ought to just work!  As the user, I should be abstracted from all those details.  Here&#8217;s my user story: USER MUST BE ABLE TO USE KEY FOB TO OPEN THE DOOR.  Is that complicated?  Why can&#8217;t it be simple?  If it was just a regular lock, I  could have went down to Walmart, made a copy of the key, and got back in time to start achieving my fitness goals.  Why are there two databases that need to be updated?  It&#8217;s just one flipping door!  Software excuses are so ingrained in society that they are legitimate as &#8220;my diabetes is acting up&#8221;.  Nobody questions the bullshit of them.  And why is that?  I think it&#8217;s because most people don&#8217;t understand software.  As someone that understands software better than most of the populous, I say enough is enough.  I don&#8217;t care that systems are complex!  Stop the insanity!  This is a work in progress, but here&#8217;s my new software manifesto:</p>
<p><strong>Daniel&#8217;s New Software Manifesto</strong>:</p>
<p>1) <strong>Software should be Simple to Use</strong>.  If your target user can&#8217;t *<strong>easily* </strong>use it (intuitive), it&#8217;s poorly designed, and it should chunked into the fire.</p>
<p>2) <strong>Software should Work</strong>.  Your software should work 99% of the time.  If your users are constantly complaining about problems with your software, then you suck and need to be chunked into the fire.  Don&#8217;t compromise on quality; it&#8217;s a slippery slope.  If you evangelize quality (and really mean it), you software will get better.</p>
<p>3) <strong>Software should be designed for the User</strong>.  I have an infinite amount of respect for Steve Jobs because he gets this.  He doesn&#8217;t have software developers (0r testers) designing the UI.  He actually pays people to design the UI so that Apple&#8217;s software looks slick and appealing.  I hate that companies are too cheap to invest in a good designer or user experience expert.  Design for the user!</p>
<p>4) <strong>Software downtime is Unacceptable</strong>.  Downtime is unacceptable for your software.  Make sure it&#8217;s up and running.  Regular maintenance is okay, but it&#8217;s not great.  The more you make this acceptable; the more downtime you&#8217;ll have.  Start with the premise that it&#8217;s unacceptable, and you&#8217;ll do better with it.</p>
<p>5) <strong>Software should fulfill the User&#8217;s Need.</strong> If you have software to control the access of a door, it better do it&#8217;s job.  If it doesn&#8217;t let the user in, it&#8217;s a utter failure and should be chunked into the fire.</p>
<p><strong>EPILOGUE:</strong></p>
<p>Probably when (if) they resolve my access issue, there will probably be no retrospective to say that things need to be different.  I sure the ladies in that office might feel bad for me, but nothing is going to change in their process.  I&#8217;m sure the second lady just thinks that it was a training issue with the first lady (i.e. if she knew that you have to do this and this and update two databases then that would have solved it).  But I really think that&#8217;s a wrong way of looking at it.  Maybe the software needs to be simplified.  Maybe they need some quality control in place (i.e. try the fobs on the door before they hand them off).  Maybe they need to restructure access systems.</p>
<p><strong>But here&#8217;s the real food for thought: how many times do we as software professionals put the users through Hell and then not care?  I want you to empathize.  Every time you throw out some bullshit code, you are ruining someone&#8217;s life.  Do you really want to be the deliverer of misery in the world?  Do you want to blame their woes on your diabetes acting up?  Or do you want to say, &#8220;There&#8217;s no excuse.  Our servers sucks!  This code sucks!  This system sucks!  It&#8217;s imperative that we make it better.  To bring about a better world.&#8221; </strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/362/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=362&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/01/11/i-hate-software/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/43a80f3d05753a9af40a3725839bf178?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">aubrownds</media:title>
		</media:content>
	</item>
		<item>
		<title>What I Learned by Contributing to FitNesse</title>
		<link>http://thetestingblog.com/2010/01/04/contributing-to-fitnesse/</link>
		<comments>http://thetestingblog.com/2010/01/04/contributing-to-fitnesse/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 07:52:17 +0000</pubDate>
		<dc:creator>Marisa Roman</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[fitnesse]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[testing tools]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=353</guid>
		<description><![CDATA[by Marisa Seal As of today, I am officially a contributor to FitNesse. I contributed a new feature idea and its implementation (the initial idea was borrowed from FitLibrary&#8217;s SequenceFixture but morphed a bit based on suggestions from Bob Martin), and also worked on Slim version detection. I am not a developer by training nor [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=353&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>by <a href="http://thetestingblog.com/author/marrrisa/" target="_blank">Marisa Seal</a></p>
<p>As of today, I am officially a <a href="http://fitnesse.org/.FrontPage.FitNesseDevelopment.FitNesseRelease20100103" target="_blank">contributor to FitNesse</a>. I contributed a <a href="http://fitnesse.org/FitNesse.SuiteAcceptanceTests.SuiteSlimTests.TestSequentialArgumentProcessing" target="_blank">new feature</a> idea and its implementation (the initial idea was borrowed from FitLibrary&#8217;s <a href="http://fitnesse.org/FitNesse.UserGuide.FixtureGallery.FitLibraryFixtures.SequenceFixture" target="_blank">SequenceFixture</a> but morphed a bit based on suggestions from Bob Martin), and also worked on Slim version detection. I am not a developer by training nor trade, but armed with basic coding skills and fueled by the guidance and what I can only describe as the graciousness of Uncle Bob, I was successful. The experience was trying, exciting, and actually pretty fun. While I learned an awful lot more than I&#8217;m going to detail here, I think I had three really important realizations while working on the updates.</p>
<h3>TDD Works!</h3>
<p>Given that I am a tester, I have read/learned about, discussed, and even advocated TDD. Given that I do not (usually) write production code, I had never actually tried it. I decided I&#8217;d give it a go since I needed to write unit tests for my updates anyway.</p>
<p>The existing unit tests for the class I updated served as my guide. I wrote a test to verify the simplest case of the new feature. I ran it &#8211; here&#8217;s the interesting thing: it passed. This surprised me, but also informed me that I <em>did not need to make any changes</em> to the code for the simplest case. The update involved implementing a special character to invoke a different processing scheme for function calls in Slim Script tables, so I had figured that I&#8217;d at least need to update the code to ignore the special character in the simplest case&#8230;but as the unit test proved, I did not.</p>
<p>I wrote a second unit test to verify another simple (yet different) case &#8211; this one failed as expected. I added code to the class in question, ran the test, and saw it fail again. But aha &#8211; I also saw <em>why</em> it failed, and that information helped me find my mistake. At this point I&#8217;d like to say that I made the fix, ran the test, and saw it pass &#8211; but it didn&#8217;t happen that way. I went through a few iterations of running the test and fixing my code.</p>
<p>The test finally passed, and I ran the entire suite of tests for the class. They all passed. The most appropriate word I can find to describe that moment is <em>epiphanic</em>. It was then that I truly understood and appreciated two of the benefits of TDD I have often heard:</p>
<ol>
<li>Practicing TDD can help ensure that only necessary code is implemented, since the goal of writing/updating the code is to make one test pass. Remember, I didn&#8217;t even need to write any code to make the first test pass.</li>
<li>Having a suite of unit tests &#8211; a byproduct of practicing TDD &#8211; can provide confidence that updates have not unintentionally changed existing behavior. The bonus is that unit tests are <strong>fast</strong>, so the feedback can be almost instantaneous. For example, the entire suite of 208 unit tests for the class I updated runs in under 1.5 seconds on my machine.</li>
</ol>
<p>Having an understanding of a practice is one thing; having experience implementing the practice is another. Upon reflection, I now find it odd that I could have advocated TDD without having tried it myself.</p>
<h3>Refactoring is more than just &#8220;Changing&#8221;</h3>
<p>I&#8217;m a bit embarrassed to admit this, but up until recently, I used the word &#8220;refactoring&#8221; as a substitute for &#8220;changing,&#8221; since I thought that&#8217;s what refactoring meant. I thought it was just a dev-ified word for &#8220;changing&#8221; or &#8220;improving.&#8221;</p>
<p>Once I submitted the first update to Bob Martin, I asked him for feedback. I was quite proud that the new feature took only about a dozen new and updated lines of code, but I wondered what I could have done better. Uncle Bob told me that since I had added a couple lines of code to an existing function, the function&#8217;s length was getting to the point where he&#8217;d want to extract some of the functionality &#8211; he suggested extracting a particular loop to a &#8220;method object.&#8221; I immediately Googled &#8220;extract to method object&#8221; and found information about it on <a href="http://www.refactoring.com/index.html" target="_blank">refactoring.com</a>. I quickly realized that refactoring actually encompasses specific techniques that address specific scenarios &#8211; refactoring is not just changing code.</p>
<p>I&#8217;m not as embarrassed to admit that I really had no clue how to execute &#8220;extract to method object.&#8221; I ruminated about it for a few days, and finally just told Uncle Bob that I didn&#8217;t know how to get started. He sent me the code, explained step-by-step how he got to the end result, but still allowed me to commit the change myself&#8230;which leads me to my last point.</p>
<h3>I think I know one reason why he&#8217;s called &#8220;Uncle&#8221; Bob</h3>
<p>There were many times throughout the last few weeks that I wondered when Uncle Bob would say to me &#8220;I&#8217;ll just do it myself &#8211; it&#8217;ll be faster that way.&#8221; That certainly would have been a true statement. Being that I am not &#8211; as I stated before &#8211; a developer by training or trade, I was surprised that he even supported the idea of me actually committing code changes when I first contacted him to suggest the new feature. It turns out that my fear and surprise were completely unfounded. Uncle Bob continually offered guidance and encouragement, and always ended his messages with &#8220;Let me know if you need any help.&#8221; Here&#8217;s the kicker: he meant it, too.</p>
<p>I really did feel like I was the lucky recipient of mentoring by a person who has literally &#8220;written the book&#8221; (multiple books, actually) about software craftsmanship.</p>
<p>I hope that some FitNesse users find the new feature valuable, and that I will be able to contribute to FitNesse again in the future. It was a great experience.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/353/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=353&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2010/01/04/contributing-to-fitnesse/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f5524b69490657d7297e7dc63c8cad62?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">marrrisa</media:title>
		</media:content>
	</item>
	</channel>
</rss>
