The Ramblings of Two Microsoft .NET Developers, TFS, and Visual Studio ALM Guys --- "Yes, we are both named Ed."

Custom Workflow Activities for TFS Build 2010



Not sure if you have seen this but some of the product managers on the TFS Build team at Microsoft have been putting together some great blog posts for how to create custom build activities and get a little background about Windows Workflow 4.0 and how it relates to TFS Build 2010.

CP_banner_111x111_gen.jpgAlso, we’ve been trying to put together a CodePlex project that’s designed to be a central location for contributions of Team Build 2010 customizations like custom activities, build process template customizations, build tools, etc.  You can take a look here:  http://teambuild2010contrib.codeplex.com/.  I’d encourage you to think about contributing any of your customizations to this project.  I know I’m personally hoping that it will be the “go-to” place for some of the common build activities that people need.  If you happen to have any feature requests for build activities, feel free to request one in the discussions and we’ll add it to the backlog:  http://teambuild2010contrib.codeplex.com/Thread/List.aspx

 

Thanks!

Ed Blankenship



TFS - Shared Resource Scope Activity in Team Build 2010



In Team Foundation Server 2010, you know have the ability to (easily) have multiple build agents on the same build server.  You were able to do this in TFS 2008 but it really wasn’t supported.  However, this raises an interesting challenge:  some processes and executables aren’t designed to handle being run simultaneously in multiple contexts on the same build machine.  Some applications can’t or have a difficult time handling concurrent access from multiple build servers at the same time as well.

I’ve listed a few of the scenarios that I can I remember off the top of my head:

  • Automated UI Testing – running automated UI tests from two different builds on the same build machine can lead into utter confusion!  :)  Mouse clicks going everywhere!  Let’s just stick to one set of automated UI tests running on an individual machine at the same time.
  • Running Automated Tests that Collect Code Coverage Information -  This was an interesting limitation that I found in the 2008 release.  It seems that the code coverage data collector did not support collecting from more than one automated testing run happening concurrently on the same machine.  (This might actually have been addressed in the 2010 release but I’m not quite sure.)
  • Dotfuscator – As far as I remember, this was another tool I remember having concurrency issues on the same build machine.
  • Symbol Server Store Access – This is something new to me and I’m not intimately familiar with all of the details behind this limitation.  It looks like you can not use the symbol server publishing tools against the same symbol server storage location at the same time even on multiple machines.  (See example below.)
  • Other Tools – I’m sure there are other build processes and tools we use that have limitations.  I’m sure many will be found out now that concurrent usage is more easily possible now.  Leave a comment below if you find any other examples and I’ll add them to this list.

Thankfully, the Team Build folks have provided us the ability to handle those specific scenarios where concurrent access isn’t supported as part of the build process.  That’s through the use of the Shared Resource Scope activity.  (Microsoft.TeamFoundation.Build.Workflow.Activities.SharedResourceScope)

Basically what it does is define a region of the build process that will only be allowed to be entered by one build across the entire Team Project Collection (even multiple build machines/agents) that share a matching resource name string.  It’s very similar to how we use the lock statement in C# or creating mutex objects.  (You might have to dust off those old computer science books from school.)

However, if you only want to limit the scope to a particular build server (instead of the entire Team Project Collection) then you can just put the build server machine name into the resource name string.  Don’t hardcode the machine name though and instead use one of the properties that are provided for you (in case the build doesn’t run on the same build machine every run because of the new agent pooling feature.)  Instead you could use an approach like this for the resource name expression:

=String.Format(“{0}_{1}”, BuildAgent.BuildServer, “AutomatedUITesting”)

Example in the Default Build Process Template in TFS 2010

Interestingly, there is an example usage of this activity and pattern available for us to look at in the default build process template file that’s available out of the box.  It’s usually located in version control here:  $/TeamProjectName/BuildProcessTemplates/DefaultTemplate.xaml.  Lower down in the default process, there is a section that attempt to publish the symbols to a symbol server storage location if you have specified it in your build definition properties.  My Assumption:  However, since only one build server can be publishing to a particular location at the same time, then a controlled scoped region is created based on the location property. (SourceAndSymbolServerSettings.SymbolStorePath)

That way you don’t have to worry about any build agent inside a Team Project Collection ever publishing to the same symbol server location at the same time.

Recently added:  It looks like this particular issue has already been discussed and that my assumption above is correct.  Adam blogs about it here.  Check it out.  How about that?

One more thing to note about symbol server publishing is the use of the SharedResourceScope activity in the build process template. The purpose is to make sure that concurrent instances of symstore.exe aren’t adding symbols at the same time, as the tool doesn’t support concurrent access to a symbol server share. SharedResourceScope uses the Team Foundation Server to control access to an arbitrarily named resource, in this case the share. That way, if multiple builds are trying to publish symbols at the same time, the requests are queued and only one will publish at a time, while the others wait (instead of fail due to file access errors or “step on each others’ toes”). PublishSymbols does not care about shared resource locks, but it is contained within the SharedResourceScope, so won’t be executed until the lock is appropriately acquired.

image 

image

Other Properties Available for SharedResourceScope Activity

As you can see above there are a few other properties available for you to configure for this activity:

  • MaxExecutionTime:  This is a TimeSpan that can be specified to limit the amount of time that a particular agent has control of the scope.  This is particularly useful for a resource scope that is going to be heavily used and can help you prevent a rogue build from eating up that resource indefinitely.  If the process inside the scope can’t complete before this time period has expired then an exception gets thrown.
  • MaxWaitTime:  This is a TimeSpan that can be specified to limit the amount of time to wait for control of the scope.  The example above limits the amount of waiting to one hour and if it doesn’t reserve the scope within that time period an exception gets thrown.

 

Thanks to Aaron Hallberg for all of the background information and existence of this activity!

 

Ed Blankenship

New Visual Studio 2010 Stadium Diagram for ALM Features



Just saw the new stadium diagram for the ALM features (Visual Studio “Team System”) in Visual Studio 2010 and Team Foundation Server 2010.  Enjoy!

 

Visual Studio 2010 ALM and TFS 2010 Stadium Diagram

Ed Blankenship

Posted in TFS | VSTS


Tip: Data Collectors Behave Differently Based on Test Pass or Fail – IntelliTrace and Test Impact



I learned a very important tip today about Microsoft Test & Lab Manager.  The data collectors that you can specify in your test runs (which by the way are extremely helpful) don’t necessarily attach data to the test run or bug all of the time.  It depends on the actual success of the test case during the test run.  Two example were mentioned today:Visual Studio Data Collectors in Microsoft Test and Lab Manager

  • IntelliTrace – The IntellIiTrace data collector will only output a trace log if the test case fails.
  • Test Impact Analysis – The Test Impact data collector will only publish test impact data back to Team Foundation Server if the test case succeeds.

So this leads us to the fact that we won’t ever see both of them together at the same time.  If you see an IntelliTrace trace log file for a test case then you won’t be getting any test impact data published to the server (and vice versa.)  Be sure to have both of them enabled though if you would like to get that type of data when the test case ends.  This also helps me in figuring out why I haven’t been getting impacted tests in my build reports and the handy view of “recommend tests” based on choosing a build in MTLM.  I need to actually pass some tests to get that data published back up to the server!

 

How about that?  Very handy to know.  The Visual Studio Quality Tools team has a blog that has been very active lately.  If you would like to learn more about Microsoft Test & Lab Manager head on over to the site.

Ed Blankenship

Posted in TFS | VSTS | VSTS Testing


User Display Name Changes and New Attribute for Work Item Type Definitions in TFS 2010



If you’ve had the responsibility of administering a TFS 2005 or TFS 2008 server you may have run in the “Display Name” problem before.  In March 2007, the TFS Work Item Tracking team put a great post together about what’s exactly going on and it’s available here:  http://blogs.msdn.com/teams_wit_tools/archive/2007/03/15/handling-display-name-changes-in-team-foundation-server.aspx

Basically, in TFS work item types, you can specify a field to hold the name of a user like in the Assigned To field.  The value that gets stored is basically just a string value of the person’s Display Name in Active Directory.  Not so bad except it’s not a strongly-typed object of a user but is just a string.  The problem comes when the user’s display name gets changed in Active Directory like when an employee gets married and take’s their spouse’s last name.  This causes a problem because all of the work items are still assigned to “Jane Doe” instead of “Jane NewLastName".  Even worse, “Jane Doe” is not even a valid user any longer so the work item becomes in an invalid state.  It’s kind of a maintenance nightmare.

Background:  Every hour an Active Directory synchronization job gets queued up and processes changes to Active Directory like new users, group membership changes, etc.  TFS keeps a cache of AD locally to help with operations across several subsystems.  For users, it caches certain information like the primary e-mail address, display name, domain/user name, SID, distinguished name, etc.

Thankfully there was something that helped us out available in the TFS Power Tools release called “TFS Users.”  You had to know about the display name change so working closely with your IT department was important.  Thankfully, it looks like TFS 2010 has added some abilities to notice those display name changes and proactively help you out within your system.  One of those changes is a new attribute in your work item type definitions that tells TFS which fields to automatically update.  I’ve bolded and underlined all of the changes from the previous default definition of the MSF Agile Bug.

<FIELD name="Assigned To" refname="System.AssignedTo" type="String" syncnamechanges="true" reportable="dimension">
  <VALIDUSER />
  <HELPTEXT>The person currently working on this bug</HELPTEXT>
</FIELD>
<FIELD name="Activated By" refname="Microsoft.VSTS.Common.ActivatedBy" type="String" syncnamechanges="true" reportable="dimension">
  <WHENNOTCHANGED field="System.State">
    <ALLOWEXISTINGVALUE />
    <READONLY />
  </WHENNOTCHANGED>
</FIELD>
<FIELD name="Changed By" refname="System.ChangedBy" type="String" syncnamechanges="true" reportable="dimension">
  <ALLOWEXISTINGVALUE />
  <VALIDUSER />
</FIELD>
<FIELD name="Closed By" refname="Microsoft.VSTS.Common.ClosedBy" type="String" syncnamechanges="true" reportable="dimension">
  <WHENNOTCHANGED field="System.State">
    <ALLOWEXISTINGVALUE />
    <READONLY />
  </WHENNOTCHANGED>
</FIELD>
<FIELD name="Created By" refname="System.CreatedBy" type="String" syncnamechanges="true" reportable="dimension" />
<FIELD name="Authorized As" refname="System.AuthorizedAs" type="String" syncnamechanges="true" />
<FIELD name="Resolved By" refname="Microsoft.VSTS.Common.ResolvedBy" type="String" syncnamechanges="true" reportable="dimension"> <WHENNOTCHANGED field="System.State"> <ALLOWEXISTINGVALUE /> <READONLY /> </WHENNOTCHANGED> </FIELD>

If you have custom process templates or you have modified the out of the box process templates, you’ll have to do some maintenance to your existing team projects to light up the new TFS 2010 features available including the ability to automatically sync the name changes from Active Directory.  If you are using the MSF Agile template you will want to update the following fields:

  • Assigned To
  • Activated By
  • Changed By
  • Closed By
  • Created By
  • Authorized As
  • Resolved By

For all other process templates, you’ll want to update the work item types that have fields that hold display name values.  There is actually some great information already available about this particular topic available in the MSDN Library:  http://msdn.microsoft.com/en-us/library/dd286562(VS.100).aspx

One of the other things we notice from the changes are the addition of the ALLOWEXISTINGVALUE rule to some of the fields.  This rule allows a previously entered value to still be valid even if that value is no longer a valid value.  In addition, there are also some state/transition rule changes for allowing the existing value.  Be sure to do a diff against your current work item type definition and the new MSF Agile work item type definitions to find all of the new changes.

For more information about managing work item type fields in TFS, see this MSDN Library Article:  http://msdn.microsoft.com/en-us/library/dd236909(VS.100).aspx

 

Ed Blankenship

TeamPrise Assets Purchased by Microsoft



I don’t know how many times I’ve heard this suggestion from people:  “Microsoft should just buy TeamPrise and make the Eclipse and non-Windows clients just part of the TFS product.”

That day is finally here.  Microsoft has purchased the TeamPrise-related assets from SourceGear.  More details about the acquisition announcement are available at Microsoft’s PressPass site and also the Pathways site for TeamPrise and Visual Studio.

Also, in addition to purchasing the TeamPrise assets, Microsoft has also hired a majority of the development team including, most notably, Martin Woodward who has been an absolutely fantastic part of the “Team System” MVP group.  It will be really sad to see Martin leave the group (as of today) but something tells me that he won’t be hiding :)  Congratulations to him and the entire team!

Now the one thing that i think people might be worried about will be what will happen to the future of the TeamPrise clients and will that development team be able to innovate as quickly as they had before?  I’m pretty sure the same “mission” will be in place and the team will be able to more closely leverage the other team members and assets within the Team Foundation Server product team.  As far as speed of innovation, that’s tough to tell.  Most other Microsoft products have tons of release requirements that slow them down such as localization, security reviews, etc.  All of which are great things but do end up slowing you down if you have to support those requirements.  Who knows if the TeamPrise development team will have to support them?  My guess is that if they’re going to be part of the “Visual Studio” product line that they will have the very similar if not the same requirements as the rest of the stack.  We will definitely see…  Another possible hang up is that Microsoft (specifically Developer Division) will have to learn how to sell & market a Java/non-Windows based product.  I can only imagine there will be some growing pains.

As far as licensing, right now you’ll need to still purchase the TeamPrise clients and get support from TeamPrise directly.  A Microsoft-branded “TeamPrise” client will become available with the 2010 release.  If you own a current license of the TeamPrise 3.3 software it looks like you’ll be upgraded to the new version when it is released.  Also, if you own a Visual Studio 2010 Ultimate with MSDN license at the time you’ll get access to download the new clients from MSDN Subscriber Downloads.  After the 2010 release, it looks like there will be a new SKU available to be able to purchase just the new clients that will also include a CAL for Team Foundation Server that will run somewhere around $799 retail.

I’m excited about the decision and it looks like both Martin and Brian Harry are as well.  I’m excited to see the platform broaden and truly support teams who have heterogeneous development environments!

 

Ed Blankenship



Test Case Migration Tool for TFS 2010 and Excel



Looks like there is a new migration tool being made available that helps you with importing test cases into TFS 2010 which now has Test Case Management as one of it’s new features.  It’s now available on CodePlex and works with the Beta 2 release.  Here’s some of the features available:

  • Imports Test case information (along with Test Steps) present in Excel into TCM/TFS server – Note: This is ONE way migration only
  • Provides a wizard based UI to run the tool one file at a time
  • Provides a command line support to run the tool in a batch mode
  • Allows you to save your selections/configurations into a mappings file to be reused later
  • Default mapping file that works across both Agile based and CMMI based projects are shipped along with the tool

http://tcmimport.codeplex.com/

I believe some systems allow you to export your test cases into Excel (HP Quality Center?) so this might be a good migration option.  You can also use the TFS 2010 SDK to build a custom migration utility that will import from another system without having to go through Excel at first.  Take a look at it and see if it might be helpful for you!

 

Ed Blankenship



Survey for Visual Studio and Team Foundation Server 2010 Beta 2



Over the past two weeks, I’ve really been hitting VS & TFS 2010 Beta 2 pretty hard.  I’ve found a few things and used Connect to report some suggestions & problems that I’ve found.  The product teams have been very active about responding to each of them and it’s been a very pleasant experience.

It looks like the product team wants even more feedback from everyone so if you could head over to the 2010 Beta 2 Survey and give your feedback, I know it will be greatly appreciated.  It’s pretty quick and easy with about 11 questions and about 3 optional free-fill questions that you can type longer responses in.

Visual Studio 2010 Beta 2 Logo Feedback

Ed Blankenship

Posted in Community | TFS | VSTS


What is Team Foundation Server and Why Would I Use It?



I get this question a lot.  People often wonder what Team Foundation Server (TFS) is and why would you use it?  I read a blog post earlier today from Jason Zander who has the best explanation of TFS that I know.  Also, he hits the nail on the head about the “well, can’t I just integrate all these other systems together?”  I love the analogy he uses (emphasis added:)

First let’s talk about “why TFS?”  The goal of Team Foundation Server is to create a central repository with a set of tools that make it really easy to collaborate between roles.  You could try to stitch together multiple disparate systems as follows:

image

In this case each system has its own storage, own set of identity for assets, own commands and tools.  Getting this going is like trying to hook up a set of custom stereo components:  you can pull it off but it’s going to be a lot of work and you are missing out on some stuff.

What I’d rather have is a system which can integrate these items together and then enable my default work flow through the system:

image

Even better, with TFS 2010 you get the opportunity to add even more pieces to the ALM puzzle under one roof:

image

A good Application Lifecycle Management (ALM) system has all of these systems integrated together and linked to provide you as much transparency, traceability, and metrics available about the relationships between the artifacts in those systems.  TFS is the best system available today that has all of that built together.

 

Ed Blankenship

Posted in TFS | VSTS

Visual Studio and Team Foundation Server 2010 Beta Available for Download



If you missed the news on Monday, Visual Studio 2010 and Team Foundation Server 2010 Beta 2 are available to download by both MSDN Subscribers and everyone else in the world!  This is really huge!  Beta 2 has already been a really solid release since I first downloaded and installed it.  The performance of the new WPF-based IDE has been dramatically improved from earlier builds.

Visual Studio

Visual Studio Extensibility

.NET Framework

Team Foundation Server

Test Products

Express

There was also a ton of news coming out ranging from Licensing and SKU changes, the launch data for the 2010 release (which is March 22, 2010,) what you get upgraded to if you have an active MSDN Subscription on a launch day, and a whole bunch of great things!  I’m really excited about this 2010 release wave.  There’s a ton of great stuff designed to make everyone’s life that much easier when they’re developing, testing, and building applications.

“Go-Live” License

One of the great things about the Beta 2 release is that Microsoft has announced that you can use Beta 2 in production environments and also to build production applications.  This “go-live” license includes .NET 4.0, Visual Studio 2010, and Team Foundation Server 2010.  Jeff Beehler blogged earlier about what “go-live” actually means so be sure to read through it closely.  Beta 2 is a very solid Visual Studio and TFS build.  However, there is always some risk with upgrading production environments using Beta software.  Be sure you understand the risks before taking the plunge. 

I’d suggest that if you are able to take the risk that you upgrade to both Visual Studio 2010 and TFS 2010 Beta 2 as soon as you can.  Remember that even if you don’t want to run .NET 4 for your production applications, you can still use Visual Studio 2010 to edit solutions/projects that target .NET 3.5, .NET 3.0, and .NET 2.0!

If you’re not able to take the risk to “go-live” during the Beta 2 timeframe then I would definitely suggest that you begin you testing & evaluation process now using the Beta 2 build.  You’re able to test out the upgrade process from your TFS 2008 databases and discover any possible hang-ups during the upgrade process. (I personally haven’t had any for the servers that I have upgraded but you never know!)  By getting your planning & testing done now, you’re in a better position to upgrade when TFS 2010 is released at the beginning of the year.  Another thing you could do to get ready is be sure that you’ve upgraded any prerequisites.  For example, even while you are running TFS 2008 you can upgrade your SQL Server instance to 2008 and upgrade your Windows SharePoint Services install to WSS 3.0.  Using SQL Server 2005 or WSS 2.0 is not supported in TFS 2010 so this will just make things a ton easier for you when it actually is time to upgrade.

Launch Date vs RTM

I mentioned about that the launch date was announced for March 22, 2010.  However, launch doesn’t necessarily mean Release to Manufacturing (RTM.)  Products usually RTM before launch day but there have been a few exceptions.  For example, SQL Server 2008 RTM’d much later than it’s launch date :)  Hopefully that never happens again.  What’s great about RTM is that if you’re an active MSDN subscriber, you usually get access to download the final build shortly after RTM based on past releases of products.  Launch day for Windows 7 is tomorrow but RTM was earlier this summer and MSDN Subscribers have had access since August 6, 2009.  (This does not mean in any way that there will be that much lead time for the Visual Studio 2010 release… I’d say it’s probably very unlikely!)

 

There’s really a lot of news to process so I’ll be posting some articles next week that goes into detail about several of them.  If there’s anything in particular that you’re not quite sure of, feel free to contact me or leave me a comment about something that needs more information.  In the meantime, please do help out by making this the best Visual Studio release ever.  If you find a bug or think a scenario could be improved (be reasonable) be sure to log it at the Microsoft Connect site.

Take care and have fun,

Ed Blankenship

Posted in TFS | VSTS