My $0.02: Small companies need Team System (VSTS) just as much as big companies.

As you may have noticed, the world economy has been a little under the weather lately.  Lately, I’ve been thinking about how the economy fits together with VSTS’s mission.  Specifically how, as Brian Randell says, “Team System is all about increasing the predictability of success”. 

Team System has been pitched more at large- and medium-sized companies rather than the small shops.  This makes sense because companies like that deal with larger applications, have more developers, and therefore are more likely to understand the need and want to follow some kind of real software development process (aka. SDLC best practices.) 

For argument, let’s say that one of these big companies didn’t bother with something like VSTS and/or didn’t follow any SDLC best practices.  What happens?  Well, they could lose or waste a couple million dollars on their software initiatives. 

If you’re a giant company and you screw up your project and burn a couple million, it’s not great but it’s probably not the end of the company. 

Now let’s say that you’re a smaller company or perhaps a startup.  You’ve got $0.5 million in funding and you figure that your line-of-business application is going to cost you something pretty close to $0.5 million to write.  What happens if you screw it up?  What happens if you go over budget?  It could potentially mean the end of the company.  At a minimum, we’re talking about a world of pain. 

So, who needs streamlined software development best practices more?  The huge company or the little company? 

I think it’s the little company.  If you don’t “increase the predictability of success”, you’re increasing your risk and increasing the chance that your company will fail.

$0.02,
-Ben

New Features in Visual Studio Team System 2010 (VSTS2010) Web Tests

I’ve been starting to research Visual Studio Team System 2010 (VSTS2010) and Team Foundation Server 2010 (TFS2010) so that I can update the training materials for my class.  Part of this process is going through the features that are in VSTS2008 and finding the places that they are different. 

Last week, I was helping a client with some problems they were having with VSTS2008 Web Tests and Load Tests so that inspired me to look at web testing in VSTS2010.  Not surprisingly, there are some cool new features.

New Request Types

One of the limitations of VSTS2008 Web Tests has been the difficultly changing the flow of your running web tests based on conditional logic.  If you needed to do this as part of your 2008 web tests, your only option was to go with “coded” web tests and then hack the generated code to do what you wanted.

VSTS2010 Web Tests introduce two new “request” operations that make this much more easy: Conditional and Loop.

NewRequestTypes

Conditional is roughly equivalent to an “if” statement in C# and a Loop is roughly equivalent to a C# “while”. 

AddConditionalRule

For both the Loop and Conditional, you specify the first and last item in the condition/loop and this sets up the steps that belong to the conditional/loop. From there you’ll need to create “rules” which tell the web test runner what to do and what to check – basically, these rules define the decision logic.  The out-of-the-box rules for Conditionals are:

  • Context Parameter Existence
  • Cookie Existence
  • Cookie Value Comparison
  • Last Request Outcome
  • Last Response Code
  • Numerical Comparison
  • Probability Rule
  • String Comparison

ConditionTypesInALoop

The out-of-the-box rules for Loops are similar to the Conditionals except that “Last Response Outcome” and “Last Response Code” are removed and “For Loop” and “Counting Loop” are added.

Here’s a screenshot of what a completed Conditional looks like:

ConditionSample

A nice added feature is that you can nest loops and conditions within other loops and conditions so that you can build up some pretty complicated logic.  

AddItemsToCondition

 

Refactoring

Another new feature is the ability to refactor your recorded web tests.  In VSTS2008, if you wanted to take steps from an existing web test and put them into another test so that you could re-use them, you had to either edit the underlying XML for the *.webtest file or re-record those steps of the test.  With VSTS2010, you can right-click your web test and then choose “Extract Web Test…”

ExtractWebTest

Then from the Extract Web Test dialog, you tell it what you want to name the extracted test and specify the start and ending steps you want to extract. 

ExtractWebTest_dialog

New Validation & Extraction Rules

If you’re writing an ASP.NET application, you’re probably going to use a Label control or a list control (DropDownList, RadioButtonList, ListBox, etc) now and again.  That’s actually kind of an understatement – you’re going to use those controls all the time and, if you’re web testing, you’ll need to validate them.  In VSTS2008, if you wanted to Validate or Extract one of those controls, you had to write a custom Validation or Extraction Rule.  Writing a custom rule isn’t all that hard but not being able to work with those common web control types out-of-the box was definitely a hole in the product. 

Well, this has been fixed in VSTS2010.  (Yay!)  Now we’ll have two new Validation rules: Tag Inner Text and Selected Option.  Tag Inner Text allows you to get at <span> tags (or any tag that you can match with attributes) and Selected Option allows you to validate List controls.  Both of these rules also have corresponding Extraction Rules that allow you to not just check if a value is correct on your page but also extract the values so that you can use them in subsequent requests, Loops, and Conditionals via test context variables.

AddValidationRule

-Ben

 

-- Looking for help adopting Visual Studio Team System & Team Foundation Server?  Problems installing?  Need training?  Want someone to coach your team to make sure you’re getting the most out of VSTS?  Starting to think about your VSTS2010/TFS2010 upgrade strategy?  Drop us a line via http://www.benday.com or http://blog.benday.com/contact.aspx

Microsoft deprecates its ADO.NET Oracle provider (System.Data.OracleProvider)

I found out today that Microsoft has decided to deprecate its provider for Oracle

In a related note, I got quoted in Jeffery Schwartz’s news article in Visual Studio Magazine about this new development. 

-Ben

Beantown .NET meeting on 6/4/2009: John Payne, "The Web Service Factory & WCF"

Beantown .NET is meeting this Thursday, 6/4/2009.  For this month’s meeting we have John Payne from Cheapflights, Inc coming to talk about using the Web Service Factory pattern in your WCF applications. 

As always, our meeting is open to everyone so bring your friends and co-workers. It is not required to RSVP for our meetings but if you know you’re coming, please RSVP by 3pm on 6/4 to help speed your way through building security and give us an idea how much pizza to order.  Click here to RSVP.

Future Beantown meetings:

· July – No meeting
· August – No meeting
· September 10 – Richard Hale Shaw
· October 1 – TBA

-Ben

 

Title: The Web Service Factory Pattern & WCF: What is it and how can it help?

When: Thursday, 6/4/09, 6p – 8p

Where:

Microsoft NERD

1 Memorial Drive

Cambridge, MA

Directions: http://microsoftcambridge.com/About/Directions/tabid/89/Default.aspx

Parking: Paid parking is available in 1 Memorial Drive. 

Abstract:

Basic level coverage of WCF and the Web service factory pattern and how I found it makes understanding WCF easier as well as running through the pattern and covering some of the issues and tips we found with the pattern.

Speaker:

John Payne

Cheapflights, Inc. - www.cheapflights.com

Team Suite 2008 Developer Machine Install

For the last few days, I’ve been working on building student machines for the Visual Studio Team System / Team Foundation Server class that I’m teaching next week in Cambridge.  The complexity of the install reminded me of the confusion that one of my recent clients had trying to pull together all their licenses, ISO images, and DVDs to get their developers moving.  The setup is not hard but there are a lot of pieces that need to be installed to make a Team System developer machine.  Hopefully, this blog post will help make your developer workstation setup go a little more smoothly.

Here’s the installation order for a VSTS2008 developer box:

1. Visual Studio Team Suite 2008 (or other 2008 Team Edition)
2. SQL Server 2008 Developer Edition
3. Office 2007
4. Microsoft Project 2007
5. Team Explorer 2008
6. Visual Studio Team System Power Tools for 2008
7. Visual Studio Team Suite Service Pack 1
8. Visual Studio Developer Edition GDR R2
9. SQL Server 2008 Service Pack 1

Now let’s say that you want to write code with VSTS2008 but you also need to do work with SQL Server 2005.  For example, you need to work with SQL Server 2005 Reporting Services, SQL Server 2005 Analysis Services, and SQL Server 2005 Integration Services code.  Well, you’ll need to install the Reporting Services and Business Intelligence stuff from the SQL2005 installer and then you’ll need to install the TFS2005 Team Explorer client.  (Don’t worry – the TFS2005 client can talk to TFS2008.)

Just to make it extra interesting, let’s also say that you want to use Team Foundation Server Source Control from SQL Server 2005 Management Studio.  Well, now you’ll need the TFS MSSCCI 2005 Provider.

(See?  It’s gets complicated pretty fast.)

Here’s the installation order for a VSTS2008 + SQL Server 2005 Business Intelligence developer box:

1. SQL Server 2005 Developer Edition (with all the Business Intelligence and client bits)
2. SQL Server 2005 Service Pack 3
3. Office 2007
4. Microsoft Project 2007
5. Team Explorer 2005
6. Team Foundation Server MSSCCI 2005 Provider
7. Team Foundation Server Power Tools for 2005
8. Visual Studio Team Suite 2005 Service Pack 1
9. Visual Studio Team Suite 2008 (or other 2008 Team Edition)
10. SQL Server 2008 Developer Edition
11. Team Explorer 2008
12. Visual Studio Team System Power Tools for 2008
13. Visual Studio Team Suite Service Pack 1
14. Visual Studio Developer Edition GDR R2
15. SQL Server 2008 Service Pack 1

Here are the links to download the bits.

-Ben


Looking for help setting up Team Foundation Server?  Need a project mentor for your Visual Studio Team System & Team Foundation Server project?  Want some training on Team System?  Drop us a line via www.benday.com and don’t forget to check out our public training schedule.

5/7/2009: Beantown .NET Meeting at Microsoft NERD

The Beantown .NET user group is meeting this week at Microsoft’s Cambridge office.

Beantown .NET: "What has Mono done for .NET developers lately?", Joseph Hill
5/7/2009, 6p to 8p

As always, our meetings are open to everyone so bring your friends and co-workers. It is not required to RSVP for our meetings but if you know you’re coming, please RSVP by 3pm on the day of the meeting to help speed your way through building security and give us an idea how much pizza to order. Click here to RSVP.

Future Beantown meetings:
· June 4 – “WCF & The Web Service Factory Pattern”, John Payne

Title: What has Mono done for .NET developers lately?

When: Thursday, 5/7/09, 6p – 8p

Where:

Microsoft NERD
1 Memorial Drive
Cambridge, MA

Directions: http://microsoftcambridge.com/About/Directions/tabid/89/Default.aspx

Parking: Paid parking is available in 1 Memorial Drive. 

Abstract:

Mono is an open-source, cross-platform implementation of the .NET framework based on the ECMA standards for C# and the Common Language Infrastructure. With Mono, users can run C# and Visual Basic applications written and compiled in Visual Studio on Windows, Linux, and Mac OS X.  This talk will demonstrate how to take advantage of some of the newest features of Mono, including improved support for developing for Mono with Visual Studio, and support for ASP.NET MVC.  We’ll also explore new deployment opportunities Mono brings to .NET developers, including support for building hardware and software appliances on Linux.

Bio:

Joseph Hill, Novell

Joseph has been active in the Mono community since 2003, and is a contributor to several open source ASP.NET projects.  Professionally, he consulted on development  of .NET applications in financial services, supply chain management, and other industries.  In 2008, Joseph joined Novell to serve as the Product Manager for Mono.

Lots of missing disk space on C: courtesy of Volume Shadow Copy Service

I've been noticing lately that the amount of disk space on my C drive was below 10 gigabytes.  This struck me as odd because I recently upgraded my 160GB hard drive to a 300GB hard drive and it wasn't like I'd suddenly started carrying around my entire DVD collection on my C: or anything. 

This morning it was down to 7GB free.  I ran TreeSize Free to see what was going on.  I cleaned up about 10gigs of old junk and then I noticed that TreeSize was telling me that all my files totaled up to only 124GB.  What?! 

Some googling around about Vista and missing disk space and I found this post about the Volume Shadow Copy Service (VSS).

I ran "vssadmin list shadowstorage" and found that VSS was using 142.712 gigs of storage.  ("Well, there's yur problem!" -A. Savage) 

image

Then I ran "vssadmin resize shadowstorage /For=C: /On=C: /MaxSize=5GB" and VOILA!  I've got 185GB of free space now.

image

-Ben

First meeting of the Team System Boston User Group, 5/6/2009

(drumroll)

After much discussion, Michael Ruminer and I are going to be starting up the Team System Boston User Group.  Our first meeting is going to be on May 6th at Microsoft NERD.

For our initial meeting, I'll be talking about using Visual Studio Team System Web Tests to test your running ASP.NET applications.

Our meeting is open to everyone so bring your friends and co-workers. It is not required to RSVP for our meetings but if you know you’re coming, Click here to RSVP to help speed your way through building security.

Title: ASP.NET Application Testing with VSTS Web Tests
When: Wednesday, 5/6/09, 6p – 8p
Where:
Microsoft NERD
1 Memorial Drive
Cambridge, MA

Directions: http://microsoftcambridge.com/About/Directions/tabid/89/Default.aspx

Parking: Paid parking is available in 1 Memorial Drive. 

Abstract:

It’s hopeless. There’s no automated way to test your web apps. The only option is to test them by hand, right?

Well, no. Visual Studio Team System has Web Tests that let you run and validate different paths through your ASP.NET applications. Each test simulates a user performing a bunch of actions across a series of web pages and allows you to check the response to verify that your app is going what you expect. Once you have your Web Tests defined you assemble them together to create Load Tests. Load Tests simulate hundreds of users hitting your web app in order to validate how well -- or not so well -- your application performs under stress.

In this session, Ben will show you how to write complex Web Tests using Validation Rules, Extraction Rules, and Web Test Plugins. He’ll also cover how to make your tests data-driven using an external data source so you’ll get better tests with less code. Then we’ll move on to creating Load Tests from our Web Tests. Then Ben will wrap up the session by showing you how to make it all work inside of a Team Build.

Bio:
Benjamin Day is a consultant specializing in the design and development of applications with Visual Studio Team System.  He is a Microsoft MVP for Visual Studio Team System, conference speaker, and leads the Beantown.NET User Group.  Ben also provides consulting and training on Visual Studio Team System and Team Foundation Server and is a member of the Visual Studio Team System Customer Advisory Council at Microsoft.  When not developing software, Ben plays piano with a Boston-based jazz trio, likes to hang out with his wife and cats, and is a passionate restaurant, food, beer and wine nerd. 

DBPro 2008 GDR: Deploy Database & Run Database Unit Tests from Team Build

I've been digging in to the GDR release of Visual Studio Team System Database Edition (aka. DBPro GDR, "data dude") this week.  One of the things that I wanted to see is whether GDR projects were easier to use from inside a Team Foundation Server 2008 (TFS2008) Team Build.  (Answer: yes, a little easier.) 

What I wanted to do was to first deploy the database, run a database data generation plan, and then run my database unit tests.  One of the difficulties is related to file paths -- when you run from Visual Studio the paths are one way and when you run the build from Team Build the paths are another way.  (For more information, check out this blog post.)  Another difficulty is how the GDR edition of DBPro does deployments -- you now have the option to either deploy only to a .sql file or to deploy to a .sql file and then write the changes into a database. 

Buck Hodges has a great post describing how to get around these and other problems.  I wanted to take what Buck describes and turn it into:

  1. something I could re-use
  2. something that is easy to understand (No offense, Buck.  That post pretty much melts my brain.)
  3. something that would allow me to keep my Desktop build settings separate from my Team Build settings for the DB Pro GDR project

In order to do this, I created two Team Build Tasks: PrepareDatabaseProjectForDeploy and PrepareAppConfigForDatabaseUnitTests.  Here's a sample of using these tasks from the Team Build "BeforeTest" target.

<Target Name="BeforeTest">
    <PrepareDatabaseProjectForDeploy
        PathToProjectFile="$(SolutionRoot)\Gdr20090410.Database\Gdr20090410.Database.dbproj"
        BuildConfiguration="Debug"
        TargetDatabaseName="GdrDeployedFromBuild"
        ConnectionString="Data Source=.;User ID=sa;Password=Sa_password;Pooling=False"
        DeployToDatabase="True" />

    <MSBuild
      Projects="$(SolutionRoot)\Gdr20090410.Database\Gdr20090410.Database.dbproj"
      Properties="Configuration=Debug;OutDir=$(SolutionRoot)\..\binaries\Debug\;OutPath=$(SolutionRoot)\..\binaries\sql" Targets="Deploy" />

    <PrepareAppConfigForDatabaseUnitTests
        PathToAppConfig="$(OutDir)\Gdr20090310.DatabaseUnitTests.dll.config"
        UpdateDatabaseProjectPath="True"
        UpdateDataGenerationPlanPath="True"
        UpdateExecutionConnectionString="True"
        UpdatePrivilegedConnectionString="True"
        PathToProjectFile="$(SolutionRoot)\Gdr20090410.Database\Gdr20090410.Database.dbproj"
        PathToDataGenerationPlan="$(SolutionRoot)\Gdr20090410.Database\Data Generation Plans\DataGenerationPlan1.dgen"
        ExecutionConnectionString="Data Source=.;User ID=sa;Password=Sa_password;Pooling=False;Initial Catalog=GdrDeployedFromBuild"
        PrivilegedConnectionString="Data Source=.;User ID=sa;Password=Sa_password;Pooling=False;Initial Catalog=GdrDeployedFromBuild" />
</Target>

PrepareDatabaseProjectForDeploy sets up all the required settings to deploy your database project from Team Build.  NOTE: This task just prepares the settings.  In order to actually do the deploy you need to make a call to MSBuild (see above). 

  • PathToProjectFile -- path to your DBPro project file (*.dbproj)
  • BuildConfiguration -- what kind of build are you running?  Debug, Release, etc.
  • TargetDatabaseName -- what is the name of the database that you want to deploy to
  • ConnectionString -- the connection string to connect to the database service
  • DeployToDatabase -- if this value is True, the deploy action will create a .sql schema create script and then execute the deploy against a real database.  If the value is False, then only the .sql file will be created. 

PrepareAppConfigForDatabaseUnitTests updates all settings in your database unit test project's .config file so that you can run your database data generation plans and run your database unit tests. 

  • PathToAppConfig -- the path to the config file for your unit tests.  This is going to be assembly_name.dll.config file in the Binaries directory NOT the app.config file in the Sources directory.
  • PathToProjectFile -- the path to your DBPro GDR project file
  • PathToDataGenerationPlan -- the path to your data generation plan (*.dgen)
  • ExecutionConnectionString -- connection string for executing the unit tests
  • PrivilegedConnectionString -- connection string for executing the dgen plan and, if configured in your unit test project, the optional database deploy
  • UpdateDatabaseProjectPath -- true = override the value, false = use the default value from app.config
  • UpdateDataGenerationPlanPath -- true = override the value, false = use the default value from app.config
  • UpdateExecutionConnectionString -- true = override the value, false = use the default value from app.config
  • UpdatePrivilegedConnectionString -- true = override the value, false = use the default value from app.config

 

Here's a link to download the code for the Team Build Tasks, a sample Visual Studio Team System DBPro 2008 GDR project, and a sample Team Build script.  The sample Team Build script assumes that you've deployed the MSBuild tasks to C:\Program Files (x86)\MSBuild\BendayDatabaseBuild on your build server. 

Enjoy.

-Ben

 

-- Looking for Team Foundation Server or Visual Studio Team System training or mentoring?  Need some help doing the Team Foundation Server installation or maybe some customizations to make TFS work smoothly within your development process?  Check out our VSTS/TFS Training Course outline here or contact me via http://www.benday.com.

Rocky Lhotka @ Beantown .NET User Group, 4/29/2009

The Beantown .NET User Group is going to be doing a special event on Wednesday, 4/29/09.  We’ve got Rocky Lhotka from Magenic coming to talk about user interface design patterns and how they relate to n-tier & business object architectures.

As always, our meeting is open to everyone so bring your friends and co-workers. It is not required to RSVP for our meetings but if you know you’re coming, Click here to RSVP to help speed your way through building security and give us an idea how much pizza to order.

Future meetings:

· May 7 – Joseph Hill, Mono
· June 4 – TBA

-Ben

Title: CSLA .NET as the 'M' in MVC/MVP/MVVM
When: Wednesday, 4/29/09, 6p – 8p
Where:
Microsoft NERD
1 Memorial Drive
Cambridge, MA

Directions: http://microsoftcambridge.com/About/Directions/tabid/89/Default.aspx

Parking: Paid parking is available in 1 Memorial Drive. 

Abstract:
Building a UI today can feel like wading into alphabet soup with MVC, MVP, MVVM and numerous other consonant-heavy acronyms. Nearly all of these patterns have one thing in common: the letter ‘M’, which stands for “Model”. The Model is the part of the application responsible for things like business and data processing, and is arguably the core of the application.

CSLA .NET is one of the most widely used development frameworks on the .NET and Silverlight platforms. The primary focus of CSLA .NET is to help in the creation of a rich object-oriented business layer that expresses the needs of the business domain model. In other words, CSLA .NET is all about helping create a powerful object model for an application. It should come as no surprise then, that CSLA .NET can fit naturally into many of the UI patterns.

At the same time, many of the UI patterns were devised on non-.NET platforms where powerful RAD concepts like data binding and UI designers don’t exist. Due to this, many of the “traditional” uses of these patterns prevent the use of productive RAD concepts and tooling, and that is an unforgivable loss. In this talk, Rocky will discuss how CSLA .NET helps implement powerful models, and how the most common UI patterns can be used to reap their benefit, without giving up the power of .NET itself.

Bio:
Rockford Lhotka, Principal Technology Evangelist, Magenic

Rockford Lhotka is the author of numerous books, including the new Expert C# 2008 Business Objects book. He is a Microsoft Regional Director, MVP and INETA speaker. He contributes to several major magazines and regularly presents at major conferences around the world. Rockford is the Principal Technology Evangelist for Magenic (www.magenic.com), a company focused on delivering business value through applied technology and one of the nation's premiere Microsoft Gold Certified Partners. For more information go to www.lhotka.net.

«July»
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678