Visual Studio Team System

It’s been a while since I wrote about TFS although a post I made about it 5 years ago is still the most popular post on my blog (weird!), and I’d like to give a plug for a plug-in for TFS called Urban Turtle, that provides SCRUM tools for Agile development. 
The name seems like a play on Tortoise, which provides integration for SVN (a source-control system), and I have this vision of a turtle walking in a city with shades on and a boom-box on it’s shoulder.

The Urban Turtle website is at, and it has all the info and videos for you to get started.
Brian Harry of the TFS team has a good post about it here:

I am still exploring it, but it seems to have all the features you’d require in a SCRUM tool.

The SCRUM features are available in the Project Portal (website on SharePoint), for easy web-access to all team-members (including clients)

Creating Sprints, for example.



At work, we use TFS for source control and JIRA for SCRUM, but I don’t like the Printing possibilities of our JIRA setup, and assigning a Task to someone is not easy (because of a clunky interface with the name list).

Let’s see how things are in Urban Turtle land, and I’ll report back if I end up trying it.


Visual Studio 2008 has Unit testing support built into it, whereby you can define batches of unit tests and run them as part of your build process.

However, when I tried writing a test against an asmx Web Service, I could not get it to work using the .asmx (endpoint/page) request.

I used a web request style unit test:

[AspNetDevelopmentServerHost(“C:\\projects\\fooService”, “/”)]

public void GetFooTest()
      fooService svc = new fooService();
    Assert(blah, blah);

Unfortunately, this does not work and most likely you will get a 404.
I got this error when I ran my unit test:

Could not connect to the Web server for page ‘http://localhost:62534/fooService’. The remote server returned an error: (404) Not Found.. Check that the Web server is running and visible on the network and that the page specified exists.

I tried a few hacks like adding a default page to the service project and specifying that in the UrlToTest attribute, etc. but to no avail.

Finally, I resorted to just adding a Service Reference to the target and removed the three web attributes. This means that my service class is instantiated directly and not through a web service request but honestly I don’t care about the transport part. I’m mainly interested in testing functionality anyway.

Hope this post helps…

The Microsoft release of the web interface to Team System, the artist formerly known as Team Plain, is now out.
Details in Brian Harry’s log:

Apparently, it is not the “official” release. I have yet to install it and will post usage details later.

One of the rare but critical tasks of Configuration Management is the unlocking of items locked or checked out by someone else, like an ex-employee or a developer in the Bahamas while an emergency patch needs to be pushed out.

Unfortunately, the unlock action is not available in the context-menu or a GUI but needs to be executed from a command line. I wonder why it’s not in the GUI, granted deleted files and pending changes will not necessarily be visible in the GUI but at least the Undo should be available for visible items while the command line still provides the all-encompassing functionality.

The help was not very clear, so I’ll simplify the command for you.

There are 2 possible options for unlocking, viz. unlock or undo (if checked out for Edit).
The respective command to use is tf lock /lock:none or tf undo

The parameters in both cases are the same:

filename (in the help topic, this is the itemspec parameter)
This is the file you want to unlock

/workspace: [user’s workspace];[user name]
The user’s workspace needs to be figured out…by right-clicking the locked item and selecting Properties… and then the Status tab
The user name is the fully qualified user name, in the form: domain/user

/s:[server path]
This is the TFS server in question. Typically it’s http://servername:8080/

So, a sample command would be something like:
tf undo $/Apps/Dev/file1.aspx /workspace:”Dev station”;corp1\ra /s:http://altair:8080

(You run this is on a VS client, at the Visual Studio command prompt)


Another command I found useful during the process was tf status /user:Joe /s:server path, which essentially lists all files locked by Joe. I piped it to a text file (with >> C:\joe.locked.txt) to get a report.

[edit – changed colon to semicolon above. Thanks for the feedback]

In order to provide non-Visual Studio users (like business folks and clients) access to the Matrix, there are a few options available from Microsoft and third-parties.

The two I’ve tried and will talk a bit about are Team Foundation Client and TeamPlain. There are other tools out there too, but I haven’t looked at them and don’t plan to. (Sorry!)

The out-of-the-box option offered by Team System is the Team Foundation Client, which is essentially the TF Explorer plug-in. But this requires an install on the user’s machine which is always an overhead, since it involves IT folks and help-desk, etc.

To address that issue (I guess), Microsoft recently acquired a company called devBiz which has a product called TeamPlain to provide web access to TF. It is a pretty slick-looking website product that hooks into TF at the back-end.

The TFC install did not work for me “as-is” from the MSDN DVD because the paths expected by the setup program are different from the actual paths on disc. Doh! The workaround for this is to copy the install folder on a drive and copy/move required folders as you come across the “not found” error messages. I came across 3 errors. Does this mean better QA is required?

The TeamPlain install went pretty well but fyi, it does need an install of TFC on the web-server hosting TeamPlain. (I’m guessing TeamPlain is exploiting some APIs provided by some component in TFC.). I installed TeamPlain on the TF server itself and some companies might have a problem with that configuration because it might pose a security risk, and for that it is possible to configure a separate web-server to host TeamPlain.

The UI of TeamPlain is pretty slick but I think it is too cluttered and could be dumbed-down for business users or maybe specialized for different users. I also got some crazy errors at times while accessing Source Control (SOAP exceptions for Network Service while authenticating) but these could be due to our network glitches too.
One thing that bugged me, but I understand that it’s a transition period, was the web pages that opened up when I clicked the “Buy License”, etc. links. They just take you to a page announcing the buy-out. How about letting me know in a nutshell about licenses (if I need them anymore or whatever) first?

I am playing with it at the moment and will write about any issues I come across later.

An important factor in using TS effectively is having the right Team Project design and having a solid plan for Configuration Management.

It is important to understand major issues related to projects and TS features because a bad design can cripple your development process, and you might have to start over.

A good starting point is to know the scope of a Team Project and what it contains, and to understand how branching and merging works with this. There are many good articles with related information but I have not come across any advice on a solution.

So, I’ll try to explain what I designed and why and leave you to read about Team Projects and merging/branching.

As you may know, a Team Project is a container for items like source control, work-items, documents, etc. What these items could be is configurable at a higher level with Templates (there are 2 provided out of the box). Project reports, documents, etc. are available at a Team Project level. Most dev teams work on a number of products which are maintained over time and enhanced over release cycles, mostly with parallel development. Instinctively, one would think of having 1 Team Project per Product and also maybe 1 Team Project per release in order to manage a release tightly and eventually do some merging across releases, etc.

Unfortunately, there are limitations of not being able to move artifacts like Work Items, etc. across Team Projects and one has to consider the implications of those before running off and happily creating Team Projects. It is likely that different products share features or a part of the code-base and bug-fixes or enhancements need to be propogated across projects. In most realistic situations, a bug (read Work Item) slated for 1 release may get pushed to another. Given the limitations and requirements, the conclusion is to have 1 Team project for the entire Product line, assuming these Products are similar and share features and the code-base.

The downside of this is that the Team Project is one mother-lode and granularity is lost at a product or release level. I hope the limitations are addressed in future TS versions, but till then one might have to customize Reports and other things to get information at a Product/Release level. If you have other ideas or workarounds, please post them.

Given the assumption of using 1 Team Project, I will talk about Configuration Management (branching/merging, building, etc.) later…

One of the interesting projects I’m currently leading is deploying VSTS in-house and coming up with a plan to migrate to it and change our processes to eventually use it for our SDLC.

We have planned the move in several phases.

Phase 1 (underway) consists of deploying the infrastructure and system, migrating some legacy code from VSS and supporting new .NET 2.0 projects.

Phase 2 will include getting more groups on board (DBA, Claims processing, etc.) and incorporating a daily build for Continuous Integration.

Phase 3 will include extending the use to Product Management and Project Management and using work-items and portal features.

I will talk about the different pieces and activities in coming posts and hopefully that will help some of you out there.

Stay tuned…