<?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 &#187; Daniel Brown</title>
	<atom:link href="http://thetestingblog.com/author/aubrownds/feed/" rel="self" type="application/rss+xml" />
	<link>http://thetestingblog.com</link>
	<description>Why, testing, of course!</description>
	<lastBuildDate>Tue, 31 Aug 2010 23:16:50 +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://1.gravatar.com/blavatar/5bc883277a9e573ad056d2ccd360a439?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Testing Blog &#187; Daniel Brown</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>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[Selenium]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[test automation]]></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>
<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>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=336&#038;h=128" alt="" width="336" height="128" /></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=328&#038;h=136" alt="" width="328" height="136" /></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>
<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>
<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>6</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=501&#038;h=362" alt="" width="501" height="362" /></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>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>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[Tools]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[test automation]]></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=398&#038;h=517" alt="Screenshot_PassedIDETest" width="398" height="517" /></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=444&#038;h=517" alt="Screenshot_ConvertToCSharp" width="444" height="517" /></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://s.wordpress.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>23</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>Software Testing Ain&#8217;t Gonna Solve Your Problems</title>
		<link>http://thetestingblog.com/2009/12/11/software-testing-aint-gonna-solve-your-problems/</link>
		<comments>http://thetestingblog.com/2009/12/11/software-testing-aint-gonna-solve-your-problems/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 17:23:55 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=334</guid>
		<description><![CDATA[It&#8217;s always amazing to me that companies refuse to go to the Gemba* to understand why they are having problems.  Rather than going to the root of an issue, they will attack all kinds of symptoms. We&#8217;re coughing so we must need a cough suppressant.  Never mind the fact that our lungs are filled with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=334&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s always amazing to me that companies refuse to go to the <em>Gemba* </em>to understand why they are having problems.  Rather than going to the root of an issue, they will attack all kinds of symptoms. We&#8217;re coughing so we must need a cough suppressant.  Never mind the fact that our lungs are filled with yucky cold/flu bile that&#8217;s trying to come up.  The problem isn&#8217;t the cough.  The problem is the virus that&#8217;s destroying you.</p>
<p>In some companies, software testing is often used to combat bad practices.  Our code is crap and it&#8217;s breaking at every turn, maybe we need some people to test it so we can find the problems.  As awesome as testers are, we can&#8217;t save you from your bad decisions.  Do not be deceived!  You reap what you sow.</p>
<p>I believe in quality assurance (making sure the process is sound) more than quality control (making sure the product is sound).  If you&#8217;re doing things the right way, you have a great chance of success.  Part of the reason I believe in QA over QC is because of Sun Tzu.  In the <em>Art of War</em>, he  says, &#8220;Victorious warriors win first and then go to war, while defeated warriors go to war first and then seek to win.&#8221;  If you have a good process in place, then you can develop software with confidence that it&#8217;s going to be of good quality.  If you have no process or a bad process in place, you&#8217;re fighting for quality but only after the bad quality software is complete.</p>
<p>So, what are some things that might make a good software development process:</p>
<p><strong>Code Reviews: </strong>One of the biggest things I learned at Edfinancial was the magic of code reviews.  They work on so many levels.  They work:</p>
<ol>
<li>As a device to <strong>Share Knowledge </strong>among your team.  Are you in a company that has legions of siloed developers working on their own thing?  Put a stop to it!  Implement code reviews.  It forces your team members to see what each other are doing.</li>
<li>As a <strong>Learning Opportunity</strong>.  You want to know how to mentor your young coders?  Have them do code reviews with more experienced coders.  They will learn so much about best practices.  (Personally, I learned a ton from my former colleague Ryan when he did my code reviews.)</li>
<li>To <strong>Spur </strong><strong>Collaboration</strong>.  When you have code reviews, this is a great time for spirited debate on the implementation of something.  Also, it prevents someone from completely going off the reservation.  It&#8217;s the reality check.  It&#8217;s the &#8220;What were you smoking?&#8221; check.  Many times crazy bad code just gets committed without so much as a once over.  That&#8217;s tragic!  Unacceptable!  And easily avoided!</li>
<li>To <strong>Find Bugs. </strong>Besides testers, you know who&#8217;s good at finding bugs?  Other developers.  They are great at it!  They are almost always tough on other people&#8217;s code, and that&#8217;s great for quality.  They will catch the honest mistakes.  Developers often catch their own mistakes as they are showing the code to someone else.  THIS IS BIG!!</li>
</ol>
<p><strong>Configuration Management: </strong>Systems are very complex.  So is code.  So is coordinating several people working on the same code.  You need to make sure that someone is keeping it all straight and enforcing the rules with an iron fist.  You want a process that&#8217;s well defined and repeatable.</p>
<ol>
<li><strong> Source Control:</strong> You should have all your production code in source control.  If you&#8217;re deploying stuff that&#8217;s not in source control, SHAME ON YOU!  You source is the life blood of your team.  Without it; you&#8217;re dead!</li>
<li><strong>Automated Build and Deployment: </strong>Nobody should be doing the build and deployment of complex systems completely by hand.  People are too prone to simple errors.  There are countless tools out there that simplify this process.  For shops that do this manually, it&#8217;s a gut wrenching experience, but it should actually be as easy as pressing a button.</li>
<li><strong>Change Control, Configuration: </strong>When you deploy code, do you know exactly what&#8217;s going out?  Can you easily tell me what&#8217;s been deployed, built, and configured?  If not, then why not?  If you have source control and automated build and deployments, then the change control stuff should be easy.  There ought to be logs documenting that.</li>
<li><strong>No Hot Fixes on Production: </strong>You should not be making hot fixes on production!  That&#8217;s a sign of bigger problems.  And if you do have to make a fix on production it needs to go through a review and approval process.  And it should be the exception, not the rule.  It should never be some lone coder firing new code into production without consulting anyone.  That&#8217;s just plain stupid.</li>
</ol>
<p><strong>Priorities: </strong>What the heck are we doing?</p>
<ol>
<li><strong>Requirements: </strong>Testers can&#8217;t effectively test when there&#8217;s no expectation of what the code is suppose to do.  How are we suppose to verify and validate requirements when there are no requirements to look to?  The better question might be how do developers code without requirements?  Companies need to take the time to gather enough requirements to move forward with development.  NO!  YOU&#8217;RE NOT BEING AGILE BY HAVING NO REQUIREMENTS OR DIRECTION!  THAT&#8217;S CALLED AD HOC CHAOS.</li>
<li>
<div id="_mcePaste"><strong>Vision:</strong> Okay, requirements are a day-to-day thing, but what is the big picture?  What are we trying to accomplish long term?  Note that the less defined the vision is, the less chance that you&#8217;ll accomplish something specific.  Oh, and share the vision with the team.  Don&#8217;t make it a mystery.</div>
</li>
<li><strong>Focus: </strong>Once you as a company has decided what the development team will work on, don&#8217;t constantly change your mind.  A whimsical manager with a big stick can kill productivity more than anything.  One completed piece of software is greater than 10 incomplete pieces.  Keep your eyes on the vision.</li>
<li><strong>Realistic Expectations: </strong>Some managers think that they can complete software by sheer will.  If I crack the whip hard enough, the developers and testers will work faster.  If the team says 100 hours of development and 100 hours of testing, you as a manager can&#8217;t say I need that next Friday.  Sure you delivered it by some arbitrary date, but you will be putting fixes out for the next 6 months.</li>
</ol>
<p>My assertion is that companies often attack the cosmetic, top level problems instead of attacking the root cause problems.  Testing is often a band aid thrown on the gushing wound.  If they were interested in fixing things, they would attack the root.</p>
<p>I think the big problem is that I am naive.  I assume that companies are indeed interested in fixing those quality issues.  But in truth, they are probably not that interested.  As a top level person in management, it&#8217;s more important that I get the product out than it being good quality.  It&#8217;s better to sell vaporware than to have a good product and not be able to sell it.  Rather than fix problems, it&#8217;s easier to look like you&#8217;re fixing problems.  We have quality problems so I hired some testers.  See!  I did what I&#8217;m suppose to do.  I didn&#8217;t give them power to effect the process, but it&#8217;s a nice gesture to have a token tester or two so they can say things like, &#8220;That&#8217;s whack!&#8221;</p>
<p>As long as the money is coming in, does quality really matter anyway?</p>
<p><em>*<strong>Gemba:</strong> A Japanese term that&#8217;s used in Lean to describe the source of the problem.  Literally translated, it&#8217;s &#8220;the real place&#8221; or &#8220;the actual place&#8221;.  In the context of manufacturing, it&#8217;s the plant manager going down to the assembly line to look at the problems.  I used that particular buzz word because I knew that it would make Bill happy.  Inside joke between us.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/334/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=334&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2009/12/11/software-testing-aint-gonna-solve-your-problems/feed/</wfw:commentRss>
		<slash:comments>5</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>Forget Roles; Embrace &#8220;One&#8221;</title>
		<link>http://thetestingblog.com/2009/10/14/forget-roles-embrace-one/</link>
		<comments>http://thetestingblog.com/2009/10/14/forget-roles-embrace-one/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 21:31:21 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=308</guid>
		<description><![CDATA[Recently, I attended the Simple Design and Testing Conference in Pittsburgh, PA. It was an excellent open space format conference.  Naresh Jain and Andrew Chen are great men to organize such an enlightening conference.  Also, thank you sponsors (Univ of Pittsburgh, Agile Alliance, Version One, Pillar, Open Information Foundation, Lean Dog, Foreopen, and Westinghouse.) for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=308&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I attended the <a href="http://www.sdtconf.com/">Simple Design and Testing Conference</a> in Pittsburgh, PA.</p>
<p><a href="http://www.sdtconf.com/"><img class="aligncenter size-full wp-image-310" title="treelogo" src="http://thetestingblog.files.wordpress.com/2009/10/treelogo.jpg?w=401&#038;h=72" alt="treelogo" width="401" height="72" /></a></p>
<p>It was an excellent open space format conference.  Naresh Jain and Andrew Chen are great men to organize such an enlightening conference.  Also, thank you sponsors (Univ of Pittsburgh, Agile Alliance, Version One, Pillar, Open Information Foundation, Lean Dog, Foreopen, and Westinghouse.) for enabling us to attend the conference for free.  You guys rock!</p>
<p>To get into the conference, you had to write a position paper on a topic you&#8217;re interested in discussing.  My position paper was on &#8220;<a href="http://www.sdtconf.com/wiki/tiki-index.php?page=DoWeReallyMatter">Do we, as software testers, really matter?</a>&#8221;  You can go read it if you want, but it&#8217;s one of the most depressing pieces I have ever written so you&#8217;ve been warned.  Basically, the premise of the paper is does it make sense to have software testers anymore or is it a deprecated trade with the evolution of software development?  When I talk about the evolution of software development, I&#8217;m talking about things like <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-Driven Development (TDD)</a>.  Since developers are being to take a test first, proactive stance toward quality, are we as pure software testers still needed?</p>
<p><strong>Roles?  Where we&#8217;re going we don&#8217;t need roles:</strong></p>
<p>One of the guys brought forth the position that &#8220;roles are evil&#8221;.  Basically, his position was something like roles within a software team are damaging because it silos responsibility to one person.  For example, if something breaks in production, then the tester is at fault for not testing that particular part.  There were several people that agreed that the team should take responsibility for all aspects of the development of the software.  Instead of concrete roles, teams should have &#8220;specializing generalists&#8221;.  What that means is that you should hire exceptional people that are talented enough to fill many roles (writing code, testing, talking to the business, architecture) but maybe specialize in one or two things.  I call this the &#8220;Commando Concept&#8221;.  In commando teams, you might have a medic, a demolition expert, a linguist, a martial arts expert, but they are all commandos.  Everyone should have should general knowledge in each area.  If a man gets hurt, everyone on the team should be able to give him medical help.  If they need to take down a bridge, everyone should be able to set up the charges and blow up the bridge.  Of course, they all need to know how to handle a hand-to-hand combat situation.  In the same way, software team members need to be able to cover all roles in order to get things done.  I liked the concept.  I thought it was great.</p>
<p><strong>Reality:</strong></p>
<p><strong></strong>All of this sounds good, but in reality, it never works that way.  One woman named Audrey brought up the fact that when everyone is responsible for an item, no one is responsible.  Things that no one wants to do just fall through the cracks and don&#8217;t get done.  For instance, there&#8217;s many developers out there that really hate testing (I was surprised to find so many developers that love testing at the SDT Conference).  Some loath testing because they could be writing more code instead of testing.  So, instead of testing the code that needs to be  tested, they might take another coding task, and the testing never gets done.  Maybe it&#8217;s touch points with the business, where nobody wants to go talk to the business to hear about their technical pain points.  Roles are in place to make sure that someone takes up the responsibility for what needs to be done.  The tester position is in place so that someone on the team worries about quality control and quality assurance.  Testers think differently, and it takes a little time to switch between a developer hat and a tester hat.  Sure developers can write unit tests and check basic logic and functionality, but who&#8217;s going to find the strange bugs that can only be found through exploratory testing?  (And yes, these bugs exist.)  Can you find people that have the talent to fulfill all the roles and have enough motivation to do them well?  Even if you have exceptional people that can be a tester, a developer, a business person, and a user, can you get enough of them to fill a whole team?  In reality, most businesses can&#8217;t afford to retain that many exceptional people.  It comes down to pure economics.  For a business, it&#8217;s cheaper to have one rock star that can do anything and the rest of the people functional in their one role.  If you have a team of rock stars, then the company will break up that team and put one rock star on every team.  Or those exceptional people will leave the company in search of better opportunities.  Or worse, the company sees their greatness and makes them into a manager, giving them a raise and throwing all their talent to the curb to be eaten by rats, birds, squirrels, ants, and raccoons.</p>
<p><strong>Conclusion</strong>:</p>
<p>There may be enough exceptional people out there that can form a team, take on all roles, but trust me, the company will be unwilling to pay for those people.  Even if they get them, they won&#8217;t be able to keep them.  Since we may not be able to get the pure, roleless team, let&#8217;s look at what we can do.  I think that you assemble teams, and you give them the expectation that everyone is responsible for everything, especially quality.  To borrow from the band U2, I&#8217;ll call this the &#8220;<a href="http://www.youtube.com/watch?v=JFWPeVfWB9o">One</a>&#8220; Philosophy.  &#8221;When it&#8217;s one need&#8230;We have to carry each other.&#8221;   As a team you have ONE goal: release high quality software.  It&#8217;s not your part and my part.  It&#8217;s the summation of all our parts.  It&#8217;s all or nothing!  One!  We have help each other out and fight through our collective short comings.  &#8221;We&#8217;re one but we&#8217;re not the same&#8230;We have to carry each other.&#8221;  Your role is developer.  My role is tester.  We are not in the same role, but regardless we have to carry each other to reach our goal: release high quality software.  As you embrace this philosophy of One, you will see the roles become fuzzy.  A developer might do testing.  A tester might gather additional requirements.  And a business analyst might fix the code.  OKAY, THE LAST ONE MIGHT BE A STRETCH!  But the point is once you carry (care) for each other, those roles won&#8217;t matter.  One will matter.</p>
<p><a href="http://www.youtube.com/watch?v=JFWPeVfWB9o">Watch the Video &#8211; U2 &#8220;One&#8221;</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/308/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/308/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=308&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2009/10/14/forget-roles-embrace-one/feed/</wfw:commentRss>
		<slash:comments>0</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/2009/10/treelogo.jpg" medium="image">
			<media:title type="html">treelogo</media:title>
		</media:content>
	</item>
		<item>
		<title>Zombie Testing!!!!</title>
		<link>http://thetestingblog.com/2009/09/25/zombie-testing/</link>
		<comments>http://thetestingblog.com/2009/09/25/zombie-testing/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 22:07:04 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Exploratory Testing]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[SQA]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[Zombie]]></category>
		<category><![CDATA[Zombie Testing]]></category>
		<category><![CDATA[Zombies]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=265</guid>
		<description><![CDATA[Watch Night of the Living Dead Great Scott! Hear the echoes and screams. Hide your developers and product owners. Lock the doors to the server room! Here comes the Night of the Living Dead. They are coming to test our software! Their slow, reanimated bodies march to The hypnotic spell of predetermined test cases. They [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=265&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h6 style="text-align:center;"><img class="aligncenter size-full wp-image-268" title="night-of-the-living-dead" src="http://thetestingblog.files.wordpress.com/2009/09/night-of-the-living-dead.jpg?w=431&#038;h=300" alt="night-of-the-living-dead" width="431" height="300" /><a href="http://video.google.com/videoplay?docid=-2956447426428748010&amp;ei=GBa9SsKMIJ6yqgLPmOXqBg&amp;q=night+of+the+living+dead&amp;hl=en">Watch Night of the Living Dead</a></h6>
<hr />
<p style="text-align:center;"><em>Great Scott!  Hear the echoes and screams.<br />
Hide your developers and product owners.<br />
Lock the doors to the server room!<br />
Here comes the Night of the Living Dead.<br />
They are coming to test our software!<br />
Their slow, reanimated bodies march to<br />
The hypnotic spell of predetermined test cases.<br />
They mindlessly push the buttons<br />
On outdated automated test suites.<br />
They write copious, bloated documentation<br />
That no one will read!<br />
If you are a free thinking software tester,<br />
They are coming for you!<br />
God help us!  God help us all!</em></p>
<hr />While conversing with my colleagues Bill and Shannon, Shannon threw out the phrase &#8220;Zombie Testing&#8221;.  They had been talking about zombies and zombie survival all morning.  As soon as the words came out of his mouth, the lights came on for Bill and I.  We chit-chatted a second about the concept, and I agreed to go flesh it out (pun intended) in a blog posting.  Let&#8217;s start with my definition (<strong>I invite everyone to collaborate with me to come up with a richer and fuller definition</strong>.):</p>
<p><em><strong>Zombie Testing</strong></em><em>: Mindlessly  executing a program with the intent of filling spreadsheets with useless data, writing thick boiler plate bug reports, and meeting company metrics.  Find bugs is a secondary pursuit.  Any requirements verifications should be done to the letter; there&#8217;s no reason to check the intent of the requirements.</em></p>
<p>It&#8217;s true that zombies walk among us!  Your fellow software testers might be zombie testers!  But how do you know?  I&#8217;m going to lay out some indicators that might out your colleague as a zombie:</p>
<p><strong> </strong></p>
<ul>
<li><strong>They act with mindless disregard toward their job (Passive not Proactive).</strong></li>
</ul>
<p>Testers that have turned display a mindless disregard for their job.  They do not think; their brains are not buzzing with activity!  They are not analyzing requirements, looking for ambiguities.  They are not listening to conversations about new software implementation.  They are not engaged with investigating bugs to find the root cause.  They don&#8217;t communicate their unsubstantiated concerns and hunches to the developers or the project managers.  Zombie testers never pick up on disconnects between technical people and customers, nor would they intervene to increase understanding anyway. They particularly like it when these test cases are written by a QA manager and just executed by them.  Less thinking = better!</p>
<p><strong> </strong></p>
<ul>
<li><strong>They protect the status quo, rejecting new methods of testing.</strong></li>
</ul>
<p>Not only are their minds soft, but they will seek to eat the brains of all who challenge the group think.  They stifle creativity.  They have a &#8220;not invented here&#8221; mentality.  Zombie testers will continue to look for bugs using the same heuristics, and they will continue to believe that they are being effective.  Anyone that questions this status quo will be dealt with severely.  Past successes will be used to give credence to their methods; they will point to the relative stability of the group&#8217;s code base.  They will reject radical new testing paradigms like Exploratory Testing in favor of set, predetermined test cases.  Using their super lethargic strength, they will cursh all dissenters until they are assimilated as zombie testers too.  Stay clear!  Their complacency is overpowering!</p>
<p><strong> </strong></p>
<ul>
<li><strong>They don&#8217;t question developers, other testers, managers, authority figures, or process; they just march slowly and aimlessly in stride with everyone else.</strong></li>
</ul>
<p>A tester that doesn&#8217;t challenge anyone or anything displays traits of potential zombification.  Zombie testers will never go against software developers; they will assume that since the developer is an eccentric genius they must know what they are doing.  After all, complicated and over-engineered code is better; right?  When the developer makes statements like &#8220;I know what the business wants more than they do&#8221;, a zombie tester will agree that this technical person knows the business better than the business people.  Zombie testers won&#8217;t disagree with other testers that have more experience than them; after all, these senior testers have written more tests than them.  These senior testers also protect the status quo, which is great!  Zombie testers won&#8217;t disagree with their supervisors, even if their supervisor comes in with some crappie half-baked idea that he learned at a conference.  They won&#8217;t question the guru testers that have written the books.  Never mind the fact that some of those grey hair gurus haven&#8217;t tested since COBOL was <em>en vogue</em>.</p>
<p><strong> </strong></p>
<ul>
<li><span style="font-weight:normal;"><strong>They place too much faith in automated testing.</strong></span></li>
</ul>
<p>To a testing zombie, automated tests are the end all be all!  Every test requires a hammer, and our automated test platform is a big ass hammer.  Mindlessly crank these things out.  It&#8217;s easy!  Just model each test on the countless examples that are already in the massive suites.  There&#8217;s something so therapeutic about not having to think while writing test scripts.  It&#8217;s like watching TV.  These zombies love to push the button on the suite and watch as all their tests come up green.  They are all green so that must mean that the tests are all valid, cover the code correctly, and actually test what we want to test.  If the tester starts to question the integrity of the testing harness or decides to manually check something, he or she is probably not a zombie.  He or she is probably a healthy tester doing their job.</p>
<ul>
<li><span style="font-weight:normal;"><strong>They are more proud of the pretty documentation than the actual bugs they found.</strong></span></li>
</ul>
<p>One time, Bill had an interview with a tester candidate that was truly excited about the organization and prettiness of her bug reports.  He told me that in his head, he was thinking, &#8220;NO!  I don&#8217;t care about that.  I want you to find bugs, not write reports!&#8221;  If your testers really start to glow and brag about their documentation, then they might have already turned.  If they are overly critical about the way you write up your bugs or insist that you use boiler plate sheets, then be standoffish.  They might be feasting on your brains at any moment!  Tester zombies are slow, but they can be fast to protect the status quo.  If your tester is  not excited about they bugs they found or the innovative approaches they took to finding them, be very concerned!  Note: zombie testers tend to value metrics, methods, procedures, and systems more than they value making a difference in the quality of the software.  If they constantly quote material from the ISTQB certification test, then analyze how pedantic their tone is.  The more pedantic their tone, the more they&#8217;ve turned.</p>
<p><img class="aligncenter size-full wp-image-291" title="shaun-of-the-dead-zombie-group" src="http://thetestingblog.files.wordpress.com/2009/09/shaun-of-the-dead-zombie-group.jpg?w=450&#038;h=296" alt="shaun-of-the-dead-zombie-group" width="450" height="296" /></p>
<hr />Take heed of these warning signs that your organization isn&#8217;t overrun by a scourge of zombie testers.  Software testing is for thinkers.  You must round up the zombie testers and put them in management where their lack of creativity will go unnoticed.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/265/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=265&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2009/09/25/zombie-testing/feed/</wfw:commentRss>
		<slash:comments>2</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/2009/09/night-of-the-living-dead.jpg" medium="image">
			<media:title type="html">night-of-the-living-dead</media:title>
		</media:content>

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/shaun-of-the-dead-zombie-group.jpg" medium="image">
			<media:title type="html">shaun-of-the-dead-zombie-group</media:title>
		</media:content>
	</item>
		<item>
		<title>Selenium RC in C# using NUnit: An End-to-End Example</title>
		<link>http://thetestingblog.com/2009/09/10/selenium-rc-in-c-using-nunit-an-end-to-end-example/</link>
		<comments>http://thetestingblog.com/2009/09/10/selenium-rc-in-c-using-nunit-an-end-to-end-example/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 21:11:01 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[test automation]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[NUnit]]></category>
		<category><![CDATA[.NET testing]]></category>
		<category><![CDATA[Web testing]]></category>
		<category><![CDATA[UI Testing]]></category>
		<category><![CDATA[Selenium RC]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[Selenium IDE]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=184</guid>
		<description><![CDATA[This may come as a shock to many of you, but I&#8217;m kinda a dummy. (Collective gasps echoing through the Web.) I know! It&#8217;s hard to believe, but that&#8217;s why I&#8217;m such a great tester: I don&#8217;t take much for granted. I hate technology tutorials that kind of wing the details. The devil is in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=184&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This may come as a shock to many of you, but I&#8217;m kinda a dummy. <em>(Collective gasps echoing through the Web.)</em> I know! It&#8217;s hard to believe, but that&#8217;s why I&#8217;m such a great tester: I don&#8217;t take much for granted. I hate technology tutorials that kind of wing the details. The devil is in the details, YOU DUMMY! The common sense thing that you omitted might be the one thing that your reader is missing!</p>
<p>Because I love my readers and aspiring software testers, I&#8217;m going to give a dummy tutorial on how to get Selenium RC up and running for C#.NET users using NUnit. I&#8217;m going to cover every <strong>painful </strong>detail. I&#8217;m confident once you have this example running, you should be able to do a whole lot of things (assuming you have some basic coding skills).</p>
<p>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://sourceforge.net/projects/nunit/files/NUnit%20Version%202/NUnit-2.5.2.9222.msi/download">NUnit</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>
</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>NUnit, Firefox, 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=398&#038;h=517" alt="Screenshot_PassedIDETest" width="398" height="517" /></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=444&#038;h=517" alt="Screenshot_ConvertToCSharp" width="444" height="517" /></p>
<ul>
<li>Next select all the C# code and copy it.</li>
</ul>
<hr /><strong>Phase Two: Setup the C# Test Project</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;Class Library&#8221; Template and name it something like &#8220;TestingBlogSeleniumRc&#8221; and click &#8220;Ok&#8221;.</li>
<li>It will create the project along with a file called &#8220;Class1.cs&#8221;.  Paste your SeleniumIDE test into that file.</li>
</ul>
<ol>
<li>Rename &#8220;Class1.cs&#8221; to &#8220;FirstTest.cs&#8221;.</li>
<li>In the code, change the namespace from &#8220;SeleniumTests&#8221; to &#8220;TestingBlogSeleniumRc&#8221;:</li>
<li>Modify the class name from &#8220;Untitled&#8221; to &#8220;FirstTest&#8221;.  It&#8217;s good to change this so that if you add other tests, there won&#8217;t be any duplicated class names in the namespace (This has gotten me before, causing compile errors.).</li>
<li>We also have to modify the Selenium instantiation to launch Internet Explorer.  Where it has &#8220;*chrome&#8221;, change it to &#8220;*iehta&#8221;.</li>
<li>Where it has &#8220;http://change-this-to-the-site-you-are-testing/&#8221;, change it to &#8220;http://www.google.com&#8221;.</li>
</ol>
<p><img class="aligncenter size-full wp-image-207" title="ModifySeleniumTestFile" src="http://thetestingblog.files.wordpress.com/2009/09/modifyseleniumtestfile.jpg?w=544&#038;h=199" alt="ModifySeleniumTestFile" width="544" height="199" /></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</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&#8221;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>
<ul>
<li>Next you need to launch the NUnit GUI to run the test from.  Since you installed NUnit, you should be able to navigate to it &#8220;Start -&gt; All Programs -&gt; NUnit 2.4.7 -&gt; NUnit GUI (.NET 2.0)&#8221;</li>
<li>Once you open the NUnit runner, Click &#8220;File -&gt; Open Project&#8230;&#8221; and navigate to the compiled dll from your test project.  For me, the path looks like this:</li>
</ul>
<p><span style="color:#0000ff;">C:\Documents and Settings\dbrown1\My Documents\Visual Studio 2008\Projects\TestingBlogSeleniumRc\TestingBlogSeleniumRc\bin\Debug\TestingBlogSeleniumRc.dll</span></p>
<ul>
<li>Once it loads, click on &#8220;Run&#8221; to start the test.</li>
</ul>
<p><img class="aligncenter size-full wp-image-208" title="NUnit runner" src="http://thetestingblog.files.wordpress.com/2009/09/nunit-runner.jpg?w=544&#038;h=518" alt="NUnit runner" width="544" height="518" /></p>
<p>If you got all green, congrats!  You just got your first passing Selenium RC test!  From here we can definitely get more complex. I&#8217;m sorry if I was too verbose, but I didn&#8217;t want to leave out any important details.  If you have any specific issues, please post a question; I&#8217;ll be happy to answer it.  Thanks for reading!</p>
<p><strong>UPDATE  10/14/2009:</strong></p>
<p>Thank you for your comment, Ron.  You pointed out something that I completely spaced on.  There&#8217;s one more step you need to complete before your test is ready.  You must get rid of the try-catch exception block.  As long as you have that block in your test, your test will never fail.  Nunit counts on an exception being thrown when an assert statement fails.  If that exception gets caught, then Nunit thinks that the test passed.  Why does Selenium IDE put that try-catch in when coverting the test to C#?  I have no idea.  I just know that it doesn&#8217;t need to be in there in our example.</p>
<p>BEFORE Try-Catch is removed:</p>
<p><img class="aligncenter size-full wp-image-314" title="18" src="http://thetestingblog.files.wordpress.com/2009/09/18.jpg?w=515&#038;h=305" alt="18" width="515" height="305" /></p>
<p>AFTER Try-Catch is removed:</p>
<p><img class="aligncenter size-full wp-image-316" title="20" src="http://thetestingblog.files.wordpress.com/2009/09/20.jpg?w=477&#038;h=180" alt="20" width="477" height="180" /></p>
<p>Just because I want to prove that it works, I will show you an example where I have two tests in the file.  One looks for the text &#8220;Jello Pudding&#8221;, and one looks for the text &#8220;Daniel Brown&#8221;.  Here&#8217;s code for the tests:</p>
<p><img class="aligncenter size-full wp-image-317" title="21" src="http://thetestingblog.files.wordpress.com/2009/09/21.jpg?w=495&#038;h=353" alt="21" width="495" height="353" /></p>
<p>(Helpful Note to Nunit beginners: when Nunit runs, it executes the [<span style="color:#33cccc;">SetUp</span>]  method before each [<span style="color:#33cccc;">Test</span>] and [<span style="color:#33cccc;">TearDown</span>] method after each [<span style="color:#33cccc;">Test</span>] .)   After running the two tests, I have very contrasting results (as I figured I would).  The test that looks for &#8220;Daniel Brown&#8221; passed like a charm, but the test for &#8220;Jelly Pudding&#8221; failed:</p>
<p><img class="aligncenter size-full wp-image-319" title="23" src="http://thetestingblog.files.wordpress.com/2009/09/231.jpg?w=544&#038;h=222" alt="23" width="544" height="222" /></p>
<p>The bar is solid red because one failure at any level of the tree is a failed test run.  THANKS RON!  Sorry to leave out something so important.</p>
<p>Another order of business is I didn&#8217;t mention in my article, as granular as it is, that you need Visual Studio!  THANKS DAWN!  I guess I just kind of assumed that you might have it if you are interested in running Selenium in C#.  Well, I hate to assume so if you don&#8217;t have Visual Studio, you can download a free copy of Visual C# 2008 Express Edition: <a href="http://www.microsoft.com/express/download/">http://www.microsoft.com/express/download/</a> I believe you can run this example using the express edition, but I haven&#8217;t tested it.  If you do test it, give me some feedback.  I&#8217;d like to hear how it works.  Also, instead of the Visual C# Express Edition, you may also be able to use the Microsoft Visual Web Developer, but again I haven&#8217;t tested it.  I don&#8217;t know for sure.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/184/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=184&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2009/09/10/selenium-rc-in-c-using-nunit-an-end-to-end-example/feed/</wfw:commentRss>
		<slash:comments>74</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/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/2009/09/modifyseleniumtestfile.jpg" medium="image">
			<media:title type="html">ModifySeleniumTestFile</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/2009/09/nunit-runner.jpg" medium="image">
			<media:title type="html">NUnit runner</media:title>
		</media:content>

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

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

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

		<media:content url="http://thetestingblog.files.wordpress.com/2009/09/231.jpg" medium="image">
			<media:title type="html">23</media:title>
		</media:content>
	</item>
		<item>
		<title>Really Communicate: Part II</title>
		<link>http://thetestingblog.com/2009/08/21/really-communicate-part-ii/</link>
		<comments>http://thetestingblog.com/2009/08/21/really-communicate-part-ii/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 00:18:49 +0000</pubDate>
		<dc:creator>Daniel Brown</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thetestingblog.com/?p=141</guid>
		<description><![CDATA[Earlier this month, I wrote a blog posting on How Do We Rise Above The Noise And Really Communicate?  The post was an exploration into why modern means of communication fail us. As the example, I used one of my colleague&#8217;s decision to tell something important in email. The piece was very damning of email [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=141&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Earlier this month, I wrote a blog posting on <a href="http://thetestingblog.com/2009/08/09/how-do-we-rise-above-the-noise-and-really-communicate/">How Do We Rise Above The Noise And Really Communicate?</a>  The post was an exploration into why modern means of communication fail us.  As the example, I used one of my colleague&#8217;s decision to tell something important in email.  The piece was very damning of email as a communication median;  I wasn&#8217;t singling out a particular person.  People can&#8217;t help the communication zeitgeist that we&#8217;re in.  I&#8217;m just trying to lift the veil so they know how it&#8217;s causing a <a href="http://www.youtube.com/watch?v=lj-mc2DkF7U">communication breakdown (If you are humming Zeppelin, you get bonus points.)</a></p>
<p><strong>So, it happens again.</p>
<p>Here&#8217;s another of example of email gone wrong:</strong></p>
<p>One of the ladies at our church is over the kids program that I&#8217;m involved in.  The program is about to kick off a new year, coinciding with the start of the school year.  In an effort to be high tech (For my country church, it&#8217;s a big thing.), she&#8217;s switched to communicating to the workers through email.  That&#8217;s very agreeable to me.  In years past, the announcements for the kid&#8217;s program were buried in the Sunday bulletin with the women&#8217;s luncheon and choir practice.  The only problem is, if you are going to communicate through email, you need to be effective in your communications.</p>
<p>She hosted a training over this past weekend.  I was unable to attend the training because of a wedding out of town.  I communicated this point so it was clear.  No problem she said.</p>
<p>When I return from the wedding weekend, I see an email in my inbox from this lady.  The email talked about how well the training went, and she was excited about upcoming year.  It also mentions the upcoming conference for the program.  It gives some details about it.  She even highlights the details to make sure that everyone knows the price, date, and location.  After I read through the whole thing and went on with my week.</p>
<p>Come Wednesday night, I see the email still in my inbox, and I begin to wonder when the program is actually going to start (usually it&#8217;s on Wednesday nights at about 6:00).  So, I emailed her at about 7:00 pm right before I left work.  </p>
<p><em>And asked her &#8220;When does [it] start?&#8221;  </p>
<p>Later that evening, I get an email from her and she said, &#8220;The first night was tonight!&#8221;</p>
<p>I told her that &#8220;I was afraid of that&#8221; and that it &#8220;didn&#8217;t even dawn on me&#8221;.</p>
<p>Then she told me that &#8220;[she] figured [I] forgot.&#8221;</p>
<p>At that point I got a little defensive because I didn&#8217;t forget, nobody told me.  I told her that I didn&#8217;t forget.  I really didn&#8217;t know.</p>
<p>She apologized (Call me cynical, but it seemed insincere.), saying that she thought she told everyone.  It was in the church bulletin, and the &#8220;email kind of stated not an exact date but said this week&#8221;.<br />
</em><br />
The email she&#8217;s referring to was the one that I read on Monday when I returned from the wedding.  The rather verbose email consisted of 4 paragraphs and 380 words.  At this point I had read the email three times before trying to pull out the part that I had missed.  I went back and looked again.  I read it, and I read it.  Then I found a sentence that referred to the training: &#8220;I hope it eased your minds about club starting this week&#8221;.  That was the big announcement in the email!  It was buried in fluff about how proud she was of everyone.</p>
<p><strong>Emails are not a novel! </strong> Don&#8217;t write them like a novel, trying to build up suspense or hide meanings and obscure action!  She eluded but never touched on the most important topic to get across: when the program starts!  Everything else in the email doesn&#8217;t matter compared to Game Time.  The trainings, the conferences, the words of encouragement; none of it mattered compared to actually having the meeting with the kids.</p>
<p><strong>Disclosures: </strong>my pride is wounded a little about this because I take my responsibilities really seriously.  I don&#8217;t want people to think I&#8217;m a dead beat volunteer.  I don&#8217;t &#8220;phone it in&#8221; on things like this.  I feel betrayed because I thought that email would let me know when to show up.  I didn&#8217;t realize that I needed to follow up with her or read the church bulletin (even though I was out of town).  I thought the point of implementing email was to make communication more streamlined.  I didn&#8217;t know I had to go back to the old sources for information.  Up to this point, she has sent us tons of little emails.  Why didn&#8217;t she send a reminder out the day of?  In her epic email, why didn&#8217;t she come out and say that we had our first meeting this week, August the 19th.  Why wasn&#8217;t she cognizant to contact those that didn&#8217;t attend the training?  Was she counting on the communication getting to me, that I read her email very carefully, or that I looked at the church bulletin?  (One funny thing about the email.  When writing this blog, I had to read through the email several times again just to find that sentence.  I didn&#8217;t find it.  Instead, I used ctrl-F.  Hahaha.)</p>
<p>I am very much a believer in self responsibility.  Ask anyone I work with, and they will tell you that Daniel doesn&#8217;t dodge blame when he&#8217;s responsible.  If anything, I want take on all the blame and bring it to the fore front.  I get satisfaction out of letting people know that I&#8217;m taking responsibility.  But my gut told me that I can&#8217;t completely take responsibility for this screw up.  At least not completely  Why?</p>
<p>Doesn&#8217;t this sounds like a scenario from a software development team?  A tester fails to test something that gets released to production and blows up:  </p>
<p><em>&#8220;Why didn&#8217;t you test it? &#8220;</p>
<p>&#8220;I didn&#8217;t know.  I didn&#8217;t see it in the documentation or the project tracking tool.&#8221;</p>
<p>&#8220;Well, I sent you an email on it.  Did you read it?&#8221;</p>
<p>&#8220;I did, but I don&#8217;t remember that piece.&#8221;  OR &#8220;No, I didn&#8217;t because I didn&#8217;t think that it pertained to me.&#8221;</em></p>
<p><strong>Closing Remarks:</strong></p>
<p>Communication is not about one person.  If you throw some information out there and the other person doesn&#8217;t understand, you don&#8217;t get off scot-free because you threw it out there.  If the person doesn&#8217;t understand you, you are still liable.  Also, if you&#8217;re the listener or the one on the receiving end, you are not totally unresponsible if they give you an unclear message.  You should be asking that important questions to ensure that their message gets to you with all proper meaning and tone attached.  Communication break downs happen because of two people.  If you know someone will not read your email, go talk to them in person (face-to-face: how novel!).  Some people are brilliant but can&#8217;t read that well.  Don&#8217;t be arrogant in thinking that you covered your butt.  Think of a baton on a relay team.  Does it matter if the hand off is bad or the catch is bad?  No!  The whole team is pwn&#8217;d if that baton gets dropped.  When communication breaks down, everyone loses.  You.  The other person. The team.  The company.</p>
<p><a href="http://www.youtube.com/watch?v=lj-mc2DkF7U">One more time because I like to rock.</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thetestingblog.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thetestingblog.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thetestingblog.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thetestingblog.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thetestingblog.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thetestingblog.wordpress.com/141/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thetestingblog.wordpress.com/141/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thetestingblog.wordpress.com/141/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thetestingblog.com&amp;blog=8467555&amp;post=141&amp;subd=thetestingblog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thetestingblog.com/2009/08/21/really-communicate-part-ii/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>
	</channel>
</rss>