Visual Studio 2010 At the Movies

Yesterday was the third (or fourth) annual ObjectSharp At The Movies event., For this particular version, we were able to celebrate the launch of Visual Studio 2010 and .NET 4.0 with a plethora of sessions covering VS (naturally) to ASP.NET, Silverlight, Sharepoint and TFS. All in all, it was a successful day that seemed to give the attendees what they came for. The slides that I used for my portion of the talk (which was an overview of VS2010 and .NET 4) can be found here. As always, feel free to ask questions. And, for those that missed it, we plan on doing it again next year. Just don’t know (yet) what the theme will be.

Branching & Merging in 2010

Branching & Merging has always been difficult. I have worked with teams who go out of their way not to branch the code. However sometimes it’s just necessary. Thanks to the Software Engineers at Microsoft it’s much easier now in TFS 2010 Source Control. I don’t mean easier (less key strokes) I mean easier because a Branch is now a first class citizen and there are ways to visualize what change sets have made it into which branches.

Let me show you what I mean.

Lets take a simple application like my calculator and create two branches of the code for the purpose of code promotion. Some source control tools have the concept of a promotion model. Which works kind of like static labels. Code can be promoted from development to QA and Production branches. Dev QA and Production act like labels but there is only ever one Dev, QA and Production promotion level at a time. We can use branching to achieve this. I’m not promoting this method as the way you should promote code, I’m just using it as an example for branching because I think it’s pretty easy to get your head around.

To start I’ll take my Calculator solution and create two branches in source control called QA and Prod. Right click on the project folder in Source control and select Branching and Merging | Branch…

image

On the branch dialog enter the name of the target branch.

image

Create two, one named QA and one named Prod. You will also be asked to create a local folder if you leave the option checked to store it on your local workspace. Don’t forget this operation is a local change and you will have to check in your changes to make it permanent.

Once all is complete you should have the following in Source control.

image

So here we have the Calculator main branch and of course the two promotion branches Prod and QA. Right click on Calculator and select Branching and Merging | View Hierarchy from the popup menu. This will give you a view of the relationships between branches.

image

Right click on the main branch and select Properties from the popup menu. The properties dialog contains information about the branch including relationships to other branches and permissions. This is where you can denote who has the rights to promote to a particular branch.

image

We can use the History View to visualize which branches a changeset has been promoted to. Here are the changesets checked into the my calculator.

image

If you right click on one of the changesets we can see how it has been promoted through the branches. Lets take this bug fix for example. I’ll write click on it and select Track Changeset from the popup menu.

Next we select which branches we want to look at.

image

Click on Visualize to see which branches this Changeset is in. From the Visualizer switch to Timeline Tracking to get this view.

image 

We can see that the changeset has been promoted to both branches. Therefore Changeset 13, 15 and 16 are the same.  Select a changeset and you will see the date and time the changeset was merged into the branch at the top highlights in yellow.

Now try this. Make a change in the base branch then open the visualizer and drag the base branch to one of the other branches this will merge the changeset into the branch you drop it on. Then check in your merge and refresh your visualizer.

Happy Branching and Merging.

VSTS Load Testing Deal of the Day: Why you need to buy a VS 2008 Load Agent before April 12th, 2010

There are important licensing changes happening imminently with VSTS as part of the transition from 2008 to 2010:

  • The current VSTS 2008 Test Edition can load test up to the limit of your machine. On a good day, this is 1000 users. That satisfies a lot of the cases where people need to do load testing. If it’s not, and you have multiple testers, you always all run load from your own machines, however you don’t get the same unified collection of statistics – that’s what the Load Agent & Controller software is for. It’s not a huge deal, and that is why most people don’t buy Load Agents.
  • If you did need centralized collection of statistics, you’d want to buy a number of load agents, one for each CPU, at least in the 2008 SKU. If you wanted to test 10K users, you’d probably want 10 licenses (at least).  But that is changing.
  • In 2010, load testing licensing is no longer done by the CPU, it’s done by the virtual users!
  • When you upgrade to VS 2010 Ultimate come April, your load testing ability changes to only 250 users from your workstation copy of Visual Studio 2010 Ultimate. If you want to test more, you’ll want load agents. The 2010 Load Agent SKU will give you 1000 virtual users. If your hardware is not up to snuff, or your web tests are intensive, you can install a single 2010 SKU on any number boxes, but you’re limited to a total of 1000 users per SKU that you purchase.

This all sounds rather terrible, but as part of the transition, MS is offering this:

If you have purchased a 2008 Load Agent with Software Assurance, as part of the upgrade to 2010, they will give you 5x1000 Virtual Users in the 2010 Load Agent SKU. Wow!

For your benefit of pricing, that means if you buy a 2008 Load Agent with SA today, for about $8,000 you will get 5000 users in 2010. That’s a very good deal. If you wait until after April 12th, you will no longer be able to buy the 2008 SKU and you’ll have to buy the 2010 SKU. At about $8,000 per 1000 users. So if you wanted to test 5000 users come April 12th and you didn’t take advantage to get in on this deal, it will cost you 5x$8000 = $40,000! I’d say that an 80% discount is pretty good – snap it up today.

If you need help purchasing a license prior to April 12th, drop me a note at bgervin @ objectsharp.com and I can hook you up.

Build Process Templates

Making a build script do exactly what you want is easier with 2010?

When setting up a build there has always been a separation of concerns.

  • The Build Definition
  • The Build Process

Creating the build definition is much like you are use to in 2008. Right click on the builds node in the Team Explorer and select New Build Definition. It’s no longer a modal wizard, however it’s the same of information.

  • Name and Description

  • How you want the build to be triggered

  • Working folders

  • Build Server and Drop Location

  • Retention Policy

However there is a big difference, and it relates to the separation of concerns I mentioned above. In 2008 you could create a project file, that you would later have to edit to get the build to do anything extra ordinary. When you hit create on the project file tab you would be launched into another wizard that allowed you to select the solution to build, the type of configuration you wanted to build, weather or not you wanted tests executed against the build and or static code analysis performed.

In 2010 the Process tab contains a type of property grid which allows you to change the configuration of the build. This grid is organized into 3 sections Required, Basic and Advanced, allowing you to specify the solutions to build, define the build number, how to deal with tests and code analysis, weather or not to perform test impact analysis or label the source at this build to name just a few.

Where is all this defined? How would I add extra functionality to my build? What if I wanted to replace a dev.config with a test.config or deploy extra files to the drop location?

At the top of this tab is a show details expander.

image 

After expanding this area you will  be able to select from a list of Build Process Templates.

image

Each template can contain different build processes. Beta2 comes with three templates to get you going. Click New to create your own by selecting a XAML file you have already created a placed in source control, or copy one of the existing templates as a starting point. You will notice also that you can store your Build Template anywhere in source control. In previous versions they only ever existed in one place under source control.

With 2010 you can create a build using the default template, which will likely do most, and more likely all of what you need it to do. In my experience most teams do not customize their project build files so for them the default template will suffice.

If you do want to make changes to your Build process you no longer have to edit a confusing poorly documented XML file. Instead when you open the build template in VS you will be presented with a Windows Workflow editor that allows you to edit your build process template.

image

So why did I start this Blog post with a question? Although it does appear to be easier to add functionality to your build process, For those of us who are Windows Workflow challenged there is some learning to do. The good news is it will be better documented and ultimately easier to find solutions.

Conflict Resolution in TFS 2010

The conflict resolution in previous versions of VSTS/TFS worked ok, but did not have the best user experience for the developer. When a conflict was detected on check in a modal dialogue was dispatched and the developer could resolve the conflicts from there. However getting to all the information you required to resolve the conflict was not at hand.  

In TFS 2010 when you attempt to check in a conflict VS behaves the way it does when you have violated a Check in Policy. One mark for consistency. You will get a warning message as seen below.

image

Then you will be redirected to the Pending Changes - Conflicts Tab

From the conflicts tab you can get at the information you need to help you resolve the conflict.

image

Compare – Compare the local file with the latest version in source control.

History – See the complete history of all changes to this file.

Annotate – Shows you the source file with change set information in the margin. Including who made the change and when.

image

Once you know what you need to do, click on the expander for a file and select how you want to resolve this conflict. You can AutoMerge, use the Merge Tool to edit the source, or simply select the server version or the local version.

image

Happy Merging!

Test Driven Development with VS 2010

Test Driven Development proposes you should: write the test, watch it fail, write the code, run the test to see it pass, refactor your code.

This is difficult when your code won’t compile because you haven’t created the method or even the class you are writing a test for. When you are in the middle of writing unit tests you don’t want to have to switch over to create a class with an empty method, it breaks your train of thought.

In VS 2008 MS introduced the Generate Method Stub  on the CTRL+. smart tag.

image

In 2010 they have taken this a step further. There are two new features I want to talk about here IntelliSense Suggestion Mode and Generate From Usage.

IntelliSense has two modes now Completion Mode and Suggestion Mode. You can toggle between these modes with the key sequence CTRL+ALT+SPACEBAR.

In completion mode if you entered the name of a type that does not exist, IntelliSense will make suggestions that match what you typed. I’m sure you have noticed that this can be annoying, with the wrong key stroke you end up with code you didn’t want.

image

By switching to Suggestion mode IntelliSense will display an edit control allowing you to continue typing even though there are no matches.

image

IntelliSense will even suggest this new class before it’s actually created.

image

Once you have completed your statement you can use the CTRL+. smart tag to generate this class.

image

Or generate a new type altogether, allowing you to select the project it should go in.

image

You can use this new feature to generate a method or property stub also a class, interface, struct or enum.

Reference Highlighting

I’m going to like the new Reference Highlighting in the 2010 code editor. This is like an in place version of the find all references feature.

To enable/disable this feature:

For C# Go to  Tools > Options >Text Editor > C# > Advanced
                        Check “Highlight references to symbol under cursor”

For VB Go to Tools > Options >Text Editor > Basic > VB Specific
                         Check “Enable highlighting of references and keywords”

Once enabled (which is the default in Beta 2) place your cursor on almost any symbol and all other references to that symbol will become highlighted.

image

You can navigate between the highlighted text using CRTL+SHIFT+UP ARROW or CRTL+SHIFT+DOWN ARROW

Symbols can include declarations, references, and pretty much anything else that Find All References would return. Including classes, objects, variables, methods, and properties.

In Visual Basic, this also includes: Select Case, Case, End Select, If, Then, ElseIf, and End If.

For C# code, reference highlighting is not provided for the switch and if constructions, but is provided for other symbols.

Gated Check-in Build Trigger

VS 2010 has a new feature that allows a developer to validate that their code change will merge and successfully build with the current code base on the server before ever checking it in. It’s called the gated Check-in.

How it works

Create a build type that uses Gated Check-in as it’s trigger for starting the build.

image

Take the code you want to check in and shelve it.

Then when you queue the build you can specify the Shelve set to be merged with the source from the server. You can also have the build complete your check in if the build is successful.

image

This should help to diminish the number of broken builds on the server.

Extending VS 2010

In VS 2010 MS has made adding extensions very very easy using the Extension Manager.

First you may want to change one option under Environment > Extension Manager.

You want to Load Per User Extensions when running as administrator.

image

Once you do that, from the Tools menu open the Extension Manager. The Extension manager shows you what extensions you already have installed, and gives you the ability to uninstall or disable them.

image

So where do I get extensions from? The extension manager helps here too. Select the Online Gallery and you will be able to pick from a list of published VS extensions. You can filter to just see Controls, Templates or Tools. Sorting is a handy way to see what is popular by rating or most downloaded.

image

Select the extension you want and click Download. You will be prompted to install the package. Now just restart Visual Studio and enjoy your new VS extension. :)

Code Coverage in VS2010

VThis took me a few minutes to find. Perhaps I can save someone else those few minutes.

To turn on Code Coverage locally you need to edit what used to be the <Local>.TestRunConfig , which is now called the <Local>.TestSettings.

The section is not called Code Coverage anymore it’s under Data and Diagnostics. There are a bunch of  tools you can turn on from here including:

image

Select Code Coverage, and the configure button at the top will become enabled.

image

To select the DLL’s for code coverage click the Configure button. You will get this window, I think you know what to do from here.

image