<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>distributedlife</title>
	
	<link>http://distributedlife.com/blog</link>
	<description>passionate about everything</description>
	<lastBuildDate>Fri, 28 May 2010 13:55:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Distributedlife" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="distributedlife" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>the waterfall of defects</title>
		<link>http://distributedlife.com/blog/2010/05/the-waterfall-of-defects.html</link>
		<comments>http://distributedlife.com/blog/2010/05/the-waterfall-of-defects.html#comments</comments>
		<pubDate>Fri, 28 May 2010 13:55:15 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[defects]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[vmodel]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=929</guid>
		<description><![CDATA[A criticism I have for the waterfall or v-model is that the people before you can have a mentality of throwing their output over the wall and then washing their hands of it. Their engagement is only reintroduced when there is an issue with what they have produced. If they have been allocated elsewhere this [...]]]></description>
			<content:encoded><![CDATA[<p>A criticism I have for the waterfall or v-model is that the people before you can have a mentality of throwing their output over the wall and then washing their hands of it. Their engagement is only reintroduced when there is an issue with what they have produced. If they have been allocated elsewhere this can take time for them to get focused. In other cases it can seem like a criticism of their work to have it come back after they have completed it. The issue with the last part is that the product creation is the effort of an individual for the team rather than by the team for the team.</p>
<p>I very recently came to the realisation that testers have the same mentality and the same responses when they raise defects. The get written and then cast over the wall to the developer. Washing their hands of it until the new code returns. Sometimes the problems isn’t fixed correctly or causes regressions elsewhere and we don’t understand why. Other times the defects comes back requesting more information or a clarification.</p>
<p>I feel we need to take a more collaborative approach to defect resolution. In some cases it can be as simple as sitting down with the developer to resolve an issue now, given that the fix is simple enough. Other times it will be an active effort to define the problem statement. This will help both you and the developer understand the what is wrong and why.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/SEG-7IZdMJY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/the-waterfall-of-defects.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Copying tests between HP Service Test Projects</title>
		<link>http://distributedlife.com/blog/2010/05/copying-tests-between-hp-service-test-projects.html</link>
		<comments>http://distributedlife.com/blog/2010/05/copying-tests-between-hp-service-test-projects.html#comments</comments>
		<pubDate>Thu, 27 May 2010 13:55:20 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[copy test]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[hp service]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=924</guid>
		<description><![CDATA[Yesterday I showed some code for bulk adding new projects in HP Service Test. That wasn’t enough for me. Often we have a bunch of tests that need to be executed against each operation; security tests are good example. As such we want to copy and paste the tests and be done with it&#8230; but [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://distributedlife.com/blog/2010/05/bulk-test-creation-using-hp-service-test.html">Yesterday I showed some code for bulk adding new projects in HP Service Test</a>. That wasn’t enough for me. Often we have a bunch of tests that need to be executed against each operation; security tests are good example. As such we want to copy and paste the tests and be done with it&#8230; but if the target project already exists you have to copy each action one at a time. Not a pleasant waste of time.</p>
<p>So the extension to yesterdays post is to change your UI so the user can specify a source project and then a target project. Write a function to parse the action names. The rest of your code is basically the same.</p>
<p>I made changes to my “is action name valid loop”. You could theoretically drop a bunch of checks that are no longer possible. I added one check to drop each test that already existed in the target.</p>
<pre><code class="cplusplus">
//Get list of tests in 'from' project
List&lt;String&gt; AllFromTests = GetTestNamesAsString (Direction.From);

//Get list of tests already in 'to' project
List&lt;String&gt; ExistingToTests = GetTestNamesAsString (Direction.To);

List&lt;string&gt; TestsToAdd = new List&lt;string&gt; ();

foreach (string test in AllFromTests)
{
    string trimmed = test.Trim ();

    //skip empty strings
    if (String.IsNullOrEmpty (trimmed))
    {
        continue;
    }    

    //skip lines that are too long (shouldn't be possible)
    if (trimmed.Length &gt; 63)
    {
    continue;
    }

    //replace all spaces with underscores (should have already occured)
    trimmed = trimmed.Replace (' ', '_');

    //skip invalid characters (shouldn't be possible)
    if (!Regex.IsMatch (trimmed, @"^[a-zA-Z0-9_]+$"))
    {
    continue;
    }

    //starts with a number (shouldn't be possible)
    if (Regex.IsMatch (trimmed, @"^[0-9]"))
    {
    continue;
    }

    //skip tests that exist in the target
    if (ExistingToTests.Exists (delegate(string a) {return (a.Equals (trimmed));}))
    {
        continue;
    }

    TestsToAdd.Add (trimmed);
}
</code></pre>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/EFa1ow7NP4s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/copying-tests-between-hp-service-test-projects.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulk Test Creation using HP Service Test</title>
		<link>http://distributedlife.com/blog/2010/05/bulk-test-creation-using-hp-service-test.html</link>
		<comments>http://distributedlife.com/blog/2010/05/bulk-test-creation-using-hp-service-test.html#comments</comments>
		<pubDate>Wed, 26 May 2010 13:55:11 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[bulk add]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[HP Service Test]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=915</guid>
		<description><![CDATA[Something that irks me with HP Service Test is that you have to create each action one at a time. If you use the model I recommend for service test project configuration this can be an issue.
I finally resolved my irk with a little bit of code. I had built a web application to provide [...]]]></description>
			<content:encoded><![CDATA[<p>Something that irks me with HP Service Test is that you have to create each action one at a time. If you use <a href="http://distributedlife.com/blog/2009/10/structuring-hp-service-tests.html">the model I recommend</a> for service test project configuration this can be an issue.</p>
<p>I finally resolved my irk with a little bit of code. I had built a web application to provide reporting information on how service testing is going. I extended this to support adding test cases to existing projects. We currently use a spreadsheet to document our test cases before we create them and then use the project itself as the master copy.</p>
<p>This extension provided an exciting text area that the user could paste in as many test case names as they wanted. A new line separated each test case name. This made sense for us as we would copy from a spreadsheet and then paste into the text area and hit submit. Excel provided new lines between each cell row.</p>
<p>I would split the list on new lines and carriage returns. This was followed by a trim front and back and we would drop anything that failed these rules</p>
<ul>
<li>Empty line</li>
<li>Line length greater than 63 characters; a Service Test action name limit</li>
<li>Can only contain alphanumeric values, spaces or underscores</li>
<li>Must not start with a number</li>
</ul>
<p>I also replaced all spaces with underscores.</p>
<p>The following code segments are C# with a little bit of LINQ.</p>
<pre><code class="cplusplus">
string[] AllNewTests = TestsTextArea.Text.Split (new char[] {'\n', '\r'});
List&lt;string&gt; TestsToAdd = new List&lt;string&gt;();
foreach (string test in AllNewTests)
{
    string trimmed = test.Trim ();

    //skip empty strings
    if (String.IsNullOrEmpty (trimmed))
    {
        continue;
    }

    //skip lines that are too long
    if (trimmed.Length &gt; 63)
    {
        continue;
    }

    //replace all spaces with underscores
    trimmed = trimmed.Replace (' ', '_');

    //skip invalid characters
    if (!Regex.IsMatch (trimmed, @"^[a-zA-Z0-9_]+$"))
    {
    continue;
    }

    //starts with a number
    if (Regex.IsMatch (trimmed, @"^[0-9]"))
    {
        continue;
    }

    TestsToAdd.Add (trimmed);
}
</code></pre>
<p>What we ended up with was a list of Tests to add to our service test project</p>
<p>I then get the path of the project. You will need access to the quality centre or service file system to do this. The trick to finding the path is to get the ID of the project; you can navigate to path/to/service/tests/ID and from there recursively search for *.usr to get the project file. You can navigate directly to it because projects copied via quality centre will create sub folders in between the id and *.usr file using the id of the project it was copied from.</p>
<p>This code should do it:</p>
<pre><code class="cplusplus">
protected string FindProjectFileInPath (string path)
{
    string[] files = Directory.GetFiles (path, "*.usr", SearchOption.AllDirectories);

    var sortedFiles = from f in files
    orderby f descending
    select f;

    foreach (string file in sortedFiles)
    {
        return file;
    }

    return string.Empty;
}
</code></pre>
<p>Back up the *.usr file and the default.usp file as both need to be changed. I just add the ticks to the filename:</p>
<pre><code class="cplusplus">
string ticks = DateTime.Now.Ticks.ToString() ;

File.Copy (PathToProjectFile, PathToProjectFile.Replace (".usr", ".usr.backup." + ticks));

File.Copy (PathToUspFile, PathToUspFile.Replace (".usp", ".usp.backup." + ticks));
</code></pre>
<p>After that it is time to create each new action. We skip actions that already exist in the target file.</p>
<pre><code class="cplusplus">
foreach (string test in TestsToAdd)
{
    if (DoesActionExistInUsrFile (PathToProjectFile, test))
    {
        continue ;
    }

    AddActionToUsrFile (PathToProjectFile, test);

    if (!AddActionToUspFile (PathToUspFile, test))
    {
        //An error occured. Configuration error in default.usp
        //restore files
        File.Delete (PathToProjectFile);
        File.Delete (PathToUspFile);
        File.Copy (PathToProjectFile.Replace (".usr", ".usr.backup." + ticks), PathToProjectFile);
        File.Copy (PathToUspFile.Replace (".usp", ".usp.backup." + ticks), PathToUspFile);

        return ;
    }

    //increment added count
    added++;

    //create .c file
    string cfiledata =
    (
        test + "()" + "\n" +
        "{" + "\n" +
            "\t" + "return 0 ;" + "\n" +
        "}"
    );

    CreateCFile (PathToSourceFiles + test + ".c", cfiledata);
}
</code></pre>
<h3>Does Action Exist in Usr File</h3>
<pre><code class="cplusplus">
protected bool DoesActionExistInUsrFile (string path, string action)
{
    return (Ini.IniFileHelper.GetIniFileString (path, "Actions", action, "") != String.Empty);
}
</code></pre>
<p>The USR and USP files are INI files. To access these files using .NET <a href="http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/">check out this article</a>. I followed his instructions and created a library.</p>
<p>The only trick is to make sure your buffers are big enough. I used 65535 because I’m lazy and it is not ever that I’ll have 1,000 plus actions in a project file (65535 / 63 characters = 1040 approx)</p>
<h3>Add Action to Usr File</h3>
<p>Updating the Usr file isn’t too difficult; we just need to make multiple changes with the gotcha being that each new entry is added second to last. So remove the vuser_end value; add our own and then add vuser_end back in.</p>
<pre><code class="cplusplus">
protected void AddActionToUsrFile (string path, string action)
{
    //[Actions]
    Ini.IniFileHelper.WritePrivateProfileString ("Actions", "vuser_end", null, path);
    Ini.IniFileHelper.WritePrivateProfileString ("Actions", action, action + ".c", path);
    Ini.IniFileHelper.WritePrivateProfileString ("Actions", "vuser_end", "vuser_end.c", path);

    //[Recorded Actions]
    Ini.IniFileHelper.WritePrivateProfileString ("Recorded Actions", "vuser_end", null, path);
    Ini.IniFileHelper.WritePrivateProfileString ("Recorded Actions", action, "0", path);
    Ini.IniFileHelper.WritePrivateProfileString ("Recorded Actions", "vuser_end", "0", path);

    //[Replayed Actions]
    Ini.IniFileHelper.WritePrivateProfileString ("Replayed Actions", "vuser_end", null, path);
    Ini.IniFileHelper.WritePrivateProfileString ("Replayed Actions", action, "0", path);
    Ini.IniFileHelper.WritePrivateProfileString ("Replayed Actions", "vuser_end", "1", path);

    //[Modified Actions]
    Ini.IniFileHelper.WritePrivateProfileString ("Modified Actions", "vuser_end", null, path);
    Ini.IniFileHelper.WritePrivateProfileString ("Modified Actions", action, "0", path);
    Ini.IniFileHelper.WritePrivateProfileString ("Modified Actions", "vuser_end", "1", path);
}
</code></pre>
<h3>Add Action to Usp File</h3>
<p>The USP file is a little more complicated. We need to append our test to run logic action order and another property called the mercury ini tree sons. I believe this property would be for nested action orders. I don’t use these and therefore don’t consider them. Be wary if you use this function without testing it on nested actions.</p>
<pre><code class="cplusplus">
protected bool AddActionToUspFile (string path, string action)
{
    //[RunLogicRunRoot]
    string NewRunLogicActionOrder = Ini.IniFileHelper.GetIniFileString (path, "RunLogicRunRoot", "RunLogicActionOrder", "");

    string NewMercIniTreeSons = Ini.IniFileHelper.GetIniFileString (path, "RunLogicRunRoot", "MercIniTreeSons", "");

    if (NewRunLogicActionOrder == String.Empty || NewMercIniTreeSons == String.Empty)
    {
        return false;
    }

    NewRunLogicActionOrder += "," + action;
    NewMercIniTreeSons += "," + action;

    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot", "RunLogicActionOrder", NewRunLogicActionOrder, path);
    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot", "MercIniTreeSons", NewMercIniTreeSons, path);
</code></pre>
<p>We then need to add our test into the profile actions name, in a second to last position.</p>
<pre><code class="cplusplus">
    //[Profile Actions]
    string ProfileActionsName = Ini.IniFileHelper.GetIniFileString (path, "Profile Actions", "Profile Actions name", "");
    if (ProfileActionsName == String.Empty)
    {
        return false;
    }

    ProfileActionsName = ProfileActionsName.Insert (ProfileActionsName.LastIndexOf (",vuser_end"), "," + action);

    Ini.IniFileHelper.WritePrivateProfileString ("Profile Actions", "Profile Actions name", ProfileActionsName, path);
</code></pre>
<p>Finally we create a new section in the USP file. I use default values for test because as I said before I don’t support nested actions.</p>
<pre><code class="cplusplus">
    //New section for test
    //[RunLogicRunRoot:added]
    //MercIniTreeSectionName="added"
    //RunLogicObjectKind="Action"
    //Name="added"
    //RunLogicActionType="VuserRun"
    //MercIniTreeFather="RunLogicRunRoot"

    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot:" + action, "MercIniTreeSectionName", "\"" + action + "\"", path);
    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot:" + action, "RunLogicObjectKind", "\"Action\"", path);
    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot:" + action, "Name", "\"" + action + "\"", path);
    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot:" + action, "RunLogicActionType", "\"VuserRun\"", path);
    Ini.IniFileHelper.WritePrivateProfileString ("RunLogicRunRoot:" + action, "MercIniTreeFather", "\"RunLogicRunRoot\"", path);

    return true;
}
</code></pre>
<h3>Create C File</h3>
<p>The easy part; validation has been removed as it was tied to the UI that I haven’t provided.</p>
<pre><code class="cplusplus">
protected void CreateCFile (string path, string content)
{
    byte[] info = new UTF8Encoding (true).GetBytes (content);

    FileStream cfile = File.Create (path);
    if (cfile == null)
    {
        return ;
    }

    cfile.Write (info, 0, info.Length);
    cfile.Flush ();
    cfile.Close ();
}
</code></pre>
<p>There you have it; all you need now is a UI.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/1olHkB-8z3k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/bulk-test-creation-using-hp-service-test.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing For Odd Perfect Numbers</title>
		<link>http://distributedlife.com/blog/2010/05/testing-for-odd-perfect-numbers.html</link>
		<comments>http://distributedlife.com/blog/2010/05/testing-for-odd-perfect-numbers.html#comments</comments>
		<pubDate>Tue, 25 May 2010 13:55:24 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[correctness]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[fundamentals]]></category>
		<category><![CDATA[logic]]></category>
		<category><![CDATA[perfect numbers]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[software testing]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=912</guid>
		<description><![CDATA[A developer has just given you a program to test; it takes no input and returns the lowest odd perfect number. A perfect number is a positive integer that is the sum of its proper positive divisors.
It doesn’t help that at present that there are no known odd perfect numbers. His program may be correct [...]]]></description>
			<content:encoded><![CDATA[<p>A developer has just given you a program to test; it takes no input and returns the lowest odd perfect number. <a href="http://en.wikipedia.org/wiki/Perfect_number#Odd_perfect_numbers">A perfect number is a positive integer that is the sum of its proper positive divisors</a>.</p>
<p>It doesn’t help that at present that there are no known odd perfect numbers. His program may be correct given the assumption that such a number does exist but you may not have time to wait for the result.</p>
<p>The chances of this problem coming up in your day to day job are slim. This doesn’t mean that you shouldn’t know about approaches to solving the problem should it arise.</p>
<p>I have updated the road map for <a href="http://distributedlife.com/blog/2010/04/futures-in-software-testing-%E2%80%93-fundamentals.html">software testing fundamentals</a> to include the following things:</p>
<ul>
<li>Deductive reasoning</li>
<li>Inductive reasoning</li>
<li>Set theory from mathematic logic</li>
<li>Proof theory from mathematic logic</li>
<li>Techniques of program correctness</li>
<li>Hypothesis testing</li>
</ul>
<p>I have no expectation for all software testers to be experts in each of these techniques or concepts. I do expect software testers to be aware of the concepts and to be able to identify when they are applicable. I’m definitely no expert so if you think these needs to be broken down a little more or revised then drop me a line and we can discuss it.</p>
<p><a href="http://distributedlife.com/content/road-map.Software%20Testing%20Fundamentals.pdf">you can get the new road map here</a></p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/S4FOYToTjPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/testing-for-odd-perfect-numbers.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Brief Update</title>
		<link>http://distributedlife.com/blog/2010/05/a-brief-update.html</link>
		<comments>http://distributedlife.com/blog/2010/05/a-brief-update.html#comments</comments>
		<pubDate>Mon, 24 May 2010 13:55:09 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=909</guid>
		<description><![CDATA[Last week was a fairly significant one in my grand scheme of things. I accepted a new position which I’ll announce when I start in October. I’m very excited by it. It does however mean an end to three and half years where I have been now. This last three years has been an amazing [...]]]></description>
			<content:encoded><![CDATA[<p>Last week was a fairly significant one in my grand scheme of things. I accepted a new position which I’ll announce when I start in October. I’m very excited by it. It does however mean an end to three and half years where I have been now. This last three years has been an amazing experience working with some great people and working on projects and in roles I never expected to.</p>
<p>After June 30 when my current gig ends I am not sure there will be much more in regards to service testing posts; I run the service testing team now but won’t be moving into a service testing role. I’ll try to dump everything I haven’t said about service testing between now and then. Not just for me but for my two mentees that have been learning service testing under my guidance. I’m sure I’ve forgotten to tell them something.</p>
<p>In between the two jobs I’ll be driving across the top of Australia for three months. I’ll be posting updates for family, friends and interested others when I enter into an area of coverage. If you are not familiar with Australia; there are vast expanses of land where there is no mobile coverage.</p>
<p><a href="http://www.telstra.com.au/mobile/networks/coverage/broadband.html">Check out this coverage graph to see what I am talking about. Just hit submit.</a></p>
<p>October 4 is the start of the new job and a new city. I’ll be moving to Melbourne as well.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/VcYUQNupLco" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/a-brief-update.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lint Free Tests</title>
		<link>http://distributedlife.com/blog/2010/05/lint-free-tests.html</link>
		<comments>http://distributedlife.com/blog/2010/05/lint-free-tests.html#comments</comments>
		<pubDate>Mon, 17 May 2010 13:56:26 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[action target scenario]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[rapid test case]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=903</guid>
		<description><![CDATA[It has become time for me to review and renew what I had originally called Rapid Test Case Creation or Action Target Scenario. Both of these were poor names and I&#8217;m now in favour of Lean Test Documentation.
A name that was suggested to be me was Lint Free Test Documentation; why? Because they contain no [...]]]></description>
			<content:encoded><![CDATA[<p>It has become time for me to review and renew what I had originally called <a href="http://distributedlife.com/blog/2008/02/test-case-structure.html">Rapid Test Case Creation or Action Target Scenario</a>. Both of these were poor names and I&#8217;m now in favour of Lean Test Documentation.</p>
<p>A name that was suggested to be me was Lint Free Test Documentation; why? Because they contain no fluff.</p>
<p>The whole purpose of the method was to reduce the amount of unnecessary effort that was being poured into test creation. My co-workers were spending more time documenting tests than executing tests. If you know me this is against my motto. <a href="http://distributedlife.com/blog/2010/03/if-you%E2%80%99re-not-testing-you%E2%80%99re-not-testing.html">If you&#8217;re not testing; you&#8217;re not testing.</a></p>
<p>One of the issues that has been highlighted over the past two years is that people get hung up on the dots and dashes when a more sentence like structure would have been better. It detracted them from the purpose of the process. <a href="http://distributedlife.com/blog/2010/04/futures-in-software-testing-the-user-interaction-tester.html">User Interaction testing for the win</a>.</p>
<p>So stay tuned as I revamp it with at least 50% more vampire.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/5_LaUNeDB7s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/lint-free-tests.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business Engagement Models</title>
		<link>http://distributedlife.com/blog/2010/05/business-engagement-models.html</link>
		<comments>http://distributedlife.com/blog/2010/05/business-engagement-models.html#comments</comments>
		<pubDate>Mon, 17 May 2010 13:55:16 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[business engagement]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[sdlc]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[vmodel]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=900</guid>
		<description><![CDATA[Over my career I&#8217;ve been drawn into numerous discussions regarding which software development lifecycle model is right for us? Which is right for testing?
One of the questions missed is what is the right model for the business? An in-house software development shop providing for an organisation then may not have a choice about what is [...]]]></description>
			<content:encoded><![CDATA[<p>Over my career I&#8217;ve been drawn into numerous discussions regarding which <a href="http://en.wikipedia.org/wiki/Software_development_process">software development lifecycle model</a> is right for us? Which is right for testing?</p>
<p>One of the questions missed is what is the right model for the business? An in-house software development shop providing for an organisation then may not have a choice about what is right. Some organisations don&#8217;t care what model is used or if any process is used at all. They control the money, which projects are initiated, stopped, started and when, they control the deadlines and the requirements. Through all of this they also control the quality.</p>
<p>In such cases picking any model is pointless because it&#8217;s going to fail. These models are not about software development; they are about <strong>business engagement and software development</strong>. Trying to control how the business engages with you via a model when they have their own model, <em>and adhoc is a model</em>, is pointless. They always win. It&#8217;s their money.</p>
<p>This leaves you with two options: get the business to change or come up with your own model that uses the current business engagement model.</p>
<p>The first option is the hardest; you may not be empowered to make such changes and the business may not want to change. This is where strong IT leadership from the CIO is needed. The second option is the short term solution. The goal is to achieve as much as you can knowing what you don&#8217;t control. With this in mind you can at least solve the pain points between your team and the other stakeholders involved in creating the software.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/Pnl1EHbYpA4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/business-engagement-models.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Survey Complete</title>
		<link>http://distributedlife.com/blog/2010/05/survey-complete.html</link>
		<comments>http://distributedlife.com/blog/2010/05/survey-complete.html#comments</comments>
		<pubDate>Wed, 12 May 2010 13:55:49 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[survey]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=894</guid>
		<description><![CDATA[I would like to extend a big thank you to everyone that participated in my survey on perceptions of career development in software testing. I’ve finished my paper and it’s been submitted for the Iqnite 2010 conference that is hosted in Sydney this October.
If I don’t get a speaking position then I’ll put it up [...]]]></description>
			<content:encoded><![CDATA[<p>I would like to extend a big thank you to everyone that participated in <a href="http://distributedlife.com/blog/2010/05/software-testing-research.html">my survey on perceptions of career development in software testing</a>. I’ve finished my paper and it’s been submitted for the <a href="http://www.iqnite-conferences.com/au/index.aspx">Iqnite 2010 conference that is hosted in Sydney this October</a>.</p>
<p>If I don’t get a speaking position then I’ll put it up here. If you&#8217;re in the Canberra, Australia region then hassle me as I am trying to organise at lease one more another session of this presentation before I go away in July.</p>
<p>If you’re interested in your own software testing career; perhaps you could consider one of the <a href="http://distributedlife.com/blog/2010/04/futures-in-software-testing.html">disciplines of software testing</a>.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/Ieft_ICn0AU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/survey-complete.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traffic Lights vs. Ticks and Crosses</title>
		<link>http://distributedlife.com/blog/2010/05/traffic-lights-vs-ticks-and-crosses.html</link>
		<comments>http://distributedlife.com/blog/2010/05/traffic-lights-vs-ticks-and-crosses.html#comments</comments>
		<pubDate>Mon, 10 May 2010 13:55:48 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[testing]]></category>
		<category><![CDATA[behavioural]]></category>
		<category><![CDATA[check control]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[functionality]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[software testing]]></category>
		<category><![CDATA[traffic light]]></category>
		<category><![CDATA[user interaction]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=884</guid>
		<description><![CDATA[One of the advantages of specialisation within software testing is that testers are focused on their discipline. I was in a meeting where there was group of behaviour &#38; functionality testers that were complaining about a user interface change that involved making a traffic lights control (a green, orange, red colour state indicator) to a [...]]]></description>
			<content:encoded><![CDATA[<p>One of the advantages of <a href="http://distributedlife.com/blog/2010/04/futures-in-software-testing.html">specialisation within software testing</a> is that testers are focused on their discipline. I was in a meeting where there was group of <a href="http://distributedlife.com/blog/2010/04/futures-in-software-testing-the-behavioural-functionality-tester.html">behaviour &amp; functionality testers</a> that were complaining about a user interface change that involved making a traffic lights control (a green, orange, red colour state indicator) to a tick/exclamation/cross control.</p>
<p><a href="http://distributedlife.com/blog/wp-content/uploads/smallfail.gif"><img class="size-full wp-image-886" title="Fail" src="http://distributedlife.com/blog/wp-content/uploads/smallfail.gif" alt="Fail" width="16" height="16" /></a><br />
<a href="http://distributedlife.com/blog/wp-content/uploads/smallwarning.jpg"><img class="size-full wp-image-888" title="Warning" src="http://distributedlife.com/blog/wp-content/uploads/smallwarning.jpg" alt="Warning" width="16" height="16" /></a><br />
<a href="http://distributedlife.com/blog/wp-content/uploads/smallsuccess.gif"><img class="size-full wp-image-887" title="Pass" src="http://distributedlife.com/blog/wp-content/uploads/smallsuccess.gif" alt="Pass" width="16" height="16" /></a></p>
<p>They felt that the new control was nothing more than the interaction designer making changes because she could.</p>
<p>The problem with using a colour circle to indicate state is that users with colour blindness can’t easily tell the state. It works for traffic lights because they use very precise colours to assist drivers with colour blindness and importantly include positional information as well. The bottom light is “proceed”, the middle is “stop if safe” and the top light is “stop”.</p>
<p>Interested in user interaction testing? <a href="http://distributedlife.com/blog/2010/04/futures-in-software-testing-the-user-interaction-tester.html">Find out what it takes to be a user interaction tester and start learning a new skill today</a>.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/UWmP1Xz0M3c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/traffic-lights-vs-ticks-and-crosses.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting to the real issue</title>
		<link>http://distributedlife.com/blog/2010/05/getting-to-the-real-issue.html</link>
		<comments>http://distributedlife.com/blog/2010/05/getting-to-the-real-issue.html#comments</comments>
		<pubDate>Fri, 07 May 2010 13:55:03 +0000</pubDate>
		<dc:creator>Ryan Boucher</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[distributedlife]]></category>
		<category><![CDATA[negotiating]]></category>
		<category><![CDATA[problem solving]]></category>
		<category><![CDATA[ryan boucher]]></category>
		<category><![CDATA[rybo]]></category>
		<category><![CDATA[software testing]]></category>

		<guid isPermaLink="false">http://distributedlife.com/blog/?p=881</guid>
		<description><![CDATA[I was called into the discussion; the environment manager wanted to change when we integrate. He wanted all the changes to be integrated before we started testing. This would allow us the absolute maximum amount of time in integration. There had been complaints that we were not getting enough time in integration.
I knew we were [...]]]></description>
			<content:encoded><![CDATA[<p>I was called into the discussion; the environment manager wanted to change when we integrate. He wanted all the changes to be integrated before we started testing. This would allow us the absolute maximum amount of time in integration. There had been complaints that we were not getting enough time in integration.</p>
<p>I knew we were not getting enough time in general but I didn&#8217;t know that integration issues were being uncovered in production because of a lack of integration time. In his defence there had been a terribly short period of time for integration.</p>
<p><a href="http://distributedlife.com/blog/2008/10/a-case-against-early-integration.html">You may already know my thoughts on early integration</a>. So I need a good reason to change to such an approach. We discussed it and the longer it went on the more I realised that he didn&#8217;t actually want early integration any more than I did.</p>
<p>That is what he said but it wasn&#8217;t what he wanted. He had been told about a problem and with that someone had suggested a solution; early integration.</p>
<p>The problem was that there was only 7 environments and 20 changes so some changes were queueing for a test environment.</p>
<p>Given that these environments were not used constantly all day long I suggested that he have a roster. You need to use an environment; grab a machine that is free. It only takes 10 minutes to deploy and you can have 4x two hour session everyday. Across 7 machines that is 28 slots per day. We could even reserve one machine for data creation and a stable build to refer back to.</p>
<p>When you&#8217;re discussing a solution to a problem it is always worth making sure you&#8217;re fixing the right problem.</p>
<img src="http://feeds.feedburner.com/~r/Distributedlife/~4/qs1VSFIM03o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://distributedlife.com/blog/2010/05/getting-to-the-real-issue.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
