<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>estevenjones.com</title>
        <link>http://www.estevenjones.com/the_blog/</link>
        <description>Eddy&apos;s Take On the World
And Examples of his Work</description>
        <language>en</language>
        <copyright>Copyright 2012</copyright>
        <lastBuildDate>Thu, 02 Feb 2012 11:44:42 -0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>PowerShell Tip of the Day:  Date Math</title>
            <description><![CDATA[<p>Powershell makes doing math on Date object easier than falling down!</p>  <p>&#160;</p>  <div id="codeSnippetWrapper">   <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> $time = Get-Date<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> <span style="color: #008000"></span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> <span style="color: #008000">##Show Minutes</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> $time.Minutes<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> <span style="color: #008000"></span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span> <span style="color: #008000">##Show Day</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span> $time.Day<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span> <span style="color: #008000"></span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span> <span style="color: #008000">##Find out NOW stuff</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span> (Get-Date).Day<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span> <span style="color: #008000">(Get-Date).Millisecond;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>&#160; </pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span> ##What Will the Date be 90 days from now?</pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span> (Get-Date).AddDays(90)<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span> <span style="color: #008000"></span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span> <span style="color: #008000">##What was the day 90 days ago?</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span> (Get-Date).AddDays(-90)<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span> <span style="color: #008000"></span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span> <span style="color: #008000">## And for something practical</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span> $startTime = Get-Date<span style="color: #008000">;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span> <span style="color: #008000">$endTime = Get-Date;</span></pre>
<!--CRLF-->

    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span> <span style="color: #006080">&quot;DONE in less than &quot;</span> + ($endTime.AddMinutes(1) - $startTime).Minutes + <span style="color: #006080">&quot; Minutes&quot;</span>;</pre>
<!--CRLF--></div>
</div>

<p>&#160;</p>

<p>As you can see, wonderfully simple.</p>


Technorati Tags: <a href="http://technorati.com/tags/PowerShell" rel="tag">PowerShell</a>,<a href="http://technorati.com/tags/Date" rel="tag">Date</a>,<a href="http://technorati.com/tags/Math" rel="tag">Math</a>,<a href="http://technorati.com/tags/Minutes" rel="tag">Minutes</a>,<a href="http://technorati.com/tags/Find" rel="tag">Find</a>,<a href="http://technorati.com/tags/Millisecond" rel="tag">Millisecond</a>,<a href="http://technorati.com/tags/AddDays" rel="tag">AddDays</a>,<a href="http://technorati.com/tags/AddMinutes" rel="tag">AddMinutes</a>,<a href="http://technorati.com/tags/startTime" rel="tag">startTime</a>,<a href="http://technorati.com/tags/endTime" rel="tag">endTime</a>

<br />


Windows Live Tags: <a href="http://windows.live.com/connect/tag/PowerShell" rel="clubhouseTag">PowerShell</a>,<a href="http://windows.live.com/connect/tag/Date" rel="clubhouseTag">Date</a>,<a href="http://windows.live.com/connect/tag/Math" rel="clubhouseTag">Math</a>,<a href="http://windows.live.com/connect/tag/Minutes" rel="clubhouseTag">Minutes</a>,<a href="http://windows.live.com/connect/tag/Find" rel="clubhouseTag">Find</a>,<a href="http://windows.live.com/connect/tag/Millisecond" rel="clubhouseTag">Millisecond</a>,<a href="http://windows.live.com/connect/tag/AddDays" rel="clubhouseTag">AddDays</a>,<a href="http://windows.live.com/connect/tag/AddMinutes" rel="clubhouseTag">AddMinutes</a>,<a href="http://windows.live.com/connect/tag/startTime" rel="clubhouseTag">startTime</a>,<a href="http://windows.live.com/connect/tag/endTime" rel="clubhouseTag">endTime</a>]]></description>
            <link>http://www.estevenjones.com/the_blog/2012/02/powershell-tip-of-the-day-date-1.html</link>
            <guid>http://www.estevenjones.com/the_blog/2012/02/powershell-tip-of-the-day-date-1.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
            <pubDate>Thu, 02 Feb 2012 11:44:42 -0800</pubDate>
        </item>
        
        <item>
            <title>Powershell v3.0 ISE Tip of the Day</title>
            <description><![CDATA[<p>When you are writing in the script window, you can access your execution history.&#160; Simply type a comment hash character “#” and hit [TAB].&#160; That will pull up the last item in your history queue.&#160; Continue hitting [TAB] to traverse up the history queue as if you were in the command line window hitting the up arrow.</p>  <p>&#160;</p>  <p><a href="http://www.estevenjones.com/the_blog/Windows-Live-Writer/Powershell-v3.0-ISE-Tip-of-the-Day_7F66/Capture.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Capture" border="0" alt="Capture" src="http://www.estevenjones.com/the_blog/Windows-Live-Writer/Powershell-v3.0-ISE-Tip-of-the-Day_7F66/Capture_thumb.png" width="489" height="279" /></a></p>]]></description>
            <link>http://www.estevenjones.com/the_blog/2012/02/powershell-v30-ise-tip-of-the.html</link>
            <guid>http://www.estevenjones.com/the_blog/2012/02/powershell-v30-ise-tip-of-the.html</guid>
            
            
            <pubDate>Wed, 01 Feb 2012 09:16:39 -0800</pubDate>
        </item>
        
        <item>
            <title>User Stories: The Good, the Bad, and the Fugly</title>
            <description><![CDATA[<p>We all know that a good user story (in the agile world) contains </p>  <ul>   <li>Enough facts to give the delivery team (Dev , QA, DBAs, Operations, etc.) a direction </li>    <li>Enough proper estimation to allow the product owner to know when he might expect delivery of the story </li>    <li>Enough detail to know when the team has completed the story. </li> </ul>  <p>We should all be familiar with the “As a [role], I can [feature] so that [reason]” format of writing a story (quote swiped from <a href="http://www.codesqueeze.com/the-easy-way-to-writing-good-user-stories/" target="_blank">codesqueeze.com</a>).&#160; And we should all be familiar with Ron Jeffries’ 3 C’s (Card, conversation, and confirmation).&#160; The thing that gets lost most often, I think is that second C.&#160; </p>  <p>So I have two anecdotes for you to demonstrate the value of “conversation”.&#160; (I’d call them stories, but that would just get confusing).&#160; For the purposes of these anecdotes, the delivery team is represented by the store clerk and the product owner/manager is represented by the customer.</p>  <p><strong><font size="3">Anecdote #1:</font><a href="http://www.estevenjones.com/the_blog/Windows-Live-Writer/4a1d7905fbe8_9352/10058pf_hero_2.jpg"><font size="3"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="10058pf_hero" border="0" alt="10058pf_hero" align="right" src="http://www.estevenjones.com/the_blog/Windows-Live-Writer/4a1d7905fbe8_9352/10058pf_hero_thumb.jpg" width="389" height="295" /></font></a></strong></p>  <p>Joe Customer goes into the EverythingMart where they sell absolutely everything (as the name implies) and finds Steve Storeclerk.&#160; </p>  <p>“Hey there Steve!&#160; I’m back again and I need something from you!” </p>  <p>“Sure,” Steve replies, “How can I help?” </p>  <p>Joe Customer rubs the back of his neck with a well worn handkerchief and says, “Well, I need to haul some stuff, so I need to buy a truck from you!” </p>  <p>Steve’s enthusiastic to help so he pulls up the catalog of trucks on his terminal, “Perfect, we’re getting some new ones in a couple weeks!&#160; Why don’t we sit down and take a look at what will work for you.” </p>  <p>“Two weeks, eh?” Mr. Customer asks, “Well, alright, I suppose so. Let’s see what you’ve got.” </p>  <p>The pair of them look through the catalog and pick out a blue one with chrome bumpers, GPS, and a gun rack (they live in TX and it’s a free option, so why not?).</p>  <p>A week Joe Customer comes in with his check for $30,000 and drives his truck home and does his hauling.&#160; Everyone seems happy.</p>  <p>&#160;</p>  <p>Now, as a “Story” we could write this on a card as …</p>  <blockquote>   <p><em>“As a customer, I can haul heavy things, so that I don’t kill my back.”</em> </p> </blockquote>  <p>Seems to meet all the criteria for a good story, right?</p>  <p>&#160;</p>  <p><strong><font size="3">Anecdote #2:</font></strong></p>  <p>Joe Customer goes into the EverythingMart where they sell absolutely everything (as the name implies) and finds Steve Storeclerk. </p>  <p>“Hey there Steve! I’m back again and I need something from you!” </p>  <p>“Sure,” Steve replies, “How can I help?” </p>  <p>Joe Customer rubs the back of his neck with a well worn handkerchief and says, “Well, I need to haul some stuff, so I need to buy a truck from you!” </p>  <p>“Of course, I’m sure I can help you out.&#160; What exactly do you need to haul?” Steve asked.</p>  <p>“Ummm…&#160; I’ve got some bricks that I need to bring over to my neighbor’s house to help him build a barbecue.” </p>  <p>Steve nods sagely and asks, “Right… And how far do you gotta haul these bricks?”</p>  <p>“Just two houses down,” he’s told.</p>  <p>Steve then logs onto his workstation and starts to browse around looking at gardening implements.&#160; “I think one of these wheel-barrows will do just fine.&#160; And we have them in stock right now.” </p>  <p><a href="http://www.estevenjones.com/the_blog/Windows-Live-Writer/4a1d7905fbe8_9352/j0430445_2.jpg"><img style="background-image: none; border-right-width: 0px; margin: 4px 11px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="j0430445" border="0" alt="j0430445" align="left" src="http://www.estevenjones.com/the_blog/Windows-Live-Writer/4a1d7905fbe8_9352/j0430445_thumb.jpg" width="364" height="248" /></a>Joe Customer’s eyebrows arch inquisitively. “So,” he asks, “you don’t think that I need a truck, but this wheel-barrow will do?” </p>  <p>“Absolutely!” Steve tells him.&#160; “And this will save you a bundle!” </p>  <p>Joe nods, whips out his credit card and pays $50 for a brand new shiny wheel-barrow.&#160; Sure, it’s going to take him two trips to get all the bricks moved, but he’s still going to be finished by the end of the day.</p>  <p>&#160;</p>  <p>Now as a “Story” we could write this on a card as …</p>  <blockquote>   <p><em>“As a customer, I can haul a load of bricks to my neighbor’s house, so that I don’t kill my back.”</em> </p> </blockquote>  <p>Sure, the first story seemed well defined, the customer told Steve exactly what he wanted and got what he wanted, albeit at a pretty heavy cost in terms of $ and time.</p>  <p>In the second story, though, with <strong>conversation</strong> Joe Customer got what he needed immediately and at a substantially lessened financial burden.</p>  <p>&#160;</p>  <p>We should never assume that the customer knows exactly what they need.&#160; Instead of dictating a solution, conversation allows us to solve the need.</p>  <p>To paraphrase a Rolling Stones song…</p>  <blockquote>   <p>“You can’t always get what you want (at a decent cost). But if you have a conversation, you just might find, you get what you need.” </p> </blockquote>  <p>&#160;</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:447ad4ab-2789-4dd9-b6ad-3246ee56f8b1" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Agile" rel="tag">Agile</a>,<a href="http://technorati.com/tags/Scrum" rel="tag">Scrum</a>,<a href="http://technorati.com/tags/Testing" rel="tag">Testing</a>,<a href="http://technorati.com/tags/User+Stories" rel="tag">User Stories</a></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2011/04/user-stories-the-good-the-bad.html</link>
            <guid>http://www.estevenjones.com/the_blog/2011/04/user-stories-the-good-the-bad.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Scrum</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
            <pubDate>Mon, 25 Apr 2011 13:36:56 -0800</pubDate>
        </item>
        
        <item>
            <title>Running Firefox Against Selenium 2</title>
            <description><![CDATA[<p>I’ve had a hard time running tests using Selenium Server 2.0b2 on a Firefox browser (on Windows 7).&#160; I tried following the suggestions of adding the path to my firefox.exe to my PATH, but no such luck.&#160; The error message also suggested </p>  <blockquote>   <p>Please add the directory containing ''firefox.exe'' to your PATH environment variable, or explicitly specify a path to Firefox 3 like this:     <br />*firefox3c:\blah\firefox.exe on session null</p> </blockquote>  <p>That proved frustrating as well.&#160; However, the addition of a simple space proved to be the key.</p>  <p>My setUp() method now looks like this ( of course this is hardcoding firefox.&#160; I haven’t gone in and cleaned that up yet):</p>  <p>&#160;</p>  <div class="csharpcode">   <pre class="alt"><span class="lnum">   1:  </span>@BeforeClass(  )</pre>

  <pre><span class="lnum">   2:  </span>@Parameters({<span class="str">&quot;browser&quot;</span>, <span class="str">&quot;seleniumGridIp&quot;</span>, <span class="str">&quot;seleniumGridPort&quot;</span>, <span class="str">&quot;testServer&quot;</span>, <span class="str">&quot;testEnv&quot;</span> })</pre>

  <pre class="alt"><span class="lnum">   3:  </span><span class="kwrd">public</span> <span class="kwrd">void</span> setUp( String browser, String seleniumGridIp,</pre>

  <pre><span class="lnum">   4:  </span>        <span class="kwrd">int</span> seleniumGridPort, String testServer, String testEnv) throws Exception {</pre>

  <pre class="alt"><span class="lnum">   5:  </span>        </pre>

  <pre><span class="lnum">   6:  </span>        browser = <span class="str">&quot;*firefox C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe&quot;</span>;</pre>

  <pre class="alt"><span class="lnum">   7:  </span>        sel = <span class="kwrd">new</span> DefaultSelenium(     seleniumGridIp,</pre>

  <pre><span class="lnum">   8:  </span>                seleniumGridPort,</pre>

  <pre class="alt"><span class="lnum">   9:  </span>                browser,</pre>

  <pre><span class="lnum">  10:  </span>                testServer);</pre>

  <pre class="alt"><span class="lnum">  11:  </span>&#160;</pre>

  <pre><span class="lnum">  12:  </span>        sel.start();</pre>

  <pre class="alt"><span class="lnum">  13:  </span>        sel.open(testServer);</pre>

  <pre><span class="lnum">  14:  </span>&#160;</pre>

  <pre class="alt"><span class="lnum">  15:  </span>    }</pre>
</div>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>&#160;</p>

<p>I hope this helps someone.&#160;&#160; It’s not an ideal solution…. but it works.</p>]]></description>
            <link>http://www.estevenjones.com/the_blog/2011/03/running-firefox-against-seleni.html</link>
            <guid>http://www.estevenjones.com/the_blog/2011/03/running-firefox-against-seleni.html</guid>
            
            
            <pubDate>Mon, 21 Mar 2011 17:10:15 -0800</pubDate>
        </item>
        
        <item>
            <title>Running a Single TestNG Test in a Post @Parameters World</title>
            <description><![CDATA[<p>.....::::: UPDATE :::::.....</p><p>Cedric Beust (the guy who wrote the book on TestNG) added a comment with a way to run single tests much much easier. &nbsp;Go check out the comment below. &nbsp;I'm going to leave this article up, though, I think that people might find the examples of parameters and groups might still prove useful.</p><p>----------------------------------</p><p>It's a typical story.&nbsp; You have all of your tests written up with Selenium and everything is working beautifully.&nbsp; Then you discover the beauty of TestNG's ability to run the tests in parallel. By adding some parameters to the XML, you are able to run multiple copies of the same tests on different browsers and operating systems. The clouds part, the angels sing on high, and you find your boss showering you with praise for cutting the total run time from four hours down to fifteen minutes.</p>  <p>But all is <em>not</em> as good as you thought.&nbsp; Those blasted developers decided to change something on the page and one of your two hundred thirty-four tests is now broken. So, you dutifully open Eclipse and begin the repair work.&nbsp; You finish adjusting your assertions, right-click on your test method and choose to "run as TestNG test."</p>  <p>Despair!&nbsp; Anguish!! Gnashing of teeth!!! I don't want to run my entire class of tests just to debug a single test!!</p>  <p>"What the hell does that mean?"&nbsp; you ask as you stare at the console output, which tells you ...</p>  <p>&nbsp;</p>  <blockquote>   <p><font color="#000000" size="2"><strong>org.testng.TestNGException:          <br /></strong></font><font color="#333333">Parameter 'browser' is required by @Configuration on method setUp        <br />but has not been marked @Optional or defined in C:\&lt;MyUserDir&gt;\AppData\Local\Temp\testng-eclipse--1466657283\testng-customsuite.xml         <br />&nbsp;&nbsp;&nbsp; at org.testng.internal.Parameters.createParameters(Parameters.java:144)         <br />&nbsp;&nbsp;&nbsp; at org.testng.internal.Parameters.createParameters(Parameters.java:327) ...</font></p> </blockquote>  <p>&nbsp;</p>  <p>Apparently, when you attempt to run a single test, you are never asked to point Eclipse at the XML file you wanted to use.&nbsp; Eclipse and TestNG create a nice temporary one just for the occasion.&nbsp; Unfortunately, there is no way to tell the IDE where to get any XML information from.</p>  <p>After much cursing, scouring Google, and complaining to my co-workers, I have devised a method that allows me to run any single test (or combination of tests) without having to run the entire class' list of tests.</p>  <p>Here's how ...</p>  <p><strong>Create an XML file for your own debugging purposes.&nbsp; <br /></strong>You probably want to use all of your typical parameters like browser type, location of the Selenium Server/Grid Hub that you want to use, etc.     <br />    <br /></p>  <div class="csharpcode">   <pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">&lt;!</span><span class="html">DOCTYPE</span> <span class="attr">suite</span> <span class="attr">SYSTEM</span> <span class="kwrd">"http://testng.org/testng-1.0.dtd"</span> <span class="kwrd">&gt;</span></pre>

  <pre><span class="lnum">   2:  </span>&nbsp;</pre>

  <pre class="alt"><span class="lnum">   3:  </span><span class="kwrd">&lt;</span><span class="html">suite</span> <span class="attr">name</span><span class="kwrd">="MyTests"</span> <span class="attr">verbose</span><span class="kwrd">="-1"</span> <span class="attr">parallel</span><span class="kwrd">="tests"</span> <span class="attr">thread-count</span><span class="kwrd">="1"</span><span class="kwrd">&gt;</span></pre>

  <pre><span class="lnum">   4:  </span>      </pre>

  <pre class="alt"><span class="lnum">   5:  </span>      <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="seleniumGridIp"</span> <span class="attr">value</span><span class="kwrd">="localhost"</span><span class="kwrd">/&gt;</span></pre>

  <pre><span class="lnum">   6:  </span>      <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="seleniumGridPort"</span> <span class="attr">value</span><span class="kwrd">="4444"</span><span class="kwrd">/&gt;</span></pre>

  <pre class="alt"><span class="lnum">   7:  </span>      <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="testServer"</span> <span class="attr">value</span><span class="kwrd">="http://myServer.domain.com:8080"</span><span class="kwrd">/&gt;</span></pre>

  <pre><span class="lnum">   8:  </span>      <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="debugLevel"</span> <span class="attr">value</span><span class="kwrd">="1"</span><span class="kwrd">/&gt;</span></pre>

  <pre class="alt"><span class="lnum">   9:  </span>      <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="dbEnvironment"</span> <span class="attr">value</span><span class="kwrd">="dev"</span><span class="kwrd">/&gt;</span></pre>

  <pre><span class="lnum">  10:  </span>      <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="testInfoSaveLocation"</span> <span class="attr">value</span><span class="kwrd">="test-output/"</span> <span class="kwrd">/&gt;</span></pre>

  <pre class="alt"><span class="lnum">  11:  </span>      </pre>

  <pre><span class="lnum">  12:  </span>      <span class="kwrd">&lt;</span><span class="html">test</span> <span class="attr">name</span><span class="kwrd">="Edit Page Tests"</span> <span class="attr">preserve-order</span><span class="kwrd">="true"</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt"><span class="lnum">  13:  </span>           <span class="kwrd">&lt;</span><span class="html">parameter</span> <span class="attr">name</span><span class="kwrd">="browser"</span> <span class="attr">value</span><span class="kwrd">="*firefox"</span><span class="kwrd">/&gt;</span></pre>

  <pre><span class="lnum">  14:  </span>           <span class="kwrd">&lt;</span><span class="html">classes</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt"><span class="lnum">  15:  </span>                <span class="kwrd">&lt;</span><span class="html">class</span> <span class="attr">name</span><span class="kwrd">="com.packageName.BusinessListingPageTests"</span><span class="kwrd">/&gt;</span></pre>

  <pre><span class="lnum">  16:  </span>           <span class="kwrd">&lt;/</span><span class="html">classes</span><span class="kwrd">&gt;</span>          </pre>

  <pre class="alt"><span class="lnum">  17:  </span>           <span class="kwrd">&lt;</span><span class="html">groups</span><span class="kwrd">&gt;</span></pre>

  <pre><span class="lnum">  18:  </span>                <span class="kwrd">&lt;</span><span class="html">run</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt"><span class="lnum">  19:  </span>                    <span class="kwrd">&lt;</span><span class="html">include</span> <span class="attr">name</span><span class="kwrd">="single"</span> <span class="kwrd">/&gt;</span></pre>

  <pre><span class="lnum">  20:  </span>               <span class="kwrd">&lt;/</span><span class="html">run</span><span class="kwrd">&gt;</span></pre>

  <pre class="alt"><span class="lnum">  21:  </span>           <span class="kwrd">&lt;/</span><span class="html">groups</span><span class="kwrd">&gt;</span>        </pre>

  <pre><span class="lnum">  22:  </span>     <span class="kwrd">&lt;/</span><span class="html">test</span><span class="kwrd">&gt;</span> </pre>

  <pre class="alt"><span class="lnum">  23:  </span><span class="kwrd">&lt;/</span><span class="html">suite</span><span class="kwrd">&gt;</span></pre>
</div>
<style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>&nbsp;</p>

<p>The key to successfully running tests individually lies in lines 17 - 21.&nbsp; By using groups, you can have your XML test suite run only those tests that you want to run.</p>

<p>The next step requires a few edits to your test classes themselves.&nbsp; I'm using JAVA in these examples, but I'm sure that the principle relates to other languages as well.</p>

<p>For EVERYTHING you wish to have run along with your tests ( perhaps you have some database setup you want to do) , you must tell the Eclipse/TestNG unholy alliance that you want it to run.&nbsp; This is simply accomplished by using TestNG annotations, as follows...</p>

<p>&nbsp;</p>

<div class="csharpcode">
  <pre class="alt"><span class="lnum">   1:  </span>@BeforeClass( groups = {<span class="str">"single"</span>} )</pre>

  <pre><span class="lnum">   2:  </span>@Parameters({<span class="str">"browser"</span>, <span class="str">"seleniumGridIp"</span>, <span class="str">"seleniumGridPort"</span>, <span class="str">"testServer"</span> })</pre>

  <pre class="alt"><span class="lnum">   3:  </span><span class="kwrd">public</span> <span class="kwrd">void</span> setUp( String browser, String seleniumGridIp,</pre>

  <pre><span class="lnum">   4:  </span>     <span class="kwrd">int</span> seleniumGridPort, String testServer) throws Exception {</pre>

  <pre class="alt"><span class="lnum">   5:  </span>&nbsp;</pre>

  <pre><span class="lnum">   6:  </span>     Selenium sel = <span class="kwrd">new</span> DefaultSelenium( seleniumGridIp, seleniumGridPort,                                                                                                browser,     testServer);</pre>

  <pre class="alt"><span class="lnum">   7:  </span>        </pre>

  <pre><span class="lnum">   8:  </span>     sel.start();</pre>

  <pre class="alt"><span class="lnum">   9:  </span>     sel.open(testServer + LoginPage.PAGE_NAME);</pre>

  <pre><span class="lnum">  10:  </span>     sel.waitForPageToLoad(<span class="str">"10000"</span>);</pre>

  <pre class="alt"><span class="lnum">  11:  </span>}</pre>

  <pre><span class="lnum">  12:  </span>&nbsp;</pre>

  <pre class="alt"><span class="lnum">  13:  </span>@Test( dataProvider = <span class="str">"userSetup"</span>, groups = {<span class="str">"single"</span>})</pre>

  <pre><span class="lnum">  14:  </span><span class="kwrd">public</span> <span class="kwrd">void</span> testChangeHoursOfOperation( String userName, String password,String businessId){</pre>

  <pre class="alt"><span class="lnum">  15:  </span>     User user = <span class="kwrd">new</span> User();</pre>

  <pre><span class="lnum">  16:  </span>     user.userName = userName;</pre>

  <pre class="alt"><span class="lnum">  17:  </span>     user.password = password;</pre>

  <pre><span class="lnum">  18:  </span>&nbsp;</pre>

  <pre class="alt"><span class="lnum">  19:  </span>     LoginPage login = <span class="kwrd">new</span> LoginPage(sel);</pre>

  <pre><span class="lnum">  20:  </span>     login.LISTING_ID = businessId;</pre>

  <pre class="alt"><span class="lnum">  21:  </span>     login.setBrowserToStartPage();</pre>

  <pre><span class="lnum">  22:  </span>     login.loginUserName(user);</pre>

  <pre class="alt"><span class="lnum">  23:  </span>&nbsp;</pre>

  <pre><span class="lnum">  24:  </span>     assertTrue(amIOnTheStartPage());</pre>

  <pre class="alt"><span class="lnum">  25:  </span>}</pre>

  <pre><span class="lnum">  26:  </span>&nbsp;</pre>

  <pre class="alt"><span class="lnum">  27:  </span>@AfterClass(groups = {<span class="str">"single"</span>})</pre>

  <pre><span class="lnum">  28:  </span><span class="kwrd">public</span> <span class="kwrd">void</span> tearDown() throws Exception {</pre>

  <pre class="alt"><span class="lnum">  29:  </span>     sel.stop();</pre>

  <pre><span class="lnum">  30:  </span>}</pre>
</div>
<style type="text/css">


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>&nbsp;</p>

<p>That's it.&nbsp; When you run the XML, now your single test will run all by it's lonesome.&nbsp; When you don't want to run that single test anymore, simply remove the group from the @BeforeClass annotation.&nbsp; It is very important, though, that you remember to include the group in the annotations for the setUp() and tearDown() methods, or they won't be run.&nbsp; Its kinda hard to run a Selenium test if the IDE doesn't know where to find the Selenium Server.</p>

<p>&nbsp;</p>

<p>I hope this helps someone.&nbsp; If you have any questions, or feedback, please feel free to drop me an email and I'll be happy to clarify any point.</p>

<p>&nbsp;</p>

<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:340cbdf2-80be-40f1-8a02-69a9f136b77e" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Selenium" rel="tag">Selenium</a>,<a href="http://technorati.com/tags/Quality+Assurance" rel="tag">Quality Assurance</a>,<a href="http://technorati.com/tags/Testing" rel="tag">Testing</a>,<a href="http://technorati.com/tags/Java" rel="tag">Java</a>,<a href="http://technorati.com/tags/TestNG" rel="tag">TestNG</a>,<a href="http://technorati.com/tags/XML" rel="tag">XML</a></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2011/01/running-a-single-testng-test-i.html</link>
            <guid>http://www.estevenjones.com/the_blog/2011/01/running-a-single-testng-test-i.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Raves</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
            <pubDate>Fri, 07 Jan 2011 14:59:39 -0800</pubDate>
        </item>
        
        <item>
            <title>Using the Power of OOP with Selenium</title>
            <description><![CDATA[<p>If you have the luxury of using an object oriented programming language for testing your web application, there are a few small principles that you might want to keep in mind when coding your tests.</p>  <ol>   <li><strong><font size="3">Don’t test a “Page.” Keep your classes and objects as small as possible.          <br /></font><font color="#4f81bd">Do you allow someone to search for things on your website?</font></strong>&#160; Then have a class/object that thoroughly tests your search.       <br /><strong><font color="#4f81bd">Do you have a coupon that shows up&#160; based on the geo-location of a user’s IP address?</font></strong>&#160; Write a class for that.       <br />Once you have your classes written for each the parts of a page you want to test, create a test file that instantiates those objects and tests them in the integrated format of the webpage. </li>    <li><font size="3"><strong>Have your test do as little work as possible. </strong></font></li>    <li><font size="3"><strong>Keep the massive work in small functions that are publicly available for the object you are testing. </strong></font></li> </ol>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong></strong></p>  <p><strong>Do your work in a public method/function:</strong></p> <style type="text/css">






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>  <div class="csharpcode">   <pre class="alt"><span class="lnum">   1:  </span>    <span class="kwrd">public</span> boolean isPartnerLogoPresent() {</pre>

  <pre><span class="lnum">   2:  </span>        TestTools.debug(DEBUGLEVEL, <span class="str">&quot;isPartnerLogoPresent()&quot;</span>);</pre>

  <pre class="alt"><span class="lnum">   3:  </span>        <span class="kwrd">if</span> (sel.isElementPresent(partnerLogoId)) {</pre>

  <pre><span class="lnum">   4:  </span>            TestTools.debug(DEBUGLEVEL, <span class="str">&quot;\tFound the partner logo\n&quot;</span>);</pre>

  <pre class="alt"><span class="lnum">   5:  </span>            <span class="kwrd">return</span> <span class="kwrd">true</span>;</pre>

  <pre><span class="lnum">   6:  </span>        } <span class="kwrd">else</span> {</pre>

  <pre class="alt"><span class="lnum">   7:  </span>            TestTools.debug(DEBUGLEVEL, <span class="str">&quot;\tCould NOT find the partner logo\n&quot;</span>);</pre>

  <pre><span class="lnum">   8:  </span>            <span class="kwrd">return</span> <span class="kwrd">false</span>;</pre>

  <pre class="alt"><span class="lnum">   9:  </span>        }</pre>

  <pre><span class="lnum">  10:  </span>    }</pre>
</div>
<style type="text/css">






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p><strong>Have your test call that function:</strong></p>

<div class="csharpcode">
  <pre class="alt"><span class="lnum">   1:  </span>    @Test</pre>

  <pre><span class="lnum">   2:  </span>    <span class="kwrd">private</span> <span class="kwrd">void</span> testPartnerLogoPresent() {</pre>

  <pre class="alt"><span class="lnum">   3:  </span>        <span class="rem">// verify that the Partner Logo is available</span></pre>

  <pre><span class="lnum">   4:  </span>        assertTrue(isPartnerLogoPresent());</pre>

  <pre class="alt"><span class="lnum">   5:  </span>    }</pre>
</div>
<style type="text/css">






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>&#160;</p>

<p>On the surface, this might look as if you are doing a lot of extra typing and extra work, but if you have this partner logo show up on more than one page, all you have to do to verify it there is call this function.</p>

<p>&#160;</p>

<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26ddd0b6-ef6b-4bf4-b9c9-8f31fb897235" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Testing" rel="tag">Testing</a>,<a href="http://technorati.com/tags/Selenium" rel="tag">Selenium</a>,<a href="http://technorati.com/tags/QA" rel="tag">QA</a>,<a href="http://technorati.com/tags/Quality+Assurance" rel="tag">Quality Assurance</a>,<a href="http://technorati.com/tags/OOP" rel="tag">OOP</a>,<a href="http://technorati.com/tags/Java" rel="tag">Java</a>,<a href="http://technorati.com/tags/Class" rel="tag">Class</a>,<a href="http://technorati.com/tags/Method" rel="tag">Method</a>,<a href="http://technorati.com/tags/Function" rel="tag">Function</a></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2010/11/using-the-power-of-oop-with-se.html</link>
            <guid>http://www.estevenjones.com/the_blog/2010/11/using-the-power-of-oop-with-se.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
            <pubDate>Thu, 04 Nov 2010 09:48:11 -0800</pubDate>
        </item>
        
        <item>
            <title>Success and Failures</title>
            <description><![CDATA[  <p>“No Failures” does not mean that everything succeeded.&#160; </p>  <p>&#160;</p>  <p>   <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bf41a20c-ca68-4f18-846a-e99b1b47c186" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/QA" rel="tag">QA</a>,<a href="http://technorati.com/tags/testing" rel="tag">testing</a>,<a href="http://technorati.com/tags/bugs" rel="tag">bugs</a>,<a href="http://technorati.com/tags/test+automation" rel="tag">test automation</a>,<a href="http://technorati.com/tags/selenium" rel="tag">selenium</a></div></p>]]></description>
            <link>http://www.estevenjones.com/the_blog/2010/11/success-and-failures.html</link>
            <guid>http://www.estevenjones.com/the_blog/2010/11/success-and-failures.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
            <pubDate>Thu, 04 Nov 2010 09:17:35 -0800</pubDate>
        </item>
        
        <item>
            <title>Victory Chocolate Rations to Increase Again!!</title>
            <description><![CDATA[<p>This diatribe is in response to the San Francisco board of supervisors banning Happy Meals.&#160; You can read more about that <a href="http://www.chicagotribune.com/business/ct-biz-1103-happy-meals-20101102,0,822002.story?track=rss">here.</a></p>  <p><a href="http://www.estevenjones.com/the_blog/Windows-Live-Writer/99a2b3eae1e5_A6B6/happy-meal_2.jpg"><img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="happy-meal" border="0" alt="happy-meal" align="right" src="http://www.estevenjones.com/the_blog/Windows-Live-Writer/99a2b3eae1e5_A6B6/happy-meal_thumb.jpg" width="194" height="320" /></a></p>  <p>While I acknowledge the fact that there is a problem with the nation become a 'fatter' nation over the last few decades, and that a more sedentary life-style added to an increased availability of cheap and unhealthy (when not moderated) foods plays a huge role in it's continuance, I am still adamant in my belief that it is not the governments purview to regulate any citizens life.   <br />It may sound alarmist, only because it is a huge leap ahead on a pattern, but what happens when the government not only regulates what we can eat, but also the amount of exercise we are mandated to take in each day. After all, daily exercise is proven to improve one's health, and therefore lower the costs of health care for those who don't supply it for themselves. Do you happen to recall the opening scene of Orwell's 1984?    <br />I'll oppose almost every little insinuation the government makes into my life to avoid being happy about my 10 ounce chocolate ration being increased to 8 ounces...</p>]]></description>
            <link>http://www.estevenjones.com/the_blog/2010/11/victory-chocolate-rations-to-i.html</link>
            <guid>http://www.estevenjones.com/the_blog/2010/11/victory-chocolate-rations-to-i.html</guid>
            
            
            <pubDate>Wed, 03 Nov 2010 12:02:31 -0800</pubDate>
        </item>
        
        <item>
            <title>Turning Over a New Leaf</title>
            <description><![CDATA[<p>Or at least, starting something new.&#160; Today is my last day at Gorilla Nation / SheKnows.com.&#160; I also noticed that I haven’t written on this blog since January.&#160; I definitely need to remedy that.&#160; So if you don’t see anything here in the near future, call me on it!!&#160; :)</p>  <p>&#160;</p>  <p>&#160;</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:96c3229e-150d-4eab-ad22-a6fc1c89842c" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/gorillanation.com" rel="tag">gorillanation.com</a>,<a href="http://technorati.com/tags/sheknows.com" rel="tag">sheknows.com</a>,<a href="http://technorati.com/tags/citysearch.com" rel="tag">citysearch.com</a></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2010/05/turning-over-a-new-leaf.html</link>
            <guid>http://www.estevenjones.com/the_blog/2010/05/turning-over-a-new-leaf.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Potpourri</category>
            
            
            <pubDate>Thu, 06 May 2010 12:59:19 -0800</pubDate>
        </item>
        
        <item>
            <title>Using Selenium to Test Your Site</title>
            <description><![CDATA[<p>There are many easy to use testing automation tools on the market.&nbsp; There are many powerful testing automation tools on the market.&nbsp; There are, however, rather few that are both.&nbsp; <a title="Selenium Automated Testing Tool" href="http://seleniumhq.org/" target="_blank" jquery1263923607121="48032">Selenium</a> is one that stands out, though and it is the tool that I most often use.&nbsp; In this tutorial, I'll demonstrate a quick way to create simple tests using the tool.</p>  <div class="zemanta-related">   <ul>     <li>       <h6 style="font-size: 1em" class="zemanta-related-title">Download your <a class="zem_slink" title="Selenium (software)" href="http://selenium.openqa.org/" rel="homepage">Selenium</a> IDE from <a href="http://seleniumhq.org/download" target="_blank">Selenium HQ</a></h6>        <ul>         <li>           <h6 style="font-size: 1em" class="zemanta-related-title">This IDE is actually a plugin for <a class="zem_slink" title="Firefox" href="http://www.mozilla.com/firefox/" rel="homepage">FireFox</a>.&nbsp; While you can play your tests back in multiple&nbsp; browsers</h6>         </li>          <li>           <h6 style="font-size: 1em" class="zemanta-related-title">You can also install the plugin by opening FireFox and installing the Extension "Selenium IDE"</h6>         </li>       </ul>     </li>   </ul> </div>  <h6 style="font-size: 1em" class="zemanta-related-title">&nbsp;</h6>  <p style="font-size: 1em" class="zemanta-related-title"><a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/UsingSeleniumtoTestYourSite_AA03/selenium_explained_2.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="selenium_explained" border="0" alt="selenium_explained" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/UsingSeleniumtoTestYourSite_AA03/selenium_explained_thumb.png" width="623" height="353" /></a> </p>  <h6 style="font-size: 1em" class="zemanta-related-title">&nbsp;</h6>  <h6 style="font-size: 1em" class="zemanta-related-title">OK, those are the parts, let's get busy with an actual test.&nbsp; We'll keep it simple and start with a single testcase.</h6>  <p style="font-size: 1em" class="zemanta-related-title">*For the following instructions, things in <font color="#ff0000"><strong>RED</strong></font> should be steps that you take in FireFox. Items in <font color="#0000ff"><strong>BLUE</strong></font> are steps that you'll take in the Selenium IDE window.</p>  <ol>   <li>     <div style="font-size: 1em" class="zemanta-related-title">Open Firefox to <a href="http://www.google.com/">www.google.com</a></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title">Open Selenium IDE by going to "tools" and clicking on "Selenium IDE"</div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#0000ff">Verify that your Base URL is set to "http://www.google.com"</font></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#ff0000">In the search bar, type "Eddy Jones" and hit [ENTER]</font></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#ff0000">Click the first link that will take you to estevenjones.com</font></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#ff0000">Highlight the title "The Blog" on the estevenjones.com home page</font></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#ff0000">Right click on the highlighted text and select "VerifyTextPresent The Blog" (this is one of the new Context Menu items that was added when you installed the Selenium IDE</font></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#ff0000">Click "Hubble Space Telescope" link in the story about the Hubble Space Telescope (or any other link on any other story)</font></div>   </li>    <li>     <div style="font-size: 1em" class="zemanta-related-title"><font color="#ff0000">Right click on one of the images and hover over "Show All Available Commands &gt;"&nbsp;&nbsp; and from there, select "AssertElementPresent &lt;some identifier here&gt;"</font></div>   </li> </ol>  <p>&nbsp;</p>  <p>In order to play back your tests, simply press the green arrow "play buttons" on the toolbar.</p>  <p>WHAT???&nbsp; Why did my tests fail??</p>  <p>Well, your tests probably failed here, but that's ok.&nbsp; This really demonstrates the speed of Selenium.&nbsp; Your test most likely failed because Selenium tried to move on to the next step before the web page finished rendering.&nbsp; So it tried to click on your next link before the link was actually on the page.&nbsp; There are two ways to handle this.&nbsp; The quick but bad way would be to adjust the speed of your test by adjusting the slider on the toolbar.&nbsp; This would allow the web pages a chance to render prior to Selenium trying to act on it.&nbsp; The better way to handle this would be to change the "click" commands to "ClickAndWait" commands, though.&nbsp; This way, Selenium will wait for the page to completely render before moving on to the next command.&nbsp; One thing to note about this method, however, if you are testing a page that has frames, you might run into problems with FireFox.&nbsp; FireFox says the page is completed once the Frameset is complete rather than waiting for the contents of the frame have completely rendered.</p>  <p>Also before I sign off for this first tutorial, I'll mention the difference between Assert and Verify</p>  <p>When you ASSERT that an element is present, you are telling Selenium to stop the test and proceed no further if the assertion is not valid.&nbsp; So, if I assert that an image is present and that image is NOT present, Selenium will not move on and all testing will stop.&nbsp; The test will be marked a failure.</p>  <p>When you verify something is present, you are looking for something that is not terribly important enough to stop the entire test if it's not.</p>  <p>An example of when I might use assert versus using a verify:</p>  <p>If I loaded a web page displayed a render time, I might want to verify that the render time was under 5 seconds, but I wouldn't necessarily think that it's a total failure if it took 6 seconds to render.&nbsp; I would want to use an assert to verify that it didn't take longer than 10 seconds because 10 seconds is way past my threshold for acceptable render times and there is no point in continuing my tests if it takes longer than that.</p>  <p>&nbsp;</p>  <p>Stay tuned for the next session: "Creating Tests Suites" </p>  <div style="margin-top: 10px; height: 15px" class="zemanta-pixie"><img style="border-bottom-style: none; border-right-style: none; border-top-style: none; float: right; border-left-style: none" class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=66230cd5-8191-43a5-8bd4-a0eefaf9968e" /></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2010/01/using-selenium-to-test-your-si.html</link>
            <guid>http://www.estevenjones.com/the_blog/2010/01/using-selenium-to-test-your-si.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Assert</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Selenium</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Selenium IDE</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Software</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Testing</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Verify</category>
            
            <pubDate>Tue, 19 Jan 2010 12:58:56 -0800</pubDate>
        </item>
        
        <item>
            <title><![CDATA[You&rsquo;ll Be Amazed]]></title>
            <description><![CDATA[<p>We all hear about the Hubble Telescope.&nbsp; Many of us will remember the snafu upon its launch. &nbsp;The main mirror had been ground incorrectly and we weren't <a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/YoullBeAmazed_D3FB/FileHST-SM4_2.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 5px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="FileHST-SM4" border="0" alt="FileHST-SM4" align="left" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/YoullBeAmazed_D3FB/FileHST-SM4_thumb.jpg" width="240" height="240" /></a> able to fully utilize it until the first service mission in 1993.&nbsp; But ever since then, the <a class="zem_slink" title="Hubble Space Telescope" href="http://hubble.nasa.gov/" rel="homepage">Hubble Space Telescope</a> has been raining down data like digital manna from heaven.&nbsp; I think we've become jaded to the wonder of it.&nbsp; We've grown complacent with its abilities.&nbsp; </p>  <p>Well, I'm here to bring your attention to this wonderful piece of technology.&nbsp; Go take a look at some of its beautiful photos in the <a href="http://en.wikipedia.org/wiki/Hubble_telescope" target="_blank">gallery</a>.&nbsp; I promise you, you'll be amazed at the stunning beauty that makes up our night time sky.</p>  <p>One mind blowing thing about this:&nbsp; We are actually looking back in time whenever we look at stars and galaxies.&nbsp; The closest star to us is 4.37 <a class="zem_slink" title="Light-year" href="http://en.wikipedia.org/wiki/Light-year" rel="wikipedia">light years</a> away from us.&nbsp; That means, when we look at see that star system through a telescope, we are seeing the light that left the binary star system 4.37 years ago.&nbsp; We are, in effect, looking 4.37 years into the past.&nbsp; Now take that thought and apply it some of the most distant galaxies that the Hubble is able to peer at.&nbsp; Billions of light years away...&nbsp; We are literally looking at images of the universe from billions of years ago.&nbsp; Creeping our perception ever closer to the beginning of it all.&nbsp; That's about 700 million years since the <a class="zem_slink" title="Big Bang" href="http://en.wikipedia.org/wiki/Big_Bang" rel="wikipedia">Big Bang</a>, or almost 95% of the way back to the beginning. Staggering to think about.&nbsp; Read from the related articles below to learn more about this.</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <h6 style="font-size: 1em" class="zemanta-related-title">Related articles by Zemanta</h6>  <div class="zemanta-related">   <ul class="zemanta-article-ul">     <li class="zemanta-article-ul-li"><a href="http://r.zemanta.com/?u=http%3A//www.telegraph.co.uk/science/picture-galleries/6867366/Pictures-of-the-year-2009-space.html&amp;a=10669078&amp;rid=f1e756ed-4bee-4272-8756-eb3077bd50ba&amp;e=4424c97dd25e83035de5544dcae25d9e">Pictures of the year 2009: space</a> (telegraph.co.uk) </li>      <li class="zemanta-article-ul-li"><a href="http://www.huffingtonpost.com/2010/01/05/hubble-telscope-universe-_n_412100.html">Hubble Telscope Captures Earliest Photo Of Universe</a> (huffingtonpost.com) </li>      <li class="zemanta-article-ul-li"><a href="http://r.zemanta.com/?u=http%3A//www.cbc.ca/technology/story/2010/01/05/tech-space-hubble-early-universe.html%3Fref%3Drss&amp;a=11169152&amp;rid=f1e756ed-4bee-4272-8756-eb3077bd50ba&amp;e=c6ca21f60e77093c07bce2590b42aef3">Hubble telescope shows earliest photo of universe</a> (cbc.ca)</li>   </ul> </div>  <p class="zemanta-article-ul-li">&nbsp;</p>  <div style="margin-top: 10px; height: 15px" class="zemanta-pixie"><img style="border-bottom-style: none; border-right-style: none; border-top-style: none; float: right; border-left-style: none" class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=f1e756ed-4bee-4272-8756-eb3077bd50ba" /></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2010/01/youll-be-amazed.html</link>
            <guid>http://www.estevenjones.com/the_blog/2010/01/youll-be-amazed.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Potpourri</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Raves</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">amazing</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">beautiful</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">big bang</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Hubble</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">science</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">space</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">space telescope</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">stars</category>
            
            <pubDate>Tue, 05 Jan 2010 15:04:37 -0800</pubDate>
        </item>
        
        <item>
            <title>What Makes a Good Bug/Defect Report?</title>
            <description><![CDATA[<p>No matter what you are using to keep track of defects that you find in your software, there are certain things that you should keep in mind when you are documenting a defect.</p>  <ol>   <li><strong>A CLEAR AND CONCISE SUBJECT LINE / TITLE<a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/WhatMakesaGoodBugDefectReport_AD5C/BugsLifeWallpaper1024_2.jpg"><img style="border-right-width: 0px; margin: 5px 5px 5px 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BugsLifeWallpaper1024" border="0" alt="BugsLifeWallpaper1024" align="right" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/WhatMakesaGoodBugDefectReport_AD5C/BugsLifeWallpaper1024_thumb.jpg" width="291" height="292" /></a>        <br /></strong>This might be the most important part of creating a good defect report.&nbsp; With this, the people responsible for fixing the bug/defect and quickly group several similar or identical problems into one investigation.&nbsp; A good description will have at least 2 elements:&nbsp; An action taken and a result      <br />      <br /><strong>EXAMPLES:       <br /></strong><strong>Bad:&nbsp; </strong>The website isn't working.      <br /><strong>Good:</strong> Clicking on 'Home' link takes me to a "missing page" error page<br /><br /></li>    <li>     <div align="justify"><strong>CLEAR AND CONCISE STEPS TO REPRODUCE THE ISSUE         <br /></strong>More often than not, a majority of the time it takes to fix a defect or bug occurs in the "trying to reproduce it" phase.&nbsp; Even if we track you down to have you give us a demo of the problem and that demo only takes 2 minutes, the time it takes to actually catch up with you and get that 2 minute demo stacks up quickly.&nbsp; So, in the body of your defect, you should give developers more information than you think they could ever use.        <br />        <br /><strong>EXAMPLES: </strong>(We'll continue with the bug started in step 1)        <br /><strong>Bad:&nbsp; </strong>I clicked home and was taken to a blank page.        <br /><strong>Good:</strong></div>      <ol>       <li>         <div align="justify">I opened up a browser and navigated to our live site ( <a href="http://www.ourdomain.com/">http://www.ourdomain.com</a> )</div>       </li>        <li>         <div align="justify">I logged into the site using the "Login" link</div>       </li>        <li>         <div align="justify">I clicked on the "Message Boards" Link</div>       </li>        <li>         <div align="justify">From Message Boards, I opened up the article "Summertime fun spots" </div>       </li>        <li>         <div align="justify">I clicked on the "Add Comment" button</div>       </li>        <li>         <div align="justify">I typed in a comment, but didn't hit [submit]</div>       </li>        <li>         <div align="justify">I clicked on the "Home" button in the menu bar of the site</div>       </li>        <li>         <div align="justify">I saw a blank page that stated the page was not found</div>       </li>        <li>         <div align="justify">In the address bar, there was this URL:&nbsp; <a href="http://joedeveolper.dev.ourdomain.com/home.html">http://joedeveolper.dev.ourdomain.com/home.html</a></div>       </li>        <li>         <div align="justify">I'm using Firefox for my browser on <a class="zem_slink" title="Windows 7" href="http://www.microsoft.com/windows/windows-7/default.aspx" rel="homepage">Windows 7</a>.</div>       </li>     </ol>   </li>    <li>     <div align="justify"><strong>A RECORD OF REPRODUCTIONS         <br /></strong>There is an old and sometimes joked about adage that states "It's not a problem if was can't reproduce it." While this may seem rather flippant and careless, there's also a huge grain of truth in it.&nbsp; Sure there may have be an actual problem, but in the terms of prioritization, I'm sure it's easy to see that a defect that is either un-reproducible or difficult to reproduce is less important to fix than something that happens all the time.&nbsp; Of course, this is an over-simplification as a bug that wipes out all of your data, even if it is almost impossible to reproduce is pretty damn important.        <br />        <br /><strong>EXAMPLES:         <br />Bad:</strong> I think I heard someone else had this problem        <br /><strong>Good:</strong> I was able to reproduce this on <a class="zem_slink" title="Internet Explorer" href="http://en.wikipedia.org/wiki/Internet_Explorer" rel="wikipedia">Internet Explorer</a>, too.        <br /><strong>Best:</strong> I was able to reproduce this on Internet Explorer too.&nbsp; I also got Sally and Jim to reproduce it on their computers, as well        <br /></div>   </li>    <li>     <div align="justify"><strong>SCREENSHOTS OF THE PROBLEM         <br /></strong>If the problem is visual in nature, it's always a good thing to include a <a class="zem_slink" title="Screenshot" href="http://en.wikipedia.org/wiki/Screenshot" rel="wikipedia">screen capture</a> of the problem.        <br />        <br /><strong>EXAMPLE:</strong>        <br />"The background color for the Name and Description columns do not match on the albums listing page."        <br /><a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/WhatMakesaGoodBugDefectReport_AD5C/image_2.png"><img style="border-right-width: 0px; margin: 5px 0px 0px 25px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/WhatMakesaGoodBugDefectReport_AD5C/image_thumb.png" width="240" height="66" /></a>         <br /></div>   </li>    <li>     <div align="justify"><strong>ADVANCED TECHNIQUES: Recording a macro to reproduce the problem automatically         <br /></strong>There are many tools out there that will allow you to record all the clicks and typing you do on your computer.&nbsp; Recording these actions could prove to be very helpful to the people trying to fix your defect.&nbsp; Even if you list all of your steps as accurately as you believe is possible, there might be something that you do, thinking it's insignificant, that the developer will catch on and realize exactly what the problem is.&nbsp; Perhaps you clicked on the graphic of a button rather than its, text.&nbsp; Perhaps you submitted a form by hitting the [Enter] key on your computer rather than clicking the [submit] button on the web page.&nbsp; Another major benefit of recording your actions is that your recorded actions are now documented, and it might be possible to create an automated test from them.&nbsp; With an automated test, your defect might be caught next time before it ever gets to a production environment.&nbsp; Keep in mind, these tools record your actions ( move mouse here, click here, type this ).&nbsp; It does not record a video of what you see.        <br />        <br /><strong>SUGGESTED SOFTWARE:         <br />          <br /><a title="BadBoy Software" href="http://www.badboy.com.au/" target="_blank">Bad Boy</a> </strong>a very nicely done tool that is, unfortunately, a windows and Internet Explorer only tool.        <br />        <br /><strong><a title="Selenium IDE" href="http://seleniumhq.org/projects/ide/" target="_blank">Selenium IDE</a>:</strong>&nbsp; This tool is also a very good program.&nbsp; It sits on your system as a Firefox Plugin.&nbsp; So initial recording of a defect will be done in Firefox only, but it can be played back using several different browsers.        <br /></div>   </li> </ol>  <p>These techniques and suggestions are not the be all and end all of 'best practices' for reporting a bug or defect, but they will certainly get you further down the road in being a productive partner when it comes to making sure your company produces the highest quality software.</p>  <div style="margin-top: 10px; height: 15px" class="zemanta-pixie"><img style="border-bottom-style: none; border-right-style: none; border-top-style: none; float: right; border-left-style: none" class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=83480aa1-d05e-4196-8715-8b0f3892bceb" /></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2009/12/what-makes-a-good-bugdefect-re.html</link>
            <guid>http://www.estevenjones.com/the_blog/2009/12/what-makes-a-good-bugdefect-re.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Potpourri</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Software</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Bug Tracking</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Bugs</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Defect</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Documentation</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Quality</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Quality Assurance</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Writing</category>
            
            <pubDate>Thu, 24 Dec 2009 11:19:48 -0800</pubDate>
        </item>
        
        <item>
            <title><![CDATA[Flash Fiction:  The Glumblefilch&rsquo;s Conundrum]]></title>
            <description><![CDATA[<p><strong>An Attempt At the Completely Absurd:</strong></p>  <p>The glumblefilch sauntered into the room.&nbsp; He was full of vim, vigor, and veracity.&nbsp; His three blandlybulches protruded from his torso, nearly touching the floor and he admired them.&nbsp; They were long and elegant.&nbsp; Fragile looking but he knew they were sturdy.&nbsp; The purplish hue they emanated set off the radiance of his six yellow eyes.&nbsp; Most glumblefilches only had five eyes, but he had six.&nbsp; He was quite proud of that, even if the other glumblefilches looked at him askance for his audacity, he had just one more eye that he could roll at their ignorance.</p>  <p><a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/FlashFictionTheGlumblefilchsConundrum_DDA1/spilledmilk_2.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="" border="0" alt="" align="left" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/FlashFictionTheGlumblefilchsConundrum_DDA1/spilledmilk_thumb.jpg" width="307" height="357" /></a> This glumblefilch was named Snodgrass.&nbsp; <em>That </em>was not something he was particularly proud of, but it was his name.&nbsp; He bore it with resolution and aplomb. He honestly didn't care what the other glumblefilches said about it.&nbsp; It was better than Steve, Victor, and Roger. And it was miles above Roderick.&nbsp; Roderick only had 3 eyes, Snodgrass mused, shaking slightly in his mirth.&nbsp; A low chuckle escaped his lips.&nbsp; Normally that would be fine, but tonight Snodgrass was with his boy at dinner, and a glumblefilch's low chuckle was actually quite a rumble.&nbsp; His boy gave him a warning glance over his shoulder and Snodgrass settled down.&nbsp; He didn't want to get his boy in trouble again. Last time that happened, Snodgrass wasn't allowed to come out from under the bed for a whole week.&nbsp; That was torture.&nbsp; Glumblefilches aren't known for there ability to handle solitude.&nbsp; They need constant attention and reassurances or else they disappear.&nbsp; By the time the week was over and his boy again came looking for him, Snodgrass had faded to near invisibility.&nbsp; A couple hours later though, fueled by the laughter of his boy and the games they played together, Snodgrass was back to his three limbed, six eyed purpley self.&nbsp; </p>  <p>The boy's mother had stuck her head into the room looking about curiously. "Who were you talking to?" she asked, her half smile showing she wanted to share in the fun.</p>  <p>"Just Snodgrass,"&nbsp; the boy had answered.&nbsp; With a confused look, the mother left the room.</p>  <p>So ... not wanting a repeat of a week under the bed, Snodgrass promised to be <em>good</em> during dinner.&nbsp; He floated down to the floor folding his blandlybulches beneath him.&nbsp; </p>  <p>He tried.&nbsp; He really did.&nbsp; He wanted to sit and wait quietly, but he was just not good at that.&nbsp; After a few moments, he couldn't take it anymore.&nbsp; He had to do something.&nbsp; So, Snodgrass pulled himself into the tightest ball he could and rolled under the boy's chair.&nbsp; Giggling softly to himself (this was going to be hilarious), the glumblefilch gulped and swallowed three big mouthfuls of air. Then he waited..&nbsp;&nbsp; He could feel the air wanting to escape.&nbsp; He held it in... He held it in more..&nbsp; He giggled... Then he couldn't hold it anymore. </p>  <p>Remember when we talked about the rumbling of a glumblefilch's low chuckle?&nbsp; Well, imagine what a full fledged belch would be like.&nbsp; The silverware on the table rattled.&nbsp; A Glass fell over, spilling milk onto the table.&nbsp; The curtains flapped in the breeze.&nbsp; The boy's mother fell over in a dead feint (OK, well almost).&nbsp; The boy's father had the look of horrified disgust.&nbsp; The dog ran into the living room, looking for a reprieve.&nbsp; Low flying aircraft swerved crazily, looking for where that clap of thunder came from.</p>  <p>When the echoes died away, when the mouths of both parents closed, trying to hide their disbelief and the glumblefilch under the boy's chair fairly split in two trying to contain his mirth, the boy glared under his chair.</p>  <p>"SAMUEL!!!" the boy's mother admonished.</p>  <p>The boy looked astonished, "It wasn't me, Mom!!&nbsp; It was Snodgrass!" </p>  <p>Samuel's father looked at him angrily.&nbsp; "Young man, that is not the way we behave at the table.&nbsp; And I've told you before.&nbsp; There is no Snodgrass.&nbsp; There is no such thing as a glumblefilch!!"</p>  <p>Snodgrass <em>hmmphed</em> quietly to himself. "No such thing??" he thought, "What does he know?"&nbsp; In a rage, he rolled out from under the chair, hovered up to the height of the table and stretched out his blandlyfilches to their full reach.&nbsp; </p>  <p>That's when he noticed he wasn't there.</p>]]></description>
            <link>http://www.estevenjones.com/the_blog/2009/12/flash-fiction-the-glumblefilch.html</link>
            <guid>http://www.estevenjones.com/the_blog/2009/12/flash-fiction-the-glumblefilch.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Short Stories</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Fiction</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Flash Fiction</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Glumblefilch</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Imaginary Friend</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Short Stories</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Spilled Milk</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Writing</category>
            
            <pubDate>Fri, 18 Dec 2009 15:45:42 -0800</pubDate>
        </item>
        
        <item>
            <title>Flash Fiction: It Was Worth It</title>
            <description><![CDATA[<p>The first punch landed with a splat against my cheek.&nbsp; I barely felt it.&nbsp; I think I was grinning so maniacally at that point that my cheeks were already tensed up, absorbing the blow without much damage.&nbsp; It caught me off guard and staggered me back a step or two.&nbsp; I didn't take my eyes off of the object of my fixation though.&nbsp; Well, at least not until the second blow landed.&nbsp; This time in the gut.&nbsp; My breath left me in a gush and I bent over, nearly double, cradling my stomach.&nbsp; </p>  <p>For a moment, I lost sight of my prize.&nbsp; I saw only the rocks and grass at my feet.&nbsp; Struggling to catch my breath I stood up straight again and smiled as my vision locked again just over the shoulder of this behemoth that was pummeling me.&nbsp; This time the punch to the face hurt.&nbsp; I'm pretty sure I heard the loud crunch of my nose breaking as his fist connected.&nbsp; I know I tasted blood.&nbsp; </p>  <p>This blow actually knocked me off of my feet.&nbsp; I sprawled backward into the bushes that lined the side of the house.&nbsp; Groaning with the fire that seemed to be consuming my face.&nbsp; WOW!!! That hurt like hell!!&nbsp; The behemoth was yelling something at me now, but I couldn't make out what he was saying.&nbsp; Having rebounded off of the bushes, I was lying on my stomach inches from his feet.&nbsp; Lord, please don't let him be pissed off enough that he's going to kick me...<a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/FlashFictionItWasWorthIt_9915/beat-up-face_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="beat-up-face" border="0" alt="beat-up-face" align="right" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/FlashFictionItWasWorthIt_9915/beat-up-face_thumb.jpg" width="326" height="365" /></a> </p>  <p>As the ringing in my head began to taper off, I'm was able to make out what he was shouting, "Get up you little bastard!!" or something to that effect.&nbsp; He moved to the side of me and kicked me hard in the upper thigh. "Get up!!" </p>  <p>With a Herculean effort, I pushed myself up, unsteadily rising to my feet.&nbsp; I glanced back at what had been holding my rapt attention in disappointment.&nbsp; The moment was gone, time to retreat.&nbsp; I tried to find my way around this bruiser,&nbsp; tried to find my way to the street so I could get home and nurse my broken face.&nbsp; He shoved me, roughly.&nbsp; I hit the side of the house with a sickening thud. My head slammed against the paneling with a sickening crack.&nbsp; I prayed that it was the wood and not my skull that split.&nbsp; The sasquatch grabbed the front of my shirt, holding me upright so he could deliver another punch to my face.&nbsp; "I'll show you!!" he bellowed, "You fuckin' pervert!!" </p>  <p>We were both startled by a scream from above us.&nbsp; "STOP IT!!!"&nbsp; The shrill voice came from directly over our heads, from the bathroom window.&nbsp; Cyndi was leaning out of it, her face filled with horror and a bit of fear.&nbsp; "What the hell is wrong with you??"&nbsp; The light behind her shimmered on her wet golden hair, creating a nimbus of light around her. Her robe was pulled tightly around her now, I guess she'd finished drying after her shower before sticking her head out the window to see what the commotion was about.&nbsp; Despite my blood spattered face and probably already swollen nose, despite the pain in my gut, and the pounding in my head, I managed a weak smile.&nbsp; </p>  <p>Jared, her older brother still held me, his fist ready for that final blow. "This little perv was watching you!!"&nbsp; he yelled, much too loudly for my throbbing head.</p>  <p>She looked down at me then, perhaps a slight flicker of recognition in her eyes.&nbsp; I could see that she was torn, emotionally.&nbsp; Angry at having been spied on.&nbsp; Embarrassed she had just stepped out of the shower, and I'd probably seen her drying off and putting on her lotion before the pummeling began.&nbsp; Concerned, because I'm sure I looked a mess.&nbsp; Hopefully I didn't look as bad as I felt.&nbsp; After an appraising second, she said, "Let him go Jared, he's just a kid."</p>  <p>"But.." Jared began, obviously wanting to pummel me a bit more.</p>  <p>"Let him go, you've beat him up enough.&nbsp; He'll never do it again."&nbsp; With a pointed look at me she asked, "Will you?"</p>  <p>I was a bit miffed at being called "just a kid." She was only a few years older than me after all.&nbsp; She's a senior though, and I guess we're all kids to her.&nbsp; I shook my head in a silent promise that I'll never peep on her again.</p>  <p>"Let him go," she repeated with finality.</p>  <p>With reluctant glare, Jared gave me a hard shove in the direction of the street. "If I ever see you around here again, you'll get worse!" he promised.</p>  <p>I made my way toward the street, toward home.&nbsp; Jared was making his way back into the house through the side door and was quickly out of sight.&nbsp; Cyndi was still leaning out the window, watching me leave, a curious expression on her face.&nbsp; If you asked me today, I would still swear there was a slight smile on those lips as I walked away. </p>  <p>So was it worth it?</p>  <p>Yeah..&nbsp; It was worth it...</p>  <p>&nbsp;</p>  <p>-E Steven Jones</p>

<div class="zemanta-pixie" style="margin-top:10px;height:15px"><br /><br /><span class="zem-script more-info pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2009/12/flash-fiction-it-was-worth-it.html</link>
            <guid>http://www.estevenjones.com/the_blog/2009/12/flash-fiction-it-was-worth-it.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Potpourri</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Short Stories</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Blood</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Flash Fiction</category>
            
            <pubDate>Thu, 17 Dec 2009 10:53:14 -0800</pubDate>
        </item>
        
        <item>
            <title>Flash Fiction: Midnight Confessions</title>
            <description><![CDATA[<p><strong>Inspired by the <a class="zem_slink" title="The Grass Roots" href="http://the-grassroots.com/" rel="homepage">Grass Roots</a> Song:</strong>&nbsp; <a href="http://www.stlyrics.com/lyrics/jackiebrown/midnightconfessions.htm" target="_blank">Midnight Confessions</a></p>  <p>&nbsp;</p>  <p>She saunters to the table, wearing that little black dress that she knows I love to see on her.&nbsp; Her smile tells me that the drink in her hand isn't her first.&nbsp; It's comfortable, relaxed, happy, and not just a little flirtatious.&nbsp; The music in the background is soft, but evident and her hips sway unconsciously to it's rhythm.</p>  <p><a href="http://www.estevenjones.com/the_blog/WindowsLiveWriter/FlashFictionMidnightConfessions_AB88/noir_2.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 10px; display: inline; border-top: 0px; border-right: 0px" title="noir" border="0" alt="noir" align="left" src="http://www.estevenjones.com/the_blog/WindowsLiveWriter/FlashFictionMidnightConfessions_AB88/noir_thumb.jpg" width="257" height="297" /></a>"Are you just going to sit there all night? Or are you going to get up and join the rest of us?" She asks me.&nbsp; I wonder if she has any idea of the effect that she has on me?&nbsp; I almost groan aloud, but catch myself in time as I watch her put the straw from her drink to her lips. </p>  <p>I manage to keep my voice friendly and nonchalant. "Oh, I dunno. I'm having plenty of fun watching all you drunks making fools of yourself out there dancing," I joke.</p>  <p> "Drunk?!?!" she asks, her smile tells me I must have just unknowingly challenged her. "You haven't seen anything yet." My heart aches as she reaches for my arm to drag me away from the safety of the table.&nbsp; A jolt of electricity jumps through me as her skin contacts mine. "C'mon," she tells me, dragging me to my feet, "You've been the playing the recluse long enough."</p>  <p>I'm hoping that she doesn't notice the melancholy smile on my face as I reluctantly rise.&nbsp; I can't help but stare at the little gold ring around her finger, wishing I was the one who put it there.</p>  <p>For the rest of the night I have to watch her dancing with the rest of our group.&nbsp; We're all out here tonight after finally closing the deal with our biggest client to date.&nbsp; Too many hours we'd all spent at our tables, making little changes requested to the facade, the landscaping, the lighting of the office building for a 'to be named later' law firm.&nbsp; But the deal was done, and now we're all out at this "intimate" little jazz club she'd gone to a while back.&nbsp; I know that I'll be having the same dream tonight that I've had almost every night since all these late work nights started.</p>  <p>It's a simple dream, really.&nbsp; I'm walking down the street with her on my arm.&nbsp; Sometimes it's just the two of us, sometimes we're with a group of friends.&nbsp; Sometimes I'm quiet when I tell her, sometimes I'm shouting it out to the world.&nbsp; But the words are always the same.&nbsp; And as I watch her on the dance floor now, they still are the same and I want to tell her, "I love you." </p>  <p>&nbsp;</p>  <p>I stagger into work the next day, having slept very little.&nbsp; And of course she's there.&nbsp; With a ready smile and a cheerful "Good morning." My heart flutters at what I think is a one of those "meaningful stares" that I hear so much about.&nbsp; But I fall back again from my reverie, almost immediately.&nbsp; She reaches up her hand to brush a gorgeous strand of hair that has fallen over her eyes.&nbsp; Her left hand.&nbsp; The hand with that blasted little gold ring.</p>  <p>I resign myself to the rest of the day I have ahead of me. I try to bury the thoughts rushing through my mind, the electricity coursing through my body.&nbsp; I know that she'll never be mine and that all of my "I love yous" are going to have to remain my secret, and all of my dreams and desires are going to have to remain my hidden midnight confessions.</p>  



<div class="zemanta-pixie" style="margin-top:10px;height:15px"><br /><span class="zem-script more-info pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]></description>
            <link>http://www.estevenjones.com/the_blog/2009/12/flash-fiction-midnight-confess.html</link>
            <guid>http://www.estevenjones.com/the_blog/2009/12/flash-fiction-midnight-confess.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Music</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Potpourri</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Short Stories</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Clubs and Venues</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Electricity</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Flash Fiction</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Short Stories</category>
            
            <pubDate>Wed, 16 Dec 2009 12:11:56 -0800</pubDate>
        </item>
        
    </channel>
</rss>

