<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Where Technology Meets Teamwork &#187; Jeff Levinson</title>
	<atom:link href="http://blog.nwcadence.com/author/jefflevinson/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nwcadence.com</link>
	<description>Thoughts on TFS, Lean, Agile, Kanban, Scrum and other collaborative technologies and techniques</description>
	<lastBuildDate>Thu, 26 Jan 2012 17:15:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Migrating from ClearQuest to TFS 2010</title>
		<link>http://blog.nwcadence.com/2011/11/migrating-from-clearquest-to-tfs-2010/</link>
		<comments>http://blog.nwcadence.com/2011/11/migrating-from-clearquest-to-tfs-2010/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 22:51:10 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[ClearQuest]]></category>
		<category><![CDATA[TFS Integration Platform]]></category>
		<category><![CDATA[Visual Studio 2010 Team Foundation Server]]></category>
		<category><![CDATA[CQ]]></category>
		<category><![CDATA[Integration Platform]]></category>
		<category><![CDATA[Team Foundation Server]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/11/migrating-from-clearquest-to-tfs-2010/</guid>
		<description><![CDATA[The Integration Mapping Platform is the preferred method for moving from CQ to TFS. Moving any other way is suicide. The integration platform, out of the box, provides great information on doing a one to one migration from CQ to &#8230; <a href="http://blog.nwcadence.com/2011/11/migrating-from-clearquest-to-tfs-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://visualstudiogallery.msdn.microsoft.com/f854dd59-8eeb-4673-8d9a-ae012989bfa2">Integration Mapping Platform</a> is the preferred method for moving from CQ to TFS. Moving any other way is suicide. The integration platform, out of the box, provides great information on doing a one to one migration from CQ to TFS, but it doesn’t help you migrate ClearQuest links. In this post I’ll walk you through how to migrate links, and how to migrate links from one type to another and the gotcha’s you’ll find along the way.</p>
<p>The first thing is that you need to understand the CQ Schema. You do <em>not</em> need to use the CQ Designer – you can learn everything you need just by creating queries. So to begin with you need to know what you want to migrate (obviously) but we’re talking about what the work item types are and their relationships to other work item types (records) in CQ. For this example, I will show you how to migrate a “ChangeRecord” with a related “WorkRecord”. These will be migrated to a Requirement work item in TFS with a child Task work item.</p>
<p>Figure 1 shows a small portion of the ChangeRecord type in ClearQuest.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/11/image.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.nwcadence.com/wp-content/uploads/2011/11/image_thumb.png" width="308" height="242"></a></p>
<p>The critical thing to note about this is that we are not referencing the WorkRecord as part of the relationship at all. We are referencing the WRList “Field_Reference” field type. And that’s another – ClearQuest is case sensitive. Note that as you create your XML configuration file.</p>
<p>Once you have this information you need to create the queries (yes, you need at <em>least two queries to perform a migration with links</em>). The first query should be the first part of the link (in this case the “Parent” part of the relationship) and should return only those records that are going to be Parent work items. In this case the query will return only ChangeRecords. The second query, should, obviously be the child part of the query. The query used in this example will return WorkRecords which have ChangeRecord “parents”.</p>
<p>Next you need to set the queries to use in the Integration Platform like so:</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/11/image1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blog.nwcadence.com/wp-content/uploads/2011/11/image_thumb1.png" width="611" height="186"></a></p>
<p>After this comes the mappings. This is a straightforward mapping exercise. Here you will note the mappings I mentioned previously. The last part, setting the link type has to be done in the XML itself. Select the XML tag at the bottom of the settings form.</p>
<p>By default (and this is really important – if you do not follow this step, the migration will succeed but the linking will fail) there is a single line that reads as follows:</p>
<pre class="csharpcode"><font size="2">&lt;LinkTypeMapping LeftMigrationSourceUniqueId=<span class="str">"79841a53-d698-4107-a2df-5ff935e0e0c9"</span>
 LeftLinkType=<span class="str">"ClearQuestAdapter.LinkType.Duplicate"</span>
 RightLinkType=<span class="str">"Microsoft.TeamFoundation.Migration.TFS.LinkType.WorkItemToWorkItem"</span>
 RightMigrationSourceUniqueId=<span class="str">"c80d3b9a-a40e-4aa7-bfb2-7828971ac4f0"</span> /&gt;</font></pre>
<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>You can, in most cases safely delete this line, but don’t do it yet! First, if you are going to keep it, copy it. You want the Unique ID’s from both the left and right migration sources. Once you copy it change the link types as follows:</p>
<pre class="csharpcode"><font size="2">&lt;LinkTypeMapping LeftMigrationSourceUniqueId=<span class="str">"79841a53-d698-4107-a2df-5ff935e0e0c9"</span>
 LeftLinkType=<span class="str">"ClearQuestAdapter.LinkType<font style="background-color: #ffff00">.ReferenceListFieldRecordLink.ChangeRecord.WRList</font>"</span>
 RightLinkType=<span class="str">"<font style="background-color: #ffff00">System.LinkTypes.Hierarchy</font>"</span>
 RightMigrationSourceUniqueId=<span class="str">"c80d3b9a-a40e-4aa7-bfb2-7828971ac4f0"</span> /&gt;</font></pre>
<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>There are two differences to note as highlighted. The first is that the reference link for CQ must specify the work item.work item list. In other words, the relationship isn’t ChangeRecord.WorkRecord but rather ChangeRecord.list type as shown in the first figure. The second item is that the WorkItemToWorkItem link is a hold over from the TFS 2008 migration provider. We’re passed that obviously. To convert the link from whatever link type in CQ to TFS simply use the TFS link type (to get a list of these, do a witadmin exportlinktype and take a look at the resulting file).</p>
<p>Please note that none of this is documented in the Integration Platform documentation. Hopefully this will be updated soon with this information. For now, this is how to do it.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/11/migrating-from-clearquest-to-tfs-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Manual Testing Code Coverage&#8211;Yeah!</title>
		<link>http://blog.nwcadence.com/2011/10/manual-testing-code-coverageyeah/</link>
		<comments>http://blog.nwcadence.com/2011/10/manual-testing-code-coverageyeah/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 17:38:33 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/10/manual-testing-code-coverageyeah/</guid>
		<description><![CDATA[Much asked for and incredibly helpful but missing in Visual Studio 2010 and Microsoft Test Manager 2010 was code coverage for manual testing. In Visual Studio vNext (and Microsoft Test Manager vNext) it’s available out of the box. To enable &#8230; <a href="http://blog.nwcadence.com/2011/10/manual-testing-code-coverageyeah/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Much asked for and incredibly helpful but missing in Visual Studio 2010 and Microsoft Test Manager 2010 was code coverage for manual testing. In Visual Studio vNext (and Microsoft Test Manager vNext) it’s available out of the box.</p>
<p>To enable it, go to the test settings and select Code Coverage (there are some options but you don’t need to set anything).</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CodeCoverage1" border="0" alt="CodeCoverage1" src="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage1_thumb.png" width="632" height="253"></a></p>
<p>You do need to create an automated build (if you aren’t doing automated builds now, you need to be doing it NOW – it’s the fastest way to improve quality). After you set the settings and associate the automated build, run your manual test. When you’re finished, close the Test Runner and click the Analyze Test Runs page.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CodeCoverage2" border="0" alt="CodeCoverage2" src="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage2_thumb.png" width="642" height="254"></a></p>
<p>Make sure you have the View: Manual runs selected and double-click your completed test run. This opens up the test run summary.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage3.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CodeCoverage3" border="0" alt="CodeCoverage3" src="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage3_thumb.png" width="650" height="386"></a></p>
<p>Expand the Attachments node and you will see a data.coverage file (note that you ran more than one .NET application during the test run you will see multiple files). Double-click it to open it. This will open Visual Studio to display the code coverage results.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CodeCoverage4" border="0" alt="CodeCoverage4" src="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage4_thumb.png" width="645" height="469"></a></p>
<p>This screenshot shows all of the methods in the executable and the covered and not covered blocks.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage5.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CodeCoverage5" border="0" alt="CodeCoverage5" src="http://blog.nwcadence.com/wp-content/uploads/2011/10/CodeCoverage5_thumb.png" width="649" height="471"></a></p>
<p>Double-clicking a method brings up the file with code coloring enabled.</p>
<p>Brilliant!</p>
<p>Now teams can ensure that they are covering all of their code with their functional tests as well as with their unit tests.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/10/manual-testing-code-coverageyeah/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dev11 Preview is out&#8211;First in a series</title>
		<link>http://blog.nwcadence.com/2011/09/dev11-preview-is-outfirst-in-a-series/</link>
		<comments>http://blog.nwcadence.com/2011/09/dev11-preview-is-outfirst-in-a-series/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 17:35:44 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Dev11]]></category>
		<category><![CDATA[Dev11 Preview]]></category>
		<category><![CDATA[Feedback Manager]]></category>
		<category><![CDATA[Visual Studio ALM]]></category>
		<category><![CDATA[Visual Studio vNext]]></category>
		<category><![CDATA[Customer Feedback]]></category>
		<category><![CDATA[Customer Reviews]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/09/dev11-preview-is-outfirst-in-a-series/</guid>
		<description><![CDATA[Want to know what’s coming in TFS and VS vNext? Microsoft released a CTP of the tools at //Build and we’ve got them! We’re playing with the new features and wanted to share some of the cool new items with &#8230; <a href="http://blog.nwcadence.com/2011/09/dev11-preview-is-outfirst-in-a-series/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Want to know what’s coming in TFS and VS vNext? Microsoft released a CTP of the tools at //Build and we’ve got them! We’re playing with the new features and wanted to share some of the cool new items with you (if you are an MSDN Subscriber you can download the bits from MSDN). First up – the new Feedback tool.</p>
<p>Getting feedback from our customers, stakeholders, product owners and others can be a sometimes painful process – and if you aren’t co-located it’s even more difficult. Remembering what happened in a session is harder still – you forget to take a note on something and then you can’t remember what the customer said and you have to follow up with them. Into this, Microsoft is releasing a new Feedback Management tool.</p>
<p>To explain the process, it’s helpful to look at some of the new stuff related to work items and the process flow in Dev11 (I’ll cover details of new work items later so for now you can just ooohhhh and aaaahhhh the cool new Metro UI <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.nwcadence.com/wp-content/uploads/2011/09/wlEmoticon-smile.png">).</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/09/User-Story-Storyboard.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="User Story - Storyboard" border="0" alt="User Story - Storyboard" src="http://blog.nwcadence.com/wp-content/uploads/2011/09/User-Story-Storyboard_thumb.png" width="649" height="308"></a></p>
<p>This figure shows the new User Story work item (this is the web based view but you will be happy to note that the Team Web Access view and the Visual Studio view are identical). This tab shows the Storyboards tab. Storyboards a new feature implemented through Microsoft PowerPoint (I will cover this in a later post also). The Storyboard is where you first lay out what the user interface looks like and how the flow of the feature moves.</p>
<p>Another new tab is the Feedback tab.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/09/User-Story-Feedback.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="User Story - Feedback" border="0" alt="User Story - Feedback" src="http://blog.nwcadence.com/wp-content/uploads/2011/09/User-Story-Feedback_thumb.png" width="653" height="309"></a>
<p>On this tab, team members can request folks to provide feedback on a feature. This is designed to be used once there is a user interface that the user can interact with so this could be used multiple times throughout the development of the story. Feedback is another type of work item in Dev11.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/09/Feedback1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Feedback1" border="0" alt="Feedback1" src="http://blog.nwcadence.com/wp-content/uploads/2011/09/Feedback1_thumb.png" width="654" height="492"></a></p>
<p>This is a completed feedback work item which contains feedback (how to do this is coming up next). The item can be requested by someone, feedback submitted by someone and then reviewed by someone. The user can provide ratings and comments which you can see on the right-hand side. Once feedback is requested of a user the user can spool up the Feedback Manager (this is a separately installed tool but we have no information on licensing at this point – we hope this will be available to all users). When the Feedback Tool is launched it looks like the following:</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/09/Annotated-Feedback-Manager.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Annotated Feedback Manager" border="0" alt="Annotated Feedback Manager" src="http://blog.nwcadence.com/wp-content/uploads/2011/09/Annotated-Feedback-Manager_thumb.png" width="632" height="320"></a></p>
<p>If you are familiar with Microsoft Test Manager (MTM) this is built on the same framework and provides a subset of the capabilities. The reviewer will see the stories that they need to provide feedback on listed up above and they can select the story (click on it) and it will show the description tab of the story (shown below):</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/09/FBM-User-Story-Description.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="FBM User Story Description" border="0" alt="FBM User Story Description" src="http://blog.nwcadence.com/wp-content/uploads/2011/09/FBM-User-Story-Description_thumb.png" width="651" height="445"></a></p>
<p>As the user goes through the application, they can enter text, perform screen captures (yes, you can use the screen capture tool of your choice – I prefer Snagit – clicking the Settings button will allow you to configure this) and annotate those screen captures. It records video, audio (even when using remote desktop – a nice feature that was well thought out) and saves all of that information to the feedback work item for review by the team.</p>
<p>Providing feedback on an application has never been so easy and should be welcomed by many teams as a way to integrate their users deeper into the development process and to get accurate and timely feedback that can quickly and easily be referred to.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/09/dev11-preview-is-outfirst-in-a-series/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>When iterative development causes problems</title>
		<link>http://blog.nwcadence.com/2011/09/when-iterative-development-causes-problems/</link>
		<comments>http://blog.nwcadence.com/2011/09/when-iterative-development-causes-problems/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 02:25:40 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Application Lifecycle Management (ALM)]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/09/when-iterative-development-causes-problems/</guid>
		<description><![CDATA[I should start off by saying that I’m a big fan of Scrum “but”. Scrum imposes strict limits on a number of areas and absolutely requires a number of things being done. And by not doing them you are setting &#8230; <a href="http://blog.nwcadence.com/2011/09/when-iterative-development-causes-problems/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I should start off by saying that I’m a big fan of Scrum “but”. Scrum imposes strict limits on a number of areas and absolutely requires a number of things being done. And by not doing them you are setting yourself up for failure. However, there are problems that Scrum does not address and which are not talked about that much. Things like organizational challenges and internal company politics and just culture in general. After all, Scrum is a process and so it can’t take those items into account. it says, “here is the prescribed way of doing work – do it this way and everything will work, don’t do it this way and you will not succeed.” But Scrum also makes a number of assumptions which are not good. In this post I will walk you through some of the items we faced and how we overcame them.</p>
<p>In a strict world of Scrum you have a Product Backlog and when you begin a sprint you move the items that you are committing to into the Sprint Backlog and then you pull your work from there – almost like a Kanban system but not quite, because the Work In Progress (WIP) limits are at a higher level and in general it tracks work at a higher level than Kanban does as well as several other differences. </p>
<p>The major problem we continuously run into is the complexity of the network and the hardware involved in the work that we do. To add to the complexity is the fact that different teams (which we have no influence over) take longer to do work than we do and they are governed by a strict set of Service Level Agreements (SLA) which you will often find in large companies where some of the core work, such as server maintenance or data center maintenance, is subcontracted.</p>
<p>Scrum, combined with the team size gave us the perfect ability to hide our problems which was not a good thing. What would happen is that teams would run into a problem in, say, the development environment and set things in motion to solve the problem (opened a ticket with the server team) and would then move on to the QA environment. The problem would occur in the QA environment and then move to the Pre-Prod environment – all the while this problem still occurred. But because the team kept pulling items from their queue to work on, they were “busy” all of the time and reporting good progress – but not actually completing anything.</p>
<p><font color="#0000ff"><em>I should note that some of the user stories were straight technical stories – software being installed for instance to get various environments up and running.</em></font></p>
<p>The problem here was two-fold. The first is that the way the user stories were constructed, installing software and moving code from Dev to QA to Pre-Prod were all part of a single user story – it was just different parts of the requirement and Scrum doesn’t track down at the task level. The second part is that the “in progress” bucket can be huge – it is up to the practitioner to break the story down into a manageable level. So lo and behold we were building up a huge amount of technical debt that turned out to be fatal for this iteration. What happened versus what should have happened?</p>
<h1></h1>
<h1>What happened?</h1>
<p>First a team of 15+ people is too big for a 15 minute standup each morning. 15 people x approximately 3 minutes each = 45 minutes. That’s a bit outside of 15 minutes and our team is actually larger than 15 people. So what did we do?</p>
<h2>Mistake #1</h2>
<p>We eliminated the 15 minute standup meetings in favor of a once weekly team meeting.</p>
<p>There were other forces involved in this decision – at any large company there are going to be a lot of meetings and the team was suffering from “meeting fatigue”. As the Scrum Master I didn’t want to add to it and I couldn’t figure out how to keep the meetings to 15 minutes regardless. This, of course, led to the second problem.</p>
<h2>Mistake #2</h2>
<p>In a larger team meeting, people are concerned that they will be looked on negatively if they keep reporting problems. So they don’t – or they under-report the magnitude of the problem.</p>
<p>Our iterations are one month long. This took me two months of looking back at the data to realize. Once I figured it out, I committed mistake #3.</p>
<h2>Mistake #3</h2>
<p>Private conversations regarding the problems people are experiencing do not allow the team to focus their energies on the problem at hand – it becomes an individual firefighting experience.</p>
<p>We have a lot of very talented people on our team. By having one on one meetings with individuals who were having problems I was getting right back into the problem that mistake #1 was designed to solve – the number of meetings skyrocketed as I had to deal with a whole bunch of problems one on one. In addition, I wasn’t able to bring the knowledge of the entire team to bear on a problem – I had to schedule more meetings to do investigation instead of just having everyone pitch in at once.</p>
<p>To be honest, some problems – specifically those that rely on external forces – can only be solved by escalation to management. And this lead to Mistake #4.</p>
<h2>Mistake #4</h2>
<p>I didn’t recognize the negative impact of the groups culture – which is, they were not rewarded for bringing problems to light. The team members felt management didn’t care – that they just wanted the problem solved but they didn’t want to know about it.</p>
<p>I am not management – I never will be. But because of my role team members felt that reporting problems to me was the same as reporting them to management. Which they were highly reluctant to do. This lead to Mistake #5.</p>
<h2>Mistake #5</h2>
<p>The team members had enough work in their queue that they could simply move on to something else. By not updating their status correctly I had no visibility of this.</p>
<p>What they essentially did was to try to handle the problem on their own, reported that everything was okay and on track when in fact that was far from the truth. They kept hoping that things would come back on track which they never did because no effective intervention ever took place. This effectively let us hide waste. There was one more problem that came out of all of this.</p>
<h2>Mistake #6</h2>
<p>We didn’t recognize quickly enough that the handoffs between team members were difficult and not working well at all.</p>
<p>In Scrum, one person is generally responsible for a user story from beginning to end – there is a concept of ownership. We tried to do that – as the Scrum Master I had the ownership. Why not a Product Owner you might ask. Good question – the team was reporting to five product owners at the same time with approximately 8 different statements of work per month. We are a core solutions team so we provide many different solutions for different customers on the same infrastructure. The reason for individual team members not taking ownership is because there were many coordination’s that had to occur to get a single piece of work done because of the specialized skillsets required to get the work done (we recognize the need to grow the skillsets but that can’t be done overnight). Essentially there was no coordination or collaboration in the handoffs of work or even the scheduling for when work would be done.</p>
<p>Those are the big six mistakes that I feel, in retrospect, that I made as a scrum master with this particular team. So, what did we do about it and how did it work? I can’t tell you how it worked because this is a work in progress and this is the first month we are doing this but I’ll post back with a follow up.</p>
<h1>Countermeasures we put in place</h1>
<h2>Solution #1 &#8211; Implement a Scrum of Scrums</h2>
<p>The immediate step was to appoint two additional Scrum Masters and “break” the team up into three autonomous teams (that is, each team is self contained – the mix of resources is such that each team has someone with the specialized skills needed to work a particular technology or type of solution).</p>
<p>This was done so that the Scrum Masters could more effectively deal with problems since they were only overseeing a small number of team members. And oversee is too strong a word, the Scrum Masters did perform some work as well. This freed up my time to do some more work since I was now the Scrum Master for only 6 people (including myself). This immediately led to another quick solution…</p>
<h2>Solution #2 – Reinstated the daily stand-ups</h2>
<p>The smaller teams allowed each Scrum Master the ability to hold daily standups that actually last only 15 minutes.</p>
<p>The standups are four days a week plus one team meeting that lasts one hour. The Scrum Masters also have a once a week coordination standup meeting. We ask the same three questions but reserve the right to extend the meeting to coordinate resources to meet special demands.</p>
<h2>Solution #3 – A “true” Kanban approach</h2>
<p>Individuals are assigned only one requirement at a time – the other requirements are held in an iteration backlog and are assigned to the generic resource of “Product Manager”. We do not discuss these items with the team members at all during our iteration planning meeting.</p>
<p>This had a whole bunch of ramifications. The first is that we would not commit to a full iterations worth of work – we created a monthly “roadmap” which said, “these are our goals for the month which we will try to reach”. The upside to this approach is that our iteration planning meetings went from 7 hours to 2 hours. Nice. The downside to this approach is that our team is currently really unable to make a commitment and stick to it. We had not been doing it for the last year so this is really no change from the status quo but it leads to another benefit:</p>
<p>When a problem is encountered it is surfaced and dealt with in a 24 hour period. What do I mean by this? Well, since team members are only allowed to work on one item at a time (a WIP limit of 1 as it were) when something goes wrong and they cannot fix it themselves we (the Scrum Masters) either find out about it in the next standup meeting or the team member contacts the Scrum Master as soon as the problem is recognized and it can be elevated to management ASAP. Work halts until the problem is solved. We then capture the resolution to these issues and turn around and drive them back into the process.</p>
<p><font color="#0000ff">Note that this is a work in progress and we’re still working out how to best drive the problem resolution back into the process so we avoid the problem in the future.</font></p>
<p>In addition, this alleviates some of the management role that I was playing because if team members do not escalate problems, they have to explain to their management why they were working on one tiny item with an estimate of 8 hours for a week. It also allows Scrum Masters, through empirical observation to detect problems earlier.</p>
<p><font color="#0000ff">Did I mention that our entire team is virtual and spread out all over the US?</font></p>
<h2>Solution #4 – Reward problems discovered</h2>
<p>The last item is to celebrate when a problem is found – the earlier the better. </p>
<p>We are using TFS for our work and created a special area for internally created issues. We encourage team members to report issues with the process as they find them. We review these issues each iteration and take one to improve upon as part of our work structure. It remains to be seen how effective this will be but it’s a start.</p>
<h1>Conclusion</h1>
<p>I debated whether or not to share this experience and in the end decided that there must be other teams running into these problems. I’ve been doing this for 5 years now (stricter focus on process and methodology that is) and I knew all about these problems and yet I let the politics of the organization suck me right back into things that I have coached other teams for years on how to avoid. Talk about feeling dumb. </p>
<p>And I had tried other things along the way but kept running into the same problems because I could not trust the team to do things in the way they needed to be done. While I still have that problem, I was also part of the problem because I was not explicit enough in explaining to the team why we needed things done.</p>
<p>Hopefully, this post will help other people who might be in the same situation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/09/when-iterative-development-causes-problems/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Constructing the iteration path in TFS</title>
		<link>http://blog.nwcadence.com/2011/07/constructing-the-iteration-path-in-tfs/</link>
		<comments>http://blog.nwcadence.com/2011/07/constructing-the-iteration-path-in-tfs/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 17:12:26 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[Visual Studio 2010 Team Foundation Server]]></category>
		<category><![CDATA[Visual Studio ALM]]></category>
		<category><![CDATA[TFS Databases]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/07/constructing-the-iteration-path-in-tfs/</guid>
		<description><![CDATA[I had a situation where I had to go directly into the database and determine the work items that fell into a certain category and where they showed up on my long range plan (which iteration). It turns out that &#8230; <a href="http://blog.nwcadence.com/2011/07/constructing-the-iteration-path-in-tfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I had a situation where I had to go directly into the database and determine the work items that fell into a certain category and where they showed up on my long range plan (which iteration). It turns out that the iteration path isn’t easily accessible directly in the database. There are a number of places you can look, but none are particularly satisfactory. </p>
<p>The various tables are TreeIDPairs, TreeNodes, xxTree and the views are TreePairs, TreePathParts, TreesAreUsed and TreesWereUsed. All of these views and tables have problems with them in one way or another. For example, the TreePairs view has columns called Name (all values are a ‘\’) and AboveID (all values are ‘0’) – not very useful. The TreesAreUsed contains the full Area Path but no Iteration Path. The xxTree has both but I preferred to not rely on that table (anything with an ‘xx’ to start the table name tells me it either is, or may be, deprecated). So I wrote my own query which I thought might be helpful to others.</p>
<pre class="brush: sql; ruler: true;">WITH FullIterationPath (ID, ParentID, Name, tlevel, hierarchy)
AS
(
    --Anchor definition
    SELECT    a.ID,
            a.ParentID,
            a.Name,
            0 as tlevel,
            a.Name as hierarchy
    FROM    TreeNodes a
    WHERE    ID = 439    --FEC Solution-Products Root
    UNION ALL
    --Recursive definition
    SELECT    a.ID,
            a.ParentID,
            a.Name,
            tlevel + 1 as tlevel,
            cast(hierarchy + '\' + a.Name as nvarchar(255)) as hierarchy
    FROM    TreeNodes a
    JOIN    FullIterationPath b ON b.ID = a.ParentID
)

SELECT    ID,
        ParentID,
        Name,
        tlevel,
        hierarchy
FROM    FullIterationPath
</pre>
<p>&nbsp;</p>
<p>You can also use this to construct the area path as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/07/constructing-the-iteration-path-in-tfs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>First release of the community build tools</title>
		<link>http://blog.nwcadence.com/2011/07/first-release-of-the-community-build-tools/</link>
		<comments>http://blog.nwcadence.com/2011/07/first-release-of-the-community-build-tools/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 13:29:49 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/07/first-release-of-the-community-build-tools/</guid>
		<description><![CDATA[Microsoft MVP’s and community contributors announced the first release of the TFS 2010 Work Flow community build activities and Actions. The plan is to ship every two to three months after another update next month (August). Download the tools from &#8230; <a href="http://blog.nwcadence.com/2011/07/first-release-of-the-community-build-tools/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Microsoft MVP’s and community contributors announced the first release of the TFS 2010 Work Flow community build activities and Actions. The plan is to ship every two to three months after another update next month (August). Download the tools from the <a href="http://tfsbuildextensions.codeplex.com/releases/view/67138">Community TFS Build Extensions</a> CodePlex site.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/07/first-release-of-the-community-build-tools/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TF51005: The query references a field that does not exist</title>
		<link>http://blog.nwcadence.com/2011/05/tf51005-the-query-references-a-field-that-does-not-exist/</link>
		<comments>http://blog.nwcadence.com/2011/05/tf51005-the-query-references-a-field-that-does-not-exist/#comments</comments>
		<pubDate>Tue, 24 May 2011 20:40:05 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Visual Studio Team Foundation Server]]></category>
		<category><![CDATA[TFS2010]]></category>
		<category><![CDATA[WIQL]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/05/tf51005-the-query-references-a-field-that-does-not-exist/</guid>
		<description><![CDATA[So, I was uploading a process template the other day and got this error and could not figure out the reason why for the life of me: 2011-05-24T11:14:55 &#124; Module: Work Item Tracking &#124; Thread: 29 &#124; The following query &#8230; <a href="http://blog.nwcadence.com/2011/05/tf51005-the-query-references-a-field-that-does-not-exist/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So, I was uploading a process template the other day and got this error and could not figure out the reason why for the life of me:</p>
<pre class="brush: text; gutter: true">2011-05-24T11:14:55 | Module: Work Item Tracking | Thread: 29 | The following query was found in C:\Users\xxxxxxx\AppData\Local\Temp\TPW_tmpA576.tmp\WorkItem Tracking\Queries\Iteration1Backlog.wiq: Iteration 1/Iteration Backlog
---begin Exception entry---
Time: 2011-05-24T11:14:55
Module: Engine
Event Description: TF30162: Task "Queries" from Group "WorkItemTracking" failed
Exception Type: Microsoft.TeamFoundation.Client.PcwException
Exception Message: Team Foundation Server encountered an error creating the query Iteration 1/Iteration Backlog from C:\Users\xxxxxxx\AppData\Local\Temp\TPW_tmpA576.tmp\WorkItem Tracking\Queries\Iteration1Backlog.wiq
Stack Trace:
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.Execute(ProjectCreationContext ctxt, XmlNode taskXml)
 at Microsoft.VisualStudio.TeamFoundation.ProjectCreationEngine.TaskExecutor.PerformTask(IProjectComponentCreator componentCreator, ProjectCreationContext context, XmlNode taskXml)
 at Microsoft.VisualStudio.TeamFoundation.ProjectCreationEngine.RunTask(Object taskObj)
--&nbsp;&nbsp; Inner Exception&nbsp;&nbsp; --
Exception Message: Team Foundation Server encountered an error creating the query Iteration 1/Iteration Backlog from C:\Users\xxxxxxx\AppData\Local\Temp\TPW_tmpA576.tmp\WorkItem Tracking\Queries\Iteration1Backlog.wiq (type WitPcwFatalException)
Exception Stack Trace:&nbsp;&nbsp;&nbsp; at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.WitPcwTask.QueryTask.AddQuery(String name, String fileName, String path, QueryFolder parent)
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.WitPcwTask.QueryTask.ParseQuery(XmlNode node, String parentPath, QueryFolder parent, Boolean execute)
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.WitPcwTask.QueryTask.ParseQueryFolder(XmlNode node, String parentPath, QueryFolder parent, Boolean execute)
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.WitPcwTask.QueryTask.Parse(Boolean execute)
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.WitPcwTask.QueryTask.Execute()
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.Parse(ContextWrapper wrapper, XmlNode taskXml, Boolean fExecute)
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.Execute(ProjectCreationContext ctxt, XmlNode taskXml)
Inner Exception Details:
Exception Message: TF51005: The query references a field that does not exist. The error is caused by «[System.TeamProject]». (type InvalidQueryTextException)
Exception Stack Trace:&nbsp;&nbsp;&nbsp; at Microsoft.TeamFoundation.WorkItemTracking.Client.StoredQuery.ValidateWiql(WorkItemStore store, String queryText)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.QueryDefinition.SetQueryTextWithValidation(String queryText)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.QueryDefinition..ctor(String name, String queryText, QueryFolder parent)
 at Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.WitPcwPlugin.PcwPluginComponentCreator.WitPcwTask.QueryTask.AddQuery(String name, String fileName, String path, QueryFolder parent)
Inner Exception Details:
Exception Message: TF51005: The query references a field that does not exist. (type SyntaxException)
Exception Stack Trace:&nbsp;&nbsp;&nbsp; at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.NodeFieldName.Bind(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.NodeCondition.Bind(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.Node.BindChildren(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.NodeAndOperator.Bind(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.Node.BindChildren(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.NodeAndOperator.Bind(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.Wiql.NodeSelect.Bind(IExternal e, NodeTableName tableContext, NodeFieldName fieldContext)
 at Microsoft.TeamFoundation.WorkItemTracking.Client.StoredQuery.ValidateWiql(WorkItemStore store, String queryText)
--- end Exception entry ---</pre>
<p>This is the query that the upload was failing on was the following:</p>
<pre class="brush: text; gutter: true">&nbsp; SELECT [System.Id],
 [System.WorkItemType],
 [System.Title],
 [xxxx.Finance.ActivityID],
 [System.State],
 [System.AssignedTo],
 [Microsoft.VSTS.Scheduling.RemainingWork],
 [Microsoft.VSTS.Scheduling.CompletedWork],
 [Microsoft.VSTS.Scheduling.StoryPoints],
 [Microsoft.VSTS.Common.StackRank],
 [Microsoft.VSTS.Common.Priority],
 [System.IterationPath],
 [System.AreaPath]
 FROM WorkItemLinks
 WHERE ([System.TeamProject] = @project
 AND&nbsp; [System.AreaPath] UNDER @project
 AND&nbsp; [System.IterationPath] UNDER '$$PROJECTNAME$$\Iteration 1'
 AND (
 [System.WorkItemType] = 'User Story'
 OR [System.WorkItemType] = 'Bug'
 OR [System.WorkItemType] = 'Task'
 OR [System.WorkItemType] = 'Compliance'
 )
 )
 AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
 AND [Target].[System.WorkItemType] = 'Task'
 ORDER BY [Microsoft.VSTS.Common.StackRank], [Microsoft.VSTS.Common.Priority]
 mode(Recursive)
</pre>
<p>The error, it turns out, is invalid and if you try to track it down you’ll be hopelessly disappointed. The problem is that this is a hierarchical query and because of copy and paste issues I inadvertently removed the “[Source]. value that is required before the names of the fields in the filter. The correct query should look like the following:</p>
<pre class="brush: text; gutter: true;highlight: [16,17,19,20,21,22];">SELECT [System.Id],
 [System.WorkItemType],
 [System.Title],
 [xxxx.Finance.ActivityID],
 [System.State],
 [System.AssignedTo],
 [Microsoft.VSTS.Scheduling.RemainingWork],
 [Microsoft.VSTS.Scheduling.CompletedWork],
 [Microsoft.VSTS.Scheduling.StoryPoints],
 [Microsoft.VSTS.Common.StackRank],
 [Microsoft.VSTS.Common.Priority],
 [System.IterationPath],
 [System.AreaPath]
 FROM WorkItemLinks
 WHERE ([Source].[System.TeamProject] = @project
 AND [Source].[System.AreaPath] UNDER @project
 AND&nbsp; [Source].[System.IterationPath] UNDER '$$PROJECTNAME$$\Iteration 1'
 AND (
 [Source].[System.WorkItemType] = 'User Story'
 OR [Source].[System.WorkItemType] = 'Bug'
 OR [Source].[System.WorkItemType] = 'Task'
 OR [Source].[System.WorkItemType] = 'Compliance'
 )
 )
 AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
 AND [Target].[System.WorkItemType] = 'Task'
 ORDER BY [Microsoft.VSTS.Common.StackRank], [Microsoft.VSTS.Common.Priority]
 mode(Recursive)</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/05/tf51005-the-query-references-a-field-that-does-not-exist/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TFS SP1 and Lab Management&#8211;wait for the QFE &#8211; FIXED</title>
		<link>http://blog.nwcadence.com/2011/04/tfs-sp1-and-lab-managementwait-for-the-qfe/</link>
		<comments>http://blog.nwcadence.com/2011/04/tfs-sp1-and-lab-managementwait-for-the-qfe/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 15:25:11 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Coded UI]]></category>
		<category><![CDATA[Microsoft Test Manager]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[SP1]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[Visual Studio Lab Management]]></category>
		<category><![CDATA[VS2010]]></category>
		<category><![CDATA[QFE]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/04/tfs-sp1-and-lab-managementwait-for-the-qfe/</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- Update: Microsoft released a QFE to address the issue outlined below. Here is a summary of the list of issues fixed by the QFE, to help you decide whether you should apply the QFE: Issue 1: When you run &#8230; <a href="http://blog.nwcadence.com/2011/04/tfs-sp1-and-lab-managementwait-for-the-qfe/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</font></p>
<p><font color="#ff0000">Update:</font> Microsoft released a QFE to address the issue outlined below.</p>
<p>Here is a summary of the list of issues fixed by the QFE, to help you decide whether you should apply the QFE:
<p><b>Issue 1: </b>When you run tests on the test agent that is installed on a computer that has Visual Studio 2010 SP1 installed, the tests may not run, and the following error message is logged:
<p>Attempted to access an unloaded AppDomain. (Exception from HRESULT: 0&#215;80131014)
<p><b></b>
<p><b>Issue 2: </b>When you run a playback of a Coded UI Test on certain Windows Presentation Foundation (WPF) controls, a <b>Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException</b> exception occurs, and then you receive the following error message:
<p>&#8220;Search may have failed at &#8216;<i>&lt;name&gt;</i>&#8216; <i>&lt;control type&gt;</i> as it may have virtualized children. If the control being searched is descendant of &#8216;<i>&lt;name&gt;</i>&#8216; <i>&lt;control type&gt;</i> then including it as the parent container may solve the problem.&#8221;
<p><b>Issue 3: </b>When you try to create a work item from the <b>Test Results</b> pane in Visual Studio 2010 after you connect to a Team Foundation Server (TFS) server, a <b>System.OutOfMemory</b> exception occurs, and the creation operation fails. This issue usually occurs if the TFS server has many builds.<br /><b></b>
<p><b>Issue 4: </b>When some tests run in a build operation, some builds that are queued in a TFS server stop responding. Additionally, the following error message is logged in the build log:
<p>Waiting to publish&#8230;<br />Publishing results of test run <i>&lt;build name&gt;</i> to http://<i>&lt;TFS server address&gt;</i>:8080/tfs/DefaultCollection&#8230;<br />The process cannot access the file &#8216;<i>&lt;directory&gt;</i>\data.coverage&#8217; because it is being used by another process.<br />Publish failed or canceled.
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
<p>As I was preparing for a demo of lab management the other day I did what we tell all of our customers to do – patch everything to latest service packs which of course included TFS SP1 on all of our machines. That includes the TFS server and all build servers and virtual lab environments.</p>
<p>By the way, using the lab prep tool you must manually install SP1 after the VM is prepped otherwise you get a few errors. But I digress.</p>
<p>After I patched everything I ran a test to verify that everything worked. I created a manual test, recorded it and turned it into a CodedUI test with validations. All went smoothly. Then I ran a lab build and got a failure. Looking at the automated test run (MTM &gt; Testing Center &gt; Test &gt; Analyze Test Runs I noticed the following log:</p>
<table border="1" cellspacing="0" cellpadding="0" width="1815">
<tbody>
<tr>
<td valign="top" width="10"><font size="2">ID</font></td>
<td valign="top" width="525"><font size="2">Date &amp; Time</font></td>
<td valign="top" width="1278"><font size="2">Message</font></td>
</tr>
<tr>
<td valign="top" width="10">1</td>
<td valign="top" width="525">04/06/2011 21:06:06</td>
<td valign="top" width="1278">Preparing to execute test run [17].</td>
</tr>
<tr>
<td valign="top" width="10">2</td>
<td valign="top" width="525">04/06/2011 21:06:06</td>
<td valign="top" width="1278">Test run is executed by Process: &#8216;QTController&#8217;, User: xxxx, Controller: xxxx, Environment: &#8216;LabDemo.All Hosts_Demo.Test Env&#8217;.</td>
</tr>
<tr>
<td valign="top" width="10">3 </td>
<td valign="top" width="525">04/06/2011 21:06:06 </td>
<td valign="top" width="1278">Loading the test settings for test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">4</td>
<td valign="top" width="525">04/06/2011 21:06:06 </td>
<td valign="top" width="1278">Adding test case [26] to test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">5 </td>
<td valign="top" width="525">04/06/2011 21:06:07 </td>
<td valign="top" width="1278">Executing the initializing plugin for test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">6 </td>
<td valign="top" width="525">04/06/2011 21:06:07 </td>
<td valign="top" width="1278">Changing the test run state from &#8216;Initializing&#8217; to &#8216;In Progress&#8217;. </td>
</tr>
<tr>
<td valign="top" width="10">7 </td>
<td valign="top" width="525">04/06/2011 21:06:07 </td>
<td valign="top" width="1278">Executing test run starting plugin for test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">8 </td>
<td valign="top" width="525">04/06/2011 21:06:07 </td>
<td valign="top" width="1278">Starting test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">9 </td>
<td valign="top" width="525">04/06/2011 21:06:07 </td>
<td valign="top" width="1278">Created a TMI run with ID [20507d65-c49b-442f-bb56-47c8fff0bc37] for test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">10 </td>
<td valign="top" width="525">04/06/2011 21:06:07 </td>
<td valign="top" width="1278">Queued the TMI run for test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">11 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">Updating the result of test case [26]. </td>
</tr>
<tr>
<td valign="top" width="10">12 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">The test results are saved successfully. </td>
</tr>
<tr>
<td valign="top" width="10">13 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">Executing the test run completed plugin for test run [17]. </td>
</tr>
<tr>
<td valign="top" width="10">14 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">Test run [17] completed. </td>
</tr>
<tr>
<td valign="top" width="10">15 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">The execution log reported by TMI for test run [17]: </td>
</tr>
<tr>
<td valign="top" width="10">16 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">Timestamp &#8217;4/7/2011 4:06:08 AM&#8217;; TestOutcome &#8216;Error&#8217;; Message &#8216;Attempted to access an unloaded appdomain. (Exception from HRESULT: 0&#215;80131014)&#8217;.</td>
</tr>
<tr>
<td valign="top" width="10">17 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">Timestamp &#8217;4/7/2011 4:06:08 AM&#8217;; TestOutcome &#8216;Warning&#8217;; Message &#8216;Test run xxxx 2011-04-06 21:06:07&#8242; could not be executed on controller xxxx. The test run was stopped or aborted while waiting for diagnostic data adapters to initialize.&#8217;. </td>
</tr>
<tr>
<td valign="top" width="10">18 </td>
<td valign="top" width="525">04/06/2011 21:06:09 </td>
<td valign="top" width="1278">Timestamp &#8217;4/7/2011 4:06:09 AM&#8217;; TestOutcome &#8216;Error&#8217;; Message &#8216;Attempted to access an unloaded appdomain. (Exception from HRESULT: 0&#215;80131014)&#8217;.</td>
</tr>
</tbody>
</table>
<p>You will note the last three items. Even though the test log shows that the test executed successfully, it did not. If you remove the diagnostic data adapters, the error on line 17 will be removed but the errors on 16 and 18 continue.</p>
<p>It turns out that when SP1 was released, it caused a problem with the test agent running in the lab environment. A simple solution for my needs was to uninstall SP1 from the machines in the lab environment and everything ran fine again – or so I thought. However, when you do this, IntelliTrace does not work because of the mismatch between the external test controller (patched to SP1) and the internal test agent (RTM). Or so I believe right now.</p>
<p>Microsoft has confirmed this to be a problem and they are actively working on a QFE for this. I will drop another post once this QFE is released.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/04/tfs-sp1-and-lab-managementwait-for-the-qfe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Screenshot on Test Failure</title>
		<link>http://blog.nwcadence.com/2011/03/screenshot-on-test-failure/</link>
		<comments>http://blog.nwcadence.com/2011/03/screenshot-on-test-failure/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 15:23:08 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Coded UI]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[Automated Testing]]></category>
		<category><![CDATA[Screen capture]]></category>
		<category><![CDATA[Test Failure]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/?p=274</guid>
		<description><![CDATA[Neeraja Reddy from the testing team at Microsoft just provided a pretty cool code snippet to perform a screencapture &#8211; programmatically of a failed test: ﻿﻿﻿[TestCleanup()] public void MyTestCleanup() {     if (TestContext.CurrentTestOutcome == UnitTestOutcome.Failed)     {         Image img &#8230; <a href="http://blog.nwcadence.com/2011/03/screenshot-on-test-failure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Neeraja Reddy from the testing team at Microsoft just provided a pretty cool code snippet to perform a screencapture &#8211; programmatically of a failed test:</p>
<p><code>﻿﻿﻿[TestCleanup()]<br />
public void MyTestCleanup()<br />
{<br />
    if (TestContext.CurrentTestOutcome == UnitTestOutcome.Failed)<br />
    {<br />
        Image img = UITestControl.Desktop.CaptureImage();<br />
        img.Save(Path.Combine(TestContext.TestResultsDirectory, "FailureSnapshot.png"));<br />
    }<br />
}</code></p>
<p><code>By placing this code in the TestCleanup method, whenever a test fails, the last screen of the test will be captured and saved in the test results directory which will automatically be captured at the end of the test run.</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/03/screenshot-on-test-failure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>First post back&#8211;read the latest books</title>
		<link>http://blog.nwcadence.com/2011/03/first-post-backread-the-latest-books/</link>
		<comments>http://blog.nwcadence.com/2011/03/first-post-backread-the-latest-books/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 15:16:04 +0000</pubDate>
		<dc:creator>Jeff Levinson</dc:creator>
				<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Visual Studio Team System]]></category>
		<category><![CDATA[VS2010]]></category>
		<category><![CDATA[Microsoft Test Manager]]></category>
		<category><![CDATA[MTM]]></category>
		<category><![CDATA[Team Foundation Server]]></category>

		<guid isPermaLink="false">http://blog.nwcadence.com/2011/03/first-post-backread-the-latest-books/</guid>
		<description><![CDATA[Okay, it’s been a very long while since I’ve blogged but one of my new co-works, Martin Hinshelwood, who won the ALM MVP of the year award (in part because he’s an awesome blogger). So, he re-did our blog site &#8230; <a href="http://blog.nwcadence.com/2011/03/first-post-backread-the-latest-books/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Okay, it’s been a very long while since I’ve blogged but one of my new co-works, Martin Hinshelwood, who won the ALM MVP of the year award (in part because he’s an awesome blogger). So, he re-did our blog site and now he says there is no excuse for me not to blog now.</p>
<p><a href="http://blog.nwcadence.com/wp-content/uploads/2011/03/Software-Testing-With-Visual-Studio-2010.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Software Testing With Visual Studio 2010" border="0" alt="Software Testing With Visual Studio 2010" src="http://blog.nwcadence.com/wp-content/uploads/2011/03/Software-Testing-With-Visual-Studio-2010_thumb.jpg" width="164" height="213"></a></p>
<p>So this is my first post back. My new book, “Software Testing with Visual Studio 2010” has been released. You can get it at <a href="http://www.amazon.com/Software-Testing-Visual-Microsoft-Development/dp/0321734483/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1300461174&amp;sr=1-1" target="_blank">Amazon</a>. One of the nuggets inside is a coupon from Northwest Cadence for discounted training classes.</p>
<p>Any feedback on the book is welcome.</p>
<p>In addition, the book <a href="http://www.amazon.com/Professional-Team-Foundation-Server-2010/dp/0470943327/ref=pd_sim_b_4" target="_blank">Professional Team Foundation Server 2010</a> has been released which contains a wealth of information. You can read more about that book and get it at Amazon also.</p>
<p>Expect to see a lot more posts and a lot more tips and tricks otherwise I will be hearing from Martin.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nwcadence.com/2011/03/first-post-backread-the-latest-books/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

