SharePoint 2010 Prerequisites for Development Environment

As I was reviewing  the document “Setting Up the Development Environment for SharePoint 2010 on Windows Vista, Windows 7, and Windows Server 2008” which can be found here. I discovered some interesting information and script that I believe is valuable and worth sharing with you all.

There are a number of hotfixes, .Net framework, ASP.Net and Service Pack updates that need to be installed, referenced, and available, depending on the OS version of your SharePoint development. 

The good news is, SharePoint does include a PrerequisiteInstalle.exe tool that installs all the prerequisites you are using in Windows Server 2008.   Which in most cases, are not in a standard development machine.

Now the bad news—if you are using Windows 7 or Vista  as your development OS, the PrerequisiteInstalle.exe tool does not work. 

This leaves additional configuration steps and required several downloads, in order to get SharePoint installed.

However, there is a handy PowerShell script  “Download SharePoint 2010 Pre-Requisites” that can be found here, which downloads the prerequisites to a folder for an offline installation of SharePoint 2010 or in my case, as an extra step for “good measure” to  confirm that nothing was missed.

The PowerShell script uses BitTransfer so you can see the status of each download.  As shown below using PowerGUI.

image

You could also modify the “Download SharePoint 2010 Pre-Requisites” PowerShell script for other prerequisites software installation or configuration. 

If you are getting started or need to setup SharePoint development environments, I would highly recommend reviewing the ALM Resource Center | SharePoint 2010 site. It has a number of useful links and resources.  Also, check out our new SharePoint ALM Health Check offering that provides an independent review of your SharePoint development practices.

Posted in Uncategorized | Leave a comment

Northwest Cadence January Team Day!

Our Quarterly Team Day is always a highlight, however this team day had perfect timing! You know after New Year’s, when it’s time to go back to work but you really want one more day off? Well, this quarter’s Team Day filled the gap! Instead of the traditional day back (filled with catching up and a backlog of to-do items), we all headed out for breakfast clip_image002at our team’s favorite restaurant- Hector’s (can you say YUMMMO!). The remainder of the day consisted of internal planning and learning how to utilize our individual strengths at work (via Strength Finder) from Henriet Schapelhouman with SemperVita Institute—sounds a bit cheesy but was so beneficial and educational! What a fantastic team building session! 

To quote from last team day’s post, Balance is key to everything, so we incorporate that into our Team Days—Work followed by Reward—are we fortunate or what?!?

Posted in Uncategorized | Tagged | Leave a comment

Getting started with PowerShell

Over the course of the years I have been asked about this new thing call PowerShell (.ps1). It not that new anymore and there are a number of different applications and administrative task that now using PowerShell as their standard command line interrupter.   To get start with PowerShell I would suggest reviewing the following links as a good base and reference:

  • Windows PowerShell Owner’s Manual
  • Scripting with Windows PowerShell

     

    One of my favorite free tools when working with PowerShell is PowerGUI .  The PowerGUI has good information to get started  in the help files as well.   There is a plug-in for Visual Studio (VS) located here  http://powerguivsx.codeplex.com/  to work in the VS IDE.  Which make is easier to check-in your PowerShell scripts into source control as we know we all should do.  Some of the features that the VS plugin and the PowerGUI has are:

  • IntelliSense support through a custom PowerShell editor
  • Syntax highlighting and script analysis
  • Supports PowerGUI settings
  • Supports PowerGUI imported modules
  • Supports PowerGUI Snippets
  • PowerShell debugging
  • PowerGUI Console Tool Window
  • PowerShell Project Type

     

    One other item that trip everyone up when trying to run a .ps1 script for the first time is the execution policy.   By default the execution policy is set to Restricted.  Below are the four execution policies that govern scripting in Windows PowerShell:

  • Restricted (default). Permits interactive commands only (no scripts).
  • AllSigned. Permits scripts but requires a digital signature from a trusted publisher on all scripts and configuration files, including scripts that you write on the local computer.
  • RemoteSigned. Permits scripts but requires a digital signature from a trusted publisher on all scripts and configuration files that are downloaded from the Internet, including e-mail. A digital signature is not required for scripts that you create on the local computer.
  • Unrestricted. Permits scripts, including unsigned scripts.

    You can  find out what the execution policy is for your local workstation or server by the following:

  • Start | Run | type in PowerShell | A PowerShell command window will open
  • In the command window | Type Get-ExecutionPolicy | The execution policy will show as one of the four list above.

     

    To set the execution policy to run the a PowerShell script you will need to run the following command as a administrator:

  • Start Menu | Programs | Accessories | Right Click on PowerShell | Select Run As Administrator  | The PowerShell command window will open
  • Type in Set-ExecutionPolicy [one of the four above Example: Set-ExecutionPolicy Unrestricted]  | select Y [Yes] when prompted

    image

    Having the Unrestricted Execution Policy might be the easiest why to get your script running, but it might not be the more secure method.  For more information on execution policy can be found here and here.  You can also find out by using the PowerShell help

  • Open a PowerShell command window | Type in  Get-Help Set-ExecutionPolicy

     

    If you want to see all of the help items you can add the –full  For example: Get-Help –full Set-ExecutionPolicy. 

    As you might have notice you can get help on any  of the PowerShell cmdlet by typing in GET-Help  [cmdlet] like in this example or by using the Get-Help about-[topics]  For example: GET-Help about_alias  or Get-Help about_Arrays.  More on About Help Topics can be found here

    For more information regarding all of the commands can be found here and here

    PowerShell is a very powerful script tool that is for build and deployment and a number of everyday administrative, development and testing tasks. Getting to know how to use PowerShell will be a great addition to anyone knowledge toolbox.

    Happy PowerShell scripting

  • Posted in Tools, Visual Studio Team Foundation Administering (TFS Admin) | Tagged | Leave a comment

    Migrating ClearQuest 2003.06.xx to TFS 2010 with the TFS Integration Platform and a hammer (part 1)

    Can an ALM n00b (me) successfully migrate a really old version of ClearQuest, 2003.06.x over DB2, into TFS 2010?  It took some twists and turns and a lot of screencaps, but I got it working!

    Chapter 1: How Hard Can It Be?

    The week before Christmas, I got pulled in to help with an interesting problem… you know the kind.  I was asked to shadow and assist Shad with a TFS 2010 migration.  My first migration ever, but Shad’s a ninja, so how hard could it be?

    Our customer currently uses IBM Rational ClearQuest, which, OK, people do that.  But it turns out they’ve got a fossil: 2003.06.xx is old.  Really old.  It’s built on DB2.  Not some newfangled recent version of DB2, either.  But we’re optimists, apparently, so we’d told the customer we would try, just to see whether we could get this migration going.

    Shad and I followed the normal migration checklist:

    • Our customer installed TFS 2010 and the ClearQuest client
    • We got remote access to the app tier and data tier servers and to ClearQuest
    • On the app tier server, we installed the TFS Integration Platform from CodePlex
    • We created a destination Team Project in TFS for testing
    • The ClearQuest migration adapter points at a query, so we browsed the existing Public Queries (OMG slow) and selected one that would return a small record count (17)
    • We fired up the TFS IP and configured a ClearQuest migration (OMG slow)
    • We clicked “Start”

    Chapter 2: Success?

    Stuff happened.  But not enough stuff.


    Figure: initial, um, success, but nothing migrated

    The final log message wasn’t so helpful:

    [1/10/2012 4:24:14 PM] TfsMigrationShell.exe Warning: 0 : WorkItemTracking: Unable to record sync point for migration source f9fa297c-07b8-45ac-bb66-613b56e3a29b of session cfb9c695-d401-4c71-b349-42b15e4f5534 because lastMigratedTargetItem.ItemId is null or empty

    Quick googling suggested it’s a fall-thru message meaning “something else went wrong earlier”.  OK, earlier.  Shad found a bunch of these:

    [1/10/2012 4:22:21 PM] TfsMigrationShell.exe Information: 0 : WorkItemTracking: Workaround for XML save exception : String was not recognized as a valid DateTime.
    [1/10/2012 4:22:21 PM] TfsMigrationShell.exe Warning: 0 : WorkItemTracking: String was not recognized as a valid DateTime.
    [1/10/2012 4:22:21 PM] TfsMigrationShell.exe Information: 0 : WorkItemTracking: System.FormatException: String was not recognized as a valid DateTime.

    At this point, Shad felt this was the problem.  I wasn’t convinced.  These were Information- and Warning-level messages and not terminal.  They seemed to me to be known/handled, especially because they said “Workaround for XML save exception” right in them; this really looked intentional to me.  (Spoiler alert: Shad was right.)

    Either way, though, the logs weren’t giving us enough information about the issue.  Some kind of date isn’t being parsed, but we can’t see what the starting value is or what the parser doesn’t like about it.  Google turned up some interesting trivia about changes from local time to UTC time between CQ versions 2003.06.xx and versions 7.x+, but that didn’t seem like it should cause a format exception.  We didn’t know what version of DB2 we were running, and I couldn’t find a clear answer from IBM or anyone else about what exactly to expect a datetime to look like in it.

    We decided that I should download the TFS IP source and try compiling it on one of our own servers for closer inspection.  This, too, didn’t go well.  It takes a lot to get this solution up and running:

    • You have to have Visual Studio 2008 installed to compile the C++ core components.  Not some framework or library, but a full install of VS 2008, just sitting there, even though you’re actually using VS 2010 to do the work in.  This was a big deal for us, because it meant we couldn’t even try to compile the solution on our customer’s server at first.
    • The source ships with various .bat files you have to run to extract binaries from the GAC and deposit them where the solution expects them to be.  Or something.
    • There’s more, but I didn’t get that far.

    I fiddled with it quite a bit, making slow or no progress; eventually Shad disappeared with the source for half a day and turned up again with a compiled solution on our server.  Great, but then he got called to another customer site and I was ninjaless!

    Chapter 3: Flailing

    With trepidation, I dug into the source code on our server and promptly found myself way in over my head, I thought, with a really complex-seeming architecture and massive abstraction.  I had no idea even where to start.

    Then Martin had a few days in-office; Martin’s written his own custom Test Track Pro adapter for the TFS IP, so he definitely knows his way around this code.  As is typical of all my colleagues around here, he was ready to race full speed in a completely different direction.  Sometimes that’s exactly what’s needed and other times it just spins me around, you know?

    Steven asked me about the general state of this migration and I told him I’d been talking with Martin about a custom adapter.  “But it took Martin,” he exclaimed, “six weeks to build that adapter!  All we’re trying to do here is a little feasibility assessment!  That’s it—I’ve heard enough.  Don’t worry about this any more.”  And off he went, to tell our customer happy holidays and your migration looks seriously unlikely to happen.

    Chapter 4: Defeat

    I felt about an inch tall and not at all like the “developer” I claim to be.  Fortunately, it was Friday afternoon before the holiday and we all went down the pub and then adjourned for the weekend and I did my best to forget I’d ever heard of migrating anything.

    Chapter 5: … Not

    It turned out Steven had no intention of letting it go: he sent an appeal to something called the champs list, a group of Visual Studio ALM Rangers who are responsible for the TFS IP and other solutions.  Emails flowed in with offers of help, each seemingly pointing in a different direction.

    The TFS IP works by extracting the source data and pushing it into a holding database, then extracting it again from the holding database and pushing it into TFS.  Previously, we’d gotten all the records from the ClearQuest query into memory but the data never made it into the holding database.  With this new error, we weren’t even getting that far – the ClearQuest query got modified by the settings change and it was now failing.  Interestingly, I could see that the original query had a perfectly valid and recognizable date format wrapped in normal single-quotes and it was working fine that way.  Back to the drawing board.

    • CustomSetting CQQueryDateTimeFormat – tried this, didn’t do anything
    • Create an Analysis AddIn using built-in extension points – didn’t try this
    • Turn up the verbosity using TfsIntegrationPlatformTraceSwitch in the MigrationToolServers.config file – didn’t try this
    • Attach .NET Reflector and debug into the TFS IP executable – now we’re talking

    All this time, what I really wanted to know was, what’s causing this error? On my last team, my Project Manager spent nearly two years beating it into my head to be more methodical, more systematic, locate and verify the cause of the bug, then try one thing at a time instead of throwing 87 things at the wall blindly and hoping any of them sticks.  She was right then, and she’d be telling me the same thing now, and she’d still be right.  .NET Reflector it is.

    Chapter 6: Diagnosis

    I had sufficient perms to download and install .NET Reflector on our customer’s TFS app tier server, and our champs list expert had given me step-by-step instructions, which turned out to be flawlessly accurate, for attaching it and pointing it at the necessary .dlls and .exe.

    But now I’m trying to debug a process which, as you’ll recall, is not failing.  This means I’m going to have to set a breakpoint somewhere.  How do I know where to do that?

    Back in the logs, I found something Shad had obviously known about all along, that I had overlooked, immediately following the warning messages I’d been so sure were just red herrings:

    [1/10/2012 4:22:21 PM] at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
    [1/10/2012 4:22:21 PM] at Microsoft.TeamFoundation.Migration.ClearQuestAdapter.MigrationItem.ClearQuestRecordItem.FindLastRevDtls(OAdEntity record, String& lastAuthor, DateTime& lastChangeDate)
    [1/10/2012 4:22:21 PM] at Microsoft.TeamFoundation.Migration.ClearQuestAdapter.MigrationItem.ClearQuestRecordItem.CreateRecordDesc(OAdEntity record, String versionStr, ClearQuestMigrationContext migrationContext, Boolean isLastRevOfThisSyncCycle)
    [1/10/2012 4:22:21 PM] at Microsoft.TeamFoundation.Migration.ClearQuestAdapter.MigrationItem.ClearQuestRecordItem.CreateChangeGroup(ChangeGroupService changeGroupService, ClearQuestMigrationContext migrationContext, Boolean isLastRevOfThisSyncCycle)
    [1/10/2012 4:22:21 PM] at Microsoft.TeamFoundation.Migration.ClearQuestAdapter.ClearQuestAnalysisProvider.ComputeDeltaPerRecord(OAdEntity aRecord)
    [1/10/2012 4:22:21 PM] at Microsoft.TeamFoundation.Migration.ClearQuestAdapter.ClearQuestAnalysisProvider.ComputeDeltaPerRecordType(CQRecordFilter filter, String hwmTime)

    Figure: Goll-lee!  Don’t that look just like a stack trace?
    So I went back to our solution on our own server and did an Entire-Solution search for one distinctive-looking bit of text: “Workaround for XML save exception”.  Bingo.  It’s found in exactly one place: ClearQuestAdapter.ClearQuestAnalysisProvider.ComputeDeltaPerRecordType, the same method as the stack trace.

    I got there and found this.  I am not making this up.  I did not add these comments.

    foreach (OAdEntity record in recordQuery)
    {
        // HACK HACK
        if (record != null) // this if check is HACK
        {
            try
            {
                ComputeDeltaPerRecord(record);
            }
            catch (Exception ex) // eating exception is HACK
            {
                TraceManager.TraceInformation(string.Format("Workaround for XML save exception : {0}", ex.Message));
                TraceManager.TraceException(ex);
            }
        }
        // HACK HACK

    Figure: those comments have a funny smell

    This fits what Shad observed in the log: it seems to be a generic exception-catcher that outputs a benign Information-level trace to the logs and continues on.  (I can’t judge; I’ve written my share of these, and my share of “we’ll regret this later” comments, too.)

    Of course, the problem with generic exception-catchers is much like commercial tuna fishing: occasionally you snag a dolphin.  Or in my case, this poor defenseless creature, in ClearQuestRecordItem.FindLastRevDtls:

    DateTime.Parse(cqHistory.Date, CultureInfo.CurrentCulture);

    Now what?

    Coming next time: I Has a Breakpoint; What I Do With It?

    Posted in Application Lifecycle Management (ALM), ClearQuest 2003.06.xx, Custom Adapters, TFS Integration Platform, TFSIP Adapter | Leave a comment

    What New for VS and TFS Dev 11?

    It the new year and I thought I would take a look at the Microsoft® Visual Studio® 11 Developer Preview.   While installing the Team Foundation Server 11 I had found a few new changes. 

    1. TFS Dev 11 install was fairly straight forward.  If you have installed TFS before, then the new installed is very similar.  I would still highly recommend to read through the install guide and to make sure that all the accounts are setup before starting.  There was one thing that I notice when setup the Report Service permission .  In the TFSInstall.chm that comes with the MSDN subscription download, it has a reference in adding a account for TFS to the Report Server (you need to do this to access reports) by  doing the the following:  In the report manager Web site, click the Properties tab, and then click New Role Assignment. The problem is, there is no Properties tab.  It is under the “Folder Setting”.  I’m sure Microsoft will update the Install guide be the final release. 

    2. Installing the ISO version of the  Visual Studio 11 Developer Preview (x86 and x64) – DVD (English) the application crashed at the first start-up.  I had to uninstall the client,  with out any issue and then used the Visual Studio 11 Developer Preview Web Installer (x86 and x64) – (English) which installs an number of different components and dependences that included IIS 7.5 Express, Denali CTP3 components, and .Net Framework 4.5.  So for I have not notice any problems with install being on the same machine as Visual Studio 2010, SQL 2008 R2 and .Net Framework 3.5.  

    image

    3. Some of the new feature that worth mentioning is the Team Explorer new look from Visual Studio 2010

    image       image

    4. The other nice feature that I like is have the setting in the Team Explorer.  This provide quick access to the security setting for Team Projects and Team Project Collections.

    image

    I’m sure that there will be a number of changes in the final release, but it nice to get a preview of what is coming our way for Team Foundation Server and Visual Studio in 2012.

    Posted in Dev11, Dev11 Preview | 1 Comment

    NWC Team Day!

    I always look forward to our Company Quarterly Team Days.  Yes, we have workshops and are productive, but we also know how to have a good time! Balance is key to everything, so we incorporate that into our Team Days-  Work followed by Reward.
     
    Our October 2011 Team Day was a particularly fun one.  What better way to kick off the day than with a delicious breakfast and team

    discussion?!

     
    Our Team Day morning started (as they typically do) with a hearty breakfast at Hector’s. Yum!
     
    We then spent a few hours working together on internal projects.  In the afternoon, we headed south for some arcade games, go karting and lazer tag!
     
     
    Here are some highlights from this October Team Day.
     
     Most Competitive: SHAD
     
      
    Best Moves: CHERYL
     
     
     
    Most Energetic: STEVE

     
    Best Accessorized: RICK, LORI, and DAN
     
     
    Fearless Driver Award: JAMES
     
     
    Most Determined: MARTIN
     
    Best LazerTag Shot: Laura
     
     
    Reckless Racer (also our leading photographer): BRYON
     
    Most Enthusiastic Team Day Organizers: AMANDA and RENNIE
     
     
     
    I realize that since I play a large role in organizing our Team Days my opinion carries some bias… but I still  think we have some of Best Team Days out there!
     
    What will we think of next?!…
    Stay Tuned!
     
    Posted in Uncategorized | Leave a comment

    Installing TFS 2010: A Simple Checklist

    computing,downloading,downloading software,Internet,Photographs,technology,text,World Wide Web,WWW

    Simple post.  Simple list for installing TFS 2010.

    Here are the downloads required for the installation of TFS 2010, a few simple steps for installation, and guidance for verification. 




    Download

    Update: Grant Holliday has recently posted a far more comprehensive list at: http://blogs.msdn.com/b/granth/archive/2012/01/03/tfs-2010-what-service-packs-and-hotfixes-should-i-install.aspx

    Download the required software and guidance.

    Team Foundation Server 2010:

    Visual Studio 2010:

    SQL Server 2008 R2:

    You can use SQL Server 2008 Standard or Enterprise, or SQL Server 2008 R2 Standard or Enterprise for you TFS 2010 environment.  Keep in mind, however, that only the Standard versions are included in the TFS 2010 price of free – you must license the Enterprise licenses separately if you wish to use them with TFS.  Don’t forget to download the x64 version if you have a 64 bit OS.

    SharePoint 2010:

    You can point to an existing SharePoint 2007 or 2010 installation, or you can install and configure a new environment.  If you choose to do a new environment, use SharePoint 2010 (if at all possible), as opposed to WSS 3.0.  It’s not only newer, it’s just easier to use, with far more capabilities.

    Miscellaneous Software:

    Install

    Basically, simply follow the install guide.  Be sure to walk through each of the steps carefully.  Of course, that’s easier said than done.  For instance, if you want to install using 2 machines, you still need to go to the “Install a Stand-Alone Server” section to get information on how to install SQL Server or configure the IIS role.  Still, it’s the best set of steps to follow. 

    If you’re doing a dual server install install, you could follow the steps below:

    Data Tier:

    • Install SQL Server 2008 R2 Standard or Enterprise.
      • The bottom line is to simply install using the wizard with defaults.  However, you’ll need to install SQL Server with Full Text, Analysis Services, Client Tools Connectivity, and Management Tools (at least Basic).
      • Reporting Services should generally be placed on the Application Tier, but it can, if required, be placed on this tier.
        • If installer here, ensure you use the “Install the native mode default configuration.” (It’s the default selection.)
        • WARNING: If you do not install SSRS on the Application Tier, you will still need to install the client connectivity tools there.  Otherwise the App Tier won’t have access to the Data Tier!

    Application Tier:

    • Configure the IIS Role. You need:
      • ASP.NET (including .NET Extensibility, ISAPI Extensions, and ISAPI Filters)
      • IIS 6.0 Management Compatibility (including IIS 6 Management Console, IIS 6 Scripting Tools, IIS 6 WMI Compatibility, and IIS Metabase and IIS 6 Configuration compatibility)
      • Windows Authentication
    • Install and Configure SQL Server Reporting Services (same version as corresponding SQL Server you installed on the Data Tier).
      • Ensure you use the “Install the native mode default configuration.” (It’s the default selection.)
    • Install and Configure SharePoint 2010
      • You can also install WSS 3.0 or SharePoint 2007.  WSS 3.0 is the easiest to install, since the TFS 2010 installation can handle that for you.  However, I highly recommend SharePoint 2010.
      • For guidance on installing and configuring SharePoint Foundation 2010, please see http://myalmblog.com/2010/12/20/installing-tfs2010-with-sharepoint-foundation-2010/.  This also applies (close enough) to SharePoint Server 2010.

    Verify

    You need only do two things for basic verification. 

    • Create a new Team Project
      • This exercises much of the TFS installation, and is one of the best ways to ensure your base TFS implementation is working.
    • Run the TFS 2010 Best Practices Analyzer.
      • A BPA run can identify issues that might not turn up when simply creating a Team Project, including disk space issues, non-standard configurations and the like.
    Posted in TFS2010, Visual Studio 2010 Team Foundation Server | Tagged , , | Leave a comment

    Unconventional, yet effective, TFS 2010 usage

    Introduction

    I currently been working on a piece that deals directly with Team Foundation Server (TFS) 2010, namely work item tracking, that is quite unconventional. Normally, when one thinks of TFS 2010 software development immediately pops into their head. TFS was developed, and is still being developed, to integrate the entire process of software development (development, work tracking, testing, bug tracking, etc.) into one system. The integration with all of these different elements brings out very rich reporting and transparency within a company, especially with the data that can be recorded and used via the work item tracking.

    This is all fantastic for software development teams, but when a team doesn’t write any code, how could they leverage the power of TFS 2010?

    Context

    For the sake of context, this particular customer releases products that need to comply with specific compliances to be able to release and be sold. These compliances can range from a variety of different things (ISO, PCI, HIPAA, etc.) which, at times, can be audited. As one could imagine, as a system becomes complex, as this one is, tracking everything down to the fine print is quite difficult.

    During some of the initial meetings of the project, one of Northwest Cadence’s consultants showed this customer one of our own internal projects that are currently developing (we have deemed it Skillsaw). In short, it extends TFS 2010 into a view of tracking a different type of work, knowledge transfer. After seeing a short demo of our internal project, our customer wanted something very similar for their team.

    Process Template

    To begin with, tracking knowledge transfer compared to tracking compliance of a product is radically different. In the world of compliance, there exists specific compliances that one might want their product to adhere to. In these circumstances, certain requirements exist that must be reached for the product to comply, and within these requirements there are activities that, upon completion, will satisfy that particular requirement. Now, throughout the process of getting a product up to speed on a compliance, there are two irregular actions that can come into play. Exceptions are planned out to exempt a specific requirement from having to be done for it’s compliance, and Findings are what are found after a requirement has been tested and failed (a remediation plan is drawn up and revised until accepted). As one can see the complexity is starting to unravel, and there are plenty more bits that come into play later on, but lets focus on these ones right now.

    Initial Phase

    One of the major differences between our internal Skillsaw project and this new one is that Skillsaw is restricted to one TFS project while leveraging areas to divide work, whereas the complex nature of working with compliances and the multitude of products requires me to widen the breadth of the application to a project collection with different projects.

    For this team, we are now assigning a product to a team project in TFS 2010. This will give us more latitude to use area paths for yet another way to divide up work and sectionalize compliances for a product. This doesn’t seem important now, but it will play a bigger role as we continue through this solution. At this point it seemed clear that a custom TFS process template will need to be made to mimic the compliance process.

    Work Item Types

    Compliance

    This is the most obvious type to have. We need this to be able to tie everything together and roll-up any data we may want from the subsequent work items. There won’t be too much information stored at this level, it is used, mainly, to act as a place holder and tie all the strings together.

    Requirement

    This one is also quite obvious. Here, the information from the compliance itself is stored, and any supporting documents, links, diagrams, etc. will be stored here for future reference. There is one thing about the Requirement that may seem odd to most, there is only one state with no transitions (the state name is “Static’). It does seem odd at first, but a look at the next work item type will shed some light into this architecture choice.

    Control Objective

    This one is not mentioned as a part of the compliance part, but it will play a major role in this TFS customization. The company is starting to shift to company wide standards. These standards are in the first few stages of being born, and, therefore, have not become widespread. The whole idea of a Control Objective is to be that company standard, and these standards will encompass the requirements needed to achieve in order for a project to be compliant. To further illustrate this concept, imagine having a handful of Control Objectives to complete, instead of two or three dozen different requirements to go through. A Control Objective (standard) will continuously morph to be able to encompass many different requirements.

    A Control Objective is where all the work is to be done and has all the states/transitions that one would assume would go along with a  process. These control objectives will support a compliance, while still encompassing a bunch, or only one, requirements. Hopefully, by forcing the team to use control objectives, instead of transitioning through requirements, they will adopt this concept much faster.

    image

    Figure 1: View of how a Compliance, Control Objective, and Requirements fit together

    From the above figure, you can see the specific requirements for each of the compliances. Requirements 1.2, 1.4, and 2.4 are linked to Control Objective 1, which in turn is linked to the compliances that are tied to the requirements it encompasses.

    Control Activity

    These are linked only to Control Objectives. Control activities are very similar to tasks. One control objective will spawn multiple activities to complete it. Much of the hands-on work done by the people completing the compliance will be done at this level in the hierarchy.

    Exception & Finding

    Exceptions and Findings, as mentioned previously, could play a major role in the actual work of making a product adhere to a compliance, but from the customization point of view they are very similar to bugs that need to be dealt with. Simple work item types that use security customization for sign offs and remediation plan acceptance.

    Work Item Link Types

    I believe getting these correct (topology and name) are just as important as the work item types. The links are what are going to tie each products’ work together, as well as tie it back to the original, template compliance (more on this later in the article). The linking of everything is very important, and getting it right will yield powerful and useful reports.

    NWC.SupportedBy

    This link uses the Dependency topology and links both the Control Objectives to a Compliance, as well as Control Activities to a Control Objective. This creates a many-to-many relationship between Control Objectives and Compliance work items. This is handy because we will want the directionality and the prevention of circular relationships, but we also want to be able to link control objectives to multiple compliances.

    NWC.Encompasses

    This link will be defined by a Tree (parent/child) relationship. This will be used to link a control objective to many requirements. We don’t want there to be multiple parents to these requirements (in essence we want to make sure we have one, and one only, control objective that will encompasses a particular requirement), so again we want the directionality, but we only want one parent for each of the children.

    NWC.Linked

    The Linked link will be defined as a network link type. This is merely to link a control objective that is being worked on to the one that is sitting in the template project (again, I will get to template projects later on in the article). There is no direction, nor is there a prohibition of circular references.

    Conclusion

    There is much, much more that goes into a full customization of a process template, but with these two bits we can move on and start fleshing out a non-software development environment.

    Project & Project Collection Hierarchy

    There isn’t much that goes into this particular section, but by laying down simple definitions and rules to follow throughout the collection and projects goes a long way for organization and scalability.

    Project Collection

    Again, not too interesting when looking at the project collection itself. We are going to define a Template Project (mentioned multiple times in previous sections) that will serve as a content holder for all the compliances. The rules within this project will differ from the projects that will represent the company’s products, but not by much. Beyond the template projects, I am going to make a hard rule that all projects used for the purpose of getting a product to a specific compliance must all reside within a single project collection. This will allow us to link to the template project work items and give us the power of tying everything together that we are aiming for.

    Team Projects

    As mentioned in the previous section, there will be two types of team projects:

    • Product Project
    • Template Project

    I will first define the Product Project and move onto the Template Project because they have minor differences.

    Product Project

    The product project is where a specific product from the company will have all of its associated work items to get to compliance. There will only be the following work items within these projects:

    • Compliance
    • Control Objective
    • Control Activity
    • Exception
    • Finding

    The reason being, all the information about the compliance and requirements are to be static, and, if added to, we want this information to be accessible to any product that has that specific compliance. Also, these work item types are the only ones that will have true states and transitions to mark the flow and process of what is happening in the teams.

    The area and iteration paths will also be used in these projects for specific reasons, also. First off, the area path will follow this standard:

    TeamProject\Compliance\Version\Section

    This is so we can have different versions of the compliance, and split the compliance up into the major sections of it. We are also going to control security ad the compliance level because there needs to be separation from the different compliance teams, for some of the compliances. Secondly, the iteration path will follow this standard:

    TeamProject\Release\Milestone

    The structure of the iteration path will help identify work items within those releases (Alpha, Beta, RC, RTM, etc.) and the milestones within each release.

    Template Project

    The template project conceptually differs greatly, but technically there is not much. Conceptually, this will hold all of the static text and documents that relate to each of the compliances. The requirement work items will reside in this project, and this project alone, and will have all supporting attached to them.

    Instead of using both the area and iteration paths, the template project will only leverage the area path with the following structure:

    TeamProject\Compliance\Section

    Instead of having a version of the compliance, the template project will only store down to the compliance and section level of detail.

    Automation-esque Extensions

    With the setup, rules, and hierarchy all defined for TFS 2010 (high-level), there is the question that is still out there: what does this give us? To tell you the truth, not much. All of it really gives us a huge, complex framework that requires a TON of manual hours to get everything out to the TFS projects and project collections. Not to mention how much time it would take to copy over the work items to each of the projects. Or, what about when the product starts a new release? That requires a whole new set of work items

    This is where the true power of TFS 2010, and its extensibility, comes into play. Creating work items that need to be finished or completed to track what has been done can be very laboring, especially when you have to do it over, and over again. In our internal project, since we were able to stay within one team project, it was really simple to be able to automate this process. We would merely “Copy work item…” and assign the new copy of the highest level work item to ourselves, and all the supporting work items and links would then be copied over for us and assigned to us. This was fantastic! We were able to pick what we wanted to do, and it would, behind the scenes, copy over everything we needed to do to complete it. Being able to quickly, and easily, create redundant work items like this not only benefits the direct users, but we can now pull out a ton of reporting information from the work items, once they’re being used.

    Everything here is completely automated, and all the user has to do is copy one simple work item. All the steps and new work items are created, and automatic links to websites are on the work item UI to go look for more information. All of this automation was done using a couple of classes that inherit the ISubscriber interface. These are really cool event handlers that you can just throw up onto the TFS server (in DLL form), and TFS automatically picks it up and starts running it. However, this was all built on the assumption that we’re within one team project, which is not the case with our customer.

    In our customer’s case, we needed to be able to stretch across projects and “grab” compliances from the template project and add them to their own projects. As some of you may know, the pains of moving a work item from one project to another in TFS 2010, is no simple task. In fact, no matter how you do it, the original work item CANNOT be moved from one project to another. There are plenty of work around methods that can keep data and history, but still no way to move the original work item over.

    To solve this minor issue, I had to create a small application that I have deemed the “Compliance Grabber.” This app lets you select a template project, which it then populates a list of compliances it finds in that template project (this is where the strict area path rules come into play). The user can then select a target project, check the compliances it wants to grab, and then click “Grab Compliance(s).” This will then look through all of the sections and grab all the Control Objective and Control Activity type work items, copy them to the target project, and add all the necessary links to tie back into the original compliance.

    This is my first step to automating the process of adding a compliance to a product. Creating these work items makes it simple and easy to add a compliance and start running right away on adhering to that compliance. I am continuing to automate a number of things, such as when a new release is to happen, it has to be checked of to comply with a standard again.

    Conclusion

    The whole idea of customizing and extending TFS 2010 in this fashion, forks from the traditional outlook of what TFS is: an end-to-end software development platform. Setting up the framework for a process, and automating the creation of work items to simplify, and track, what someone is doing brings a huge deal of value to the table. No longer is there a huge excel sheet that has a bunch of columns and rows to check off what needs to be done, and what is done. There is a prescribed methodology on how to do things, and capturing that data over time is trivial. Data input to get reports is non-existent because TFS already does this for us. If the team were to decide to put Estimated Hours, Hours Remaining, and Hours Completed they could start getting burndown charts and average velocity to complete a control objective, or even a compliance. The possibilities start to become endless as one thinks about how TFS can be customized to fit their particular need.

    Posted in TFS2010 | Tagged | 1 Comment

    ALM Summit: Questioning the Big Bang Theory: The Case for Incremental Change

    If you missed Steven Borg’s presentation at the ALM Summit in November, you are in for a treat—channel 9 has provided a fantastic recording of the session: Questioning the Big Bang Theory: The Case for Incremental Change!

    Many agile methodologies require dramatic change to an organization during adoption. For instance, Scrum adoption often requires a complete reorganization of the development team, regardless of current structure or corporate culture. This can sometimes lead to dramatic success, but in far too many cases the result is chaos, thrashing and failure. For many organizations, the risk is too high, so they plan to adopt agile “tomorrow, when things aren’t so busy”. But tomorrow never comes.

    There is another way.

    In response to the high failure rates of agile adoptions, organizations of all sizes have sought another path – incremental improvement. And it’s working.
    This presentation introduces the tools and techniques for incremental process improvement, why it works, and tips for adoption. But we will also talk about when it doesn’t work — because incremental change isn’t always the right fit.

    To wrap up, we’ll walk through the organization and cultural patterns that lend themselves to incremental change, and those that lend themselves to radical change. You’ll walk away with an idea of where your organization fits, and what path to agile adoption that you should take.

    Abstract extracted from: http://www.alm-summit.com/sessionsALM.aspx

     

     

    Posted in Application Lifecycle Management (ALM), Events, Process | Tagged , , , , | Leave a comment

    Disable Reporting for a Team Project Collection

    image

    This post describes how to disable reporting to the warehouse and the OLAP cube for an entire Team Project Collection.  It also discusses why you may want to do so.  But first:

    Bottom Line Up Front: Pass only the Collection Name and the state value FullyDisabled to the SetWarehouseJobEnabledState web method in the WarehouseControlWebService.


    When to Disabling Reporting

    One of the main reasons to disable reporting for an entire TPC is for proof of concept work.  For instance, we are currently moving a IBM Rational ClearQuest implementation to TFS 2010 for a client of ours.  Since we’ll want to run one or more test migrations, we’d like to have a separate TPC.  This prevents work item IDs from getting ‘used’ from their core TPC, which has a tendency to throw people off.  They would go from IDs in the thousands to IDs in the tens of thousands over night.  Not a huge problem, but one we can easily avoid.  Thus, the new TPC.  But we also don’t want to have all the test migration data flow into the data warehouse and the cube, thus muddying the data there. 

    Thus, when doing test work that doesn’t involve the data warehouse and cube, disabling the data warehouse is an important step to keep things clean.

    How to Disable Reporting

    It’s pretty easy, and can be done in only a few steps.

    Browse to the WarehouseControlWebService

    If you’re on a TFS app tier the URL is likely http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx.  (The only caveat being if you’ve put TFS under a non-standard virtual directory, in which case you’d need to replace the /tfs/ above with your virtual directory.)

    Invoke the SetWarehouseJobEnabledState method

    This will bring up the SOAP UI for setting the enabled states of various parameters.  For a full list of parameters for TFS 2010

    For the collectionName value, enter your Team Project Collection name, leave the jobName blank, and enter FullyDisabled in the state field.  Click Invoke.

    WarehouseControlWebService Image

    Validate the services are disabled

    Go back to the WarehouseControlWebService page, and click the GetJobProperties.  Enter no data in any of the fields and click Invoke.

    You are provided with a list of Job settings.  Scroll down to the collection name and verify that the EnabledState is FullyDisabled.

     

    clip_image001

    How to Enable Reporting

    Of course, you may need to turn reporting back on.  To do so, follow all the steps above, but in the SetWarehouseJobEnabledState method, pass in Enabled (instead of FullyDisabled), and click Invoke.  That’s it!  You can then verify using the GetJobProperties method, if you like.

    More Info

    You may also want to enable or disable individual jobs, instead of removing the entire collection from warehouse and cube processing.  To do so, you can specify an individual jobName in the SetWarehouseJobEnabledState method.  To find out all of the job names that are available to you, run the GetJobProperties method.  Note that some jobs are specified at the server level, and others at the collection level.  For those at the server level, you must leave the collectionName parameter blank when using the SetWarehouseJobEnabledState method. 

    Here are the names of the jobs in a default install of TFS 2010:

    Server / Instance Level:

    • Common Structures Warehouse Sync
    • Full Analysis Database Sync
    • Incremental Analysis Database Sync

    Team Project Collection (TPC) Level:

    • Build Warehouse Sync
    • Common Structures Warehouse Sync
    • Test Management Warehouse Sync
    • Version Control Warehouse Sync
    • Work Item Tracking Warehouse Sync

    Example results from a GetJobProperties call, from a default TFS install, is provided in the image below.

    image

    Happy reporting!

    Posted in Application Lifecycle Management (ALM), TFS2010, Visual Studio 2010 Team Foundation Server | Tagged , , , | 1 Comment

    Retrospective: Northwest Cadence at ALM Summit 2011

    I’ve been attending the ALM Summit series since 2006 when it was still called p&p. On my blog this week, I’ve shared some nostalgia about my personal ALM Summit journey

    I didn’t mention how I spent all those years pestering poor Keith, the organizer, to let me be a speaker at Summit.  “C’mon, just a 15-minute lightning session.  The public sector is interesting… no, really…”  He must have had a good laugh this summer when I told him I was moving to Northwest Cadence, me having no clue then that Northwest Cadence is a Platinum Sponsor of the entire Summit!  I think Keith might have had a better idea what was in store for me than I did!

    So I arrived at this year’s Summit unsure what my new role and our Platinum Sponsorship would mean for me.  Keith already rolls out the red carpet for all attendees, so it’s not like I needed to be treated any more specially.

    Interact!

    The Summit really is as much about connecting with people—industry colleagues, thought leaders, and real development teams trying to solve real problems—as it is listening to lectures.  Northwest Cadence demands this of me, which I love, though I’m still trying to overcome feelings of guilt whenever I miss or multitask any part of a session…

    It’s a huge thrill to find that some attendees remember me from last year.  One actually did a double-take: “Steven, she’s with you guys now?!”  Double win!

    On Tuesday afternoon, the Summit rolled out its new concept, Open Spaces: self-organizing discussion groups on attendee-selected topics.  Martin, Steven and I dove into a big one: “Scrum or Kanban?”  We talk about this in the office all the time, and we give Coffee Talk webcasts on it, so I’m eager to expand my/our knowledge with insights from others.  Scrum.org was well-represented in the group, but I was surprised, and fascinated, to see Kanban take up the majority of the discussion time!  It seems that while a lot of teams have adopted Scrum, for one reason or another they may be looking to introduce Lean/Kanban thinking into their process as well.  2011 is perfect timing for this, as we’ll see later…

    Kanban Is Buzzing

    On Wednesday afternoon, our own Steven Borg delivered a session entitled “Questioning the Big Bang Theory: The Case for Incremental Change”.  Even though the title was tuned to be agnostic and accessible, Steven can’t outrun his reputation, so quite a few attendees greeted him with, “… and we can’t wait to see your Kanban session later!”

    Figure: The kids back at the office had their fun with his goofy agenda image…

    I got to work in advance with Steven to help craft his presentation, including playing with Prezi, an awesome, non-linear alternative to PowerPoint.  We had fun watching each other’s adorable little Prezi avatars wander around the screen as we co-edited online.

    Steven’s an amazing speaker, by far one of the most engaging at the Summit, and I’m not just saying that because his company pays me.  (Pretty much reverse that causation arrow… but that’s another blog post.)  Check out the recorded sessions if you have any doubts about this.

    I think there’s a need in our industry to address the question of incremental change, too: Scrum provides great, interconnected, proven tools right out of the box, but what if your management won’t give you a box?  Steven showed us how concepts from Kanban supported by specific techniques for followup, problem-solving and incremental actual change offer a good alternative.  Or a good supplement!

    I was motivated by this and Tuesday’s Open Space to blog about what I see as a Kanban risk: Underpants Gnomes. Kanban helps you visualize an existing process, but does your team have the necessary mindset and skills to then identify problems correctly and fix them positively and productively?

    Technical Reception

    After hours on Wednesday, the Northwest Cadence operations crew came over and we set us up a cool sponsor booth and live demoing station.  We raffled a DIY Kanban Wall kit with the same supplies we used to create our own Kanban Wall at our office: magnetic primer, chalkboard paint, smudgeproof chalk markers, laminated dry-erase magnet cards, lots of fiddly magnetic bits, painting implements, dropcloths and a bucket.  We set up some other paint-themed decorations and threatened to put the newest ALM Consultant in the Ty-vek Sta-Puft Marshmallow Man paint suit… wait, I’m the newest ALM Consultant!  Help!

    Our idea for Mini Coffee Talks with self-organizing topics didn’t quite take off as we’d hoped, though mostly for the very satisfying reason that attendees kept wandering over and striking up conversations and keeping all of us consultants busy all evening.  I played around with IntelliTrace at the demo station for a few minutes, which I don’t think constituted a demo because I think only Dan was watching; for the rest of the evening, about every 20 minutes or so I’d wander over to the laptop and put up a single provocative slide to see if I could get a conversation started.  One of my favorites, “ATDD: Because Customers Lie” was a crowd-pleaser, and I’m looking forward to building out that idea in a future full-length Coffee Talk.

    Everything Scrum Is New Again

    Several of our esteemed industry colleagues got into shape in 2011 and turned up at the Summit looking fit and trim.  Great job, guys!  This year, Scrum also finds itself right-sizing and focusing on essentials.  Our own Martin Hinshelwood summarizes the overall change in approach beautifully in his blog post Are you doing Scrum? Really?, authored during the Summit.

    R I P, Scrum But

    Figure: Don’t be too sad for it; it had a good run.

    Perhaps the most jarring change for Processistas is the sudden and unexpected demise of Scrum But.

    Is this the start of a kinder, gentler Scrum?  When I started working with Steven and Martin on our “Scrum vs. Kanban” webcasts, I joked that I wanted to move us away from “shootout at the OK Corral” and towards “Kum-Ba-Ya around the campfire”.  Who’s laughing now?  Scrum is newly open to modification and extension, so we’re replacing Scrum But with Scrum And!  Maybe now the process community can focus on helping teams find a the right mix of techniques that work for them.

    The round-table format of the Thursday presentation by David Starr (now at Scrum.org, nice catch y’all) was nicely engaging, a good way to get folks up to speed on Scrum 2011 and address their specific questions, with Professional Scrum Trainers (including Martin) scattered throughout the room to support and keep things focused.

    I’m totally reworking my “Scrum-damentals” webcast sessions coming up December 1 and December 15 on MSDN, so tune in there if you’d like to see what all this fuss is about!  Hopefully I will have figured it out by then.

    Tools Still Rule

    The focus of the Summit was further clarified this year with the split into an Application Lifecycle Management (process) track and an Agile Developer (practices) track, but it’s clear (as it is every year) that for this audience, tools rule: rooms filled up and Twitter traffic spiked any time a presenter on either track did a cool demo, especially around Dev11/vNext.

    Post-Conference Workshop

    Steven brought me in along with Martin to assist him in teaching Friday’s course, “Enterprise Management of the Software Process”.  They let me run the “Intro to Scrum” portion of the agenda, where I got to try out my new learnings and did a respectable job explaining the core framework and extensibility principles.

    Nearly everyone in the room was already doing Scrum, and were eager to learn whatever we could share with them to help them move to the “high-performing” end of the bell curve.  In Thursday’s session, Steven had touched upon queuing theory and his Monte Carlo simulation spreadsheet—on Friday he expanded upon this idea to illustrate two key concepts:

    1. Queues are a bigger problem than we generally recognize
    2. Work in Process (WIP) limits significantly improve queuing

    My favorite part was Martin and Steven’s live coin-flip queuing demo, which really made it understandable for the non-math-majors in attendance!

    Wrap-Up

    ALM Summit is by far my favorite conference, the one I used to fight every year at my old job to be able to attend.  It’s comical that I totally by accident (if you believe in accidents) ended up working for one of its Platinum Sponsors.  Now I’m graduating from audience member and #fangrrrl to an all-access backstage pass and… I wouldn’t say producer credits yet, more like a junior member of the stage crew.  This is a community I’m happy to be part of, and I hope Northwest Cadence and I can continue to grow as leaders in the process, practices and tools arena for years to come!

    Posted in Application Lifecycle Management (ALM), Event, Kanban, Process, Scrum, VS ALM | 1 Comment

    How to migrate TFS 2008 deployment to TFS 2010…

    Since the release of TFS 2010, many organizations have chosen to migrate their TFS 2008 deployment to TFS 2010. 
     
    There is plenty of documentation describing the process of upgrading your TFS 2008 deployment and the procedure is relatively simple. What you won’t find, however, are detailed notes on the  process of migrating/upgrading a TFS 2008 deployment to TFS 2010 while moving it from one  domain to a different domain, while changing your user account names between domains.
     
     
    The following is a step-by-step guide to migrating TFS 2008 from one domain to TFS 2010 in another. This process presumes the following:
     
    1)   That you’ll be performing an in-place upgrade of TFS 2008 to TFS 2010 in the old domain
    2)  That your new domain has user accounts for each of the users that exist in the old domain.
     
     
    How to Migrate a TFS 2008 deployment from one AD domain to TFS 2010 in another AD domain.
     
    1)   Before anything else, make sure you run the Best Practices Analyzer on the old TFS server and correct any issues you may encounter.
     
    2)   Ensure there is adequate disk space on both the TFS 2008 server and the destination server for installing service packs and applications.
     
    3)   You will be installing .NET 3.5 which requires 2.0a. So ensure that all requisite SP’s are installed on the original serverfirst.
     
    4)   Install .NET 3.5 SP1 (KB951847)
     
    5)   On Old Domain, if you are running SQL Server 2005, upgrade SQL Server to 2008, then install SP1 for SQL Server 2008.
     
    6)   Perform in-place upgrade of TFS 2008 to TFS 2010. This procedure is straight-forward. Insert the TFS 2010 disk and follow the setup prompts for an upgrade.
     
    7)   Once the upgrade has occurred, backup the Project Collection. Using the SQL Server backup utility.
    a.    Right-click on the TFS Collection, select Tasks/Backup. Accept the defaults. Once it’s backed up, copy it to a folder on the destination server. You can proceed to the next step.
     
    8)    On new domain, build new server as follows.
    a.    Install SQL Server 2008 (Including relevant SP’s and Hotfixes)
    b.    Install TFS 2010 (DO NOT run the configuration wizard from the setup.)
     
    9)    Run the TFS Administration Console then run the configuration Wizard and choose Advanced.
     
    10) Configure TFS 2010 for everything BUT do not configure Project Collection
     
    11) Restore the Project Collection onto SQL Server.
    a.    In SQL Server Management Studio, right click on the Databases folder and choose Restore database.
    b.    From Device, add a file and select the database file we copied from the older server. (Do not store this file on the desktop!)
    c.    Choose Restore from “Select the backup sets to restore”. In the “To Database:” field, type in the name of the database and select the default options.
     
    12) Go to C:Program FilesMicrosoft Team Foundation Server 2010Tools and run TFSConfig Identities to ensure that there are no destination account names listed. In other words, accounts can exist, but we cannot have accounts with the same names as the names we are going to be using to map the old accounts to. (for example, if we intend on mapping OLDDOMAINRennieA to NEWDOMAINRAraucto, then RAraucto cannot appear when we run TFSConfig Identities) If any of these accounts exist in the new TFS deployment they will not be able to be mapped to the original accounts and you will lose any associated work items. [Important note: TFS Administrators is automatically populated with the BuiltinAdministrators group, which means that any accounts in that group will be part of the TFS Administrators group!]
     
    13) Attach the Project Collection. This should be relatively quick and shouldn’t take a long time. If it’s taking a while, check out the Event Log (Applications) to see what’s going on. Service accounts may be having problems or there could be Instance ID issues.
     
    14) Once the Project Collection is attached then we need to map the old accounts to the new accounts. First, list out all the existing accounts by using TFSConfig Identities to list out the old accounts. You should now see the old accounts listed with the previous domain associated with it.
     
    15) Use TFSConfig Identities /change and migrate the users. I used a batch file to do it. Use the following command
    a.    TFSConfig Identities /change /from domain:<OldDomain> /todomain:<NewDomain> /Account:<OldAccountName> /ToAccount:<NewAccountName> /SQLInstance:<SQLInstanceName> /DatabaseName:<NameOfConfigurationDatabase>
    16) Run TFSConfig Identities to see if the new accounts now exist and the old accounts don’t. If this runs correctly you’ll notice that the old accounts are no longer listed and the New account now exist.
     
    17) Ensure you can use Team Web Access to connect to the work items. (Note that permissions may have to be assigned using the new TFS permissions structure)
     
    18) Configure TFS by going into TFS Administration Console
     
    19) Make sure you configure the reports folder and populate the new TFS 2010 reports folder with the new report templates since they don’t automatically exist when you upgrade. To add reports you must use a microsoft defined xml file and then run a command that uses the xml file to populate the reports node with reports, predefined by the Process TEmplate. This XML file can populate the existing Reports node and the SharePoint site.
     
    20) Move over the Documents content.
     
     
    Good luck with your migration!
     
     
    Posted in TFS2010 | Tagged , | Leave a comment

    Migrating from ClearQuest to TFS 2010

    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 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.

    The first thing is that you need to understand the CQ Schema. You do not 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.

    Figure 1 shows a small portion of the ChangeRecord type in ClearQuest.

    image

    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.

    Once you have this information you need to create the queries (yes, you need at least two queries to perform a migration with links). 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”.

    Next you need to set the queries to use in the Integration Platform like so:

    image

    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.

    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:

    <LinkTypeMapping LeftMigrationSourceUniqueId="79841a53-d698-4107-a2df-5ff935e0e0c9"
     LeftLinkType="ClearQuestAdapter.LinkType.Duplicate"
     RightLinkType="Microsoft.TeamFoundation.Migration.TFS.LinkType.WorkItemToWorkItem"
     RightMigrationSourceUniqueId="c80d3b9a-a40e-4aa7-bfb2-7828971ac4f0" />

    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:

    <LinkTypeMapping LeftMigrationSourceUniqueId="79841a53-d698-4107-a2df-5ff935e0e0c9"
     LeftLinkType="ClearQuestAdapter.LinkType.ReferenceListFieldRecordLink.ChangeRecord.WRList"
     RightLinkType="System.LinkTypes.Hierarchy"
     RightMigrationSourceUniqueId="c80d3b9a-a40e-4aa7-bfb2-7828971ac4f0" />

    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).

    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.

    Enjoy!

    Posted in ClearQuest, TFS Integration Platform, Visual Studio 2010 Team Foundation Server | Tagged , , , , | 1 Comment

    Q’s of the day! What is level of difficulty in order to migrate from VSS to TFS 2010?

    We asked some of our consultants to answer the following: What are the most commonly asked questions you’ve had by customers this year, and how did you answer it?
    Here’s what they had to say: 
     

     
    What is the level of difficulty in order to migrate from VSS to TFS 2010?
     
    I explain that migrating from VSS to TFS 2010 is a relatively straight forward process.  In order to migrate you need to make sure the VSS database is not corrupted or, if it does show signs of corruption, run repair it using the ANALYZE command. 
     
    You also need to make sure you map the VSS users to TFS users using the usermap.xml file and you need to update the migration settings file to reflect the where the folders from VSS will be placed in TFS.
     
     
    -Rennie

     

     
     
    Posted in TFS2010, Visual Studio 2010, Visual Studio 2010 Team Foundation Server | Tagged , | Leave a comment

    What are the most commonly asked questions you’ve had by customers this year, and how did you answer it?

    We asked some of our consultants to answer the following: What are the most commonly asked questions you’ve had by customers this year, and how did you answer it?
    Here’s what they had to say: 
    How should I upgrade to TFS 2010?
     
    Although “it depends” is not the answer anyone wants, it truly does depend on numerous factors including your infrastructure, resources, past TFS performance, “future-proofing” your environment, and what 2010 features you want to utilize.
     
    In my experience, the ideal way to upgrade is to always migrate to new hardware.  Migrating to new hardware allows for:
     
    ·         Your existing infrastructure to stay in place, allowing it to be easily reverted to in the case of a failed upgrade.
    ·         Easy upgrades to the latest operating systems (including full 64 bit support) and related applications (SharePoint, SSRS).
    ·         Upgrading your hardware, environment, and infrastructure architecture to boost performance.
    ·         Easy testing of the upgrade process without interfering with the existing infrastructure.
     
    Not everyone has the luxury of migrating to new hardware or updating to the latest and greatest. New hardware or not, there are still some common mistakes to watch out for:
     
    ·         Ensure you have enough free disk space available for the upgrade process to complete.  You generally need free space one and a half times the size of your databases to complete the upgrade to account for temporary growth in the transaction logs.  So if your TFS databases are 40GB, ensure you have at least 60GB of disk space free (please see the installation guide for exact details on disk space requirements).
    o    Plan for increased disk growth if you will be taking advantage of the new testing features including video recordings and detailed logging information.
    o    Do not upgrade without a solid strategy for backups and disaster recovery. This is critical should you need to revert, as it will allow you to continue working without impacting your TFS user base.
    o    Install any necessary client patches and if possible have users test connectivity on a test instance before the production upgrade to prevent unnecessary user and client connectivity issues post production.
     
    There is no right answer on how a TFS 2010 upgrade should be accomplished. Each environment is unique in both needs and desires. By keeping yourself updated with latest documentation, taking your time to plan and test the process, and seeking outside help when you are unsure, you will be well on your way to a successful TFS 2010 upgrade.
     
     
      - Shad Timm

    Posted in Team Foundation Server | Tagged | Leave a comment