Teched 2011 – Implantando Continuous Delivery com TFS

Pessoal, muito obrigado a todos que puderam participar da palestra DEV307 -Implantando Continuous Delivery com TFS, realizada por mim e pelo Igor Abade. Espero que vocês tenham gostado.

Segue abaixo os slides da palestra, além de alguns links importantes.

 

Até a próxima,
André Dias

Publicando arquivos em servidor FTP usando MSBuild

Esse post foi motivado pelo seguinte tweet que recebi do @TucaZ: “@AndreDiasBR Poxa, eu só queria fazer FTP dos meus arquivinhos aqui 🙁”. Na verdade, essa foi à mensagem final depois de diversas sugestões “mais robustas” que tanto Eu como o Igor Abade demos ao Tuca.

Entre as sugestões que mencionamos, estão a utilização do Web Deploy, que é uma ferramenta fantástica para fazer automação de deployment, que pode empacotar a sua solução, enviar para o servidor, criar o site do IIS, configurá-lo, entre outras coisas, e o BRD Lite dos ALM Rangers, que nada mais do que é um template de build que simplifica diversas atividades comuns de Build, Release e Deployment que temos que fazer no nosso dia a dia.

Essas duas soluções fazem muito mais do que o Tuca precisa, mas sem dúvida tem um custo de implantação e configuração que muitas pessoas podem achar desnecessário e, que no caso dele, faz total sentido não utilizar, uma vez que ele já tinha todo o pacote montado e queria apenas enviar o pacote para o servidor ftp.

Vamos lá! Vamos entender como fazer isso então:

MSBuild Extension Pack

Para essa solução, vamos utilizar um projeto open source chamado MSBuild Extension Pack, que contém diversas tasks úteis para o MSBuild e é coordenado pelo Mike Fourie, Visual Studio ALM Ranger e pelo Sayed Hashimi, autor do livro Inside the Microsoft Build Engine: Using MSbuild and Team Foundation Build.

A instalação desta ferramenta é bastante tranquila e segue o padrão next, next, finish. Ao final da instalação, você verá que uma pasta chamada ExtensionPack foi criada dentro da pasta C:Program FilesMSBuild.

O próximo passo é criar um script MSBuild que fará uso das novas tasks fornecidos pelo Extension Pack.

<Import Project="$(MSBuildExtensionsPath)ExtensionPack4.0MSBuild.ExtensionPack.tasks"/>

<Target Name="PublicacaoFTP">
  <Message Text="Iniciando Publicao FTP" Importance="high" />
    
  <ItemGroup>      
    <FilesToUpload Include="$(ProjectDir)***.aspx" />
    <FilesToUpload Include="$(ProjectDir)***.js" />
    <FilesToUpload Include="$(ProjectDir)***.css" />
    <FilesToUpload Include="$(ProjectDir)***.dll" />
    <FilesToUpload Include="$(ProjectDir)***.config" />
  </ItemGroup>
    
  <MSBuild.ExtensionPack.Communication.Ftp TaskAction="UploadFiles" 
                                            Host="localhost" 
                                            UserName="ftpuser" 
                                            UserPassword="P2ssw0rd" 
                                            FileNames="@(FilesToUpload)"/>

  <Message Text="Publicao FTP Concluída" Importance="high" />

</Target>

Note que o script não é nada complexo. No início, ele faz a importação das tarefas do Extension Pack, em seguida cria uma target para agrupar as atividades, então ele seleciona quais os arquivos que serão publicados e por último e o mais importante, ele chama a task MSBuild.ExtensionPack.Communication.Ftp que fará todo o trabalho pesado de enviar os arquivos para o servidor FTP.

Essa tarefa também pode ser utilizada para fazer download de servidores FTP caso você mude o parâmetro TaskAction para “DownloadFiles”.

Executando o Script

O script acima está praticamente pronto para ser executado através de linha de comando usando o MSBuild.exe, mas a solução fica mais “elegante” se a integrarmos com o processo de build do Visual Studio.

Para isso, vamos criar uma simples Web Application e modificar o arquivo do projeto para que toda vez que a solução for compilada em modo Release, ele seja também publicada em um servidor FTP.

Depois da Web Application criada, clique com o botão direito no projeto e selecione a opção Unload Project, depois clique com o botão direito novamente sobre o projeto e clique em Edit. O que você verá nada mais é do que um XML que é um script MSBuild.

Vá ao final do arquivo, descomente o target AfterBuild e dentro dele utilize a task CallTarget para chamar o script que nós criamos. Utilize também o atributo Condition para garantir que essa chamada seja realizada apenas se o modo de compilação for Release. O seu código deverá ficar parecido com o script abaixo:

<Target Name="AfterBuild">
  <CallTarget Targets="PublicacaoFTP" Condition="'$(Configuration)' == 'Release'" />
</Target>

Está pronto! Para testar é só compilar a sua solução em modo Release e tudo deverá funcionar.

É isso aí pessoal. Espero que essa solução ajude, não apenas o Tuca, mas também a todos os Build Masters.

Abraços e até a próxima
André Dias

TFS Aggregator: Cálculos e Agregações em Work Items

Alguns dos pedidos mais frequentes que ouço durante as consultorias que dou, são:

  • Gostaria de fechar um Work Item pai, quando todos os filhos forem fechados;
  • Quando eu atualizar as horas de uma tarefa, eu quero que a User Story ou o PBI mostre as horas restantes consolidadas;
  • Assim que uma atividade filha (task) tiver o seu status alterado para “In Progress” eu gostaria que o pai fosse automaticamente alterado para “In Progress” também.

Uma das formas de atender esses pedidos é utilizar o SDK do TFS assinando eventos de servidor, porém essa abordagem exige um conhecimento avançado do produto para que você possa manipular as APIs de conexão e de work items. Outra forma que também atende essas necessidades, porém de uma maneira muito mais simples, pois ela encapsula toda a manipulação das APIs do TFS, é com a utilização de um plug-in open source chamado TFS Aggregator.

Com o TFS Aggregator, você pode configurar ações para interpretar mudanças em work items e atualizar campos dos próprios work items alterados, campos de work items pais, simplesmente manipulando um único arquivo xml. Vamos conhecê-lo um pouco melhor:

Instalação

O processo de instalação do TFS Aggregator é bastante simples. Basta você fazer o download do plug-in e descompactar o arquivo dentro da pasta de plug-ins do TFS, normalmente no seguinte endereço: C:Program FilesMicrosoft Team Foundation Server 2010Application TierWeb ServicesbinPlugins.

Após descompactar o zip, você verá dois arquivos:

  • TFSAggregator.dll: é o plug-in que fará a interpretação dos eventos;
  • AggregatorItems.xml: é o arquivo onde definiremos os eventos que iremos tratar;

pasta plugins tfs

Configuração

O processo de configuração também é bastante simples. Dentro do arquivo XML, você possui um elemento principal chamado AggregatorItems, onde você definirá a URL do seu servidor TFS e depois você criará uma série de elementos do tipo AggregatorItem, onde cada elemento desse tipo representa um regra que o plug-in irá tratar.

O arquivo de configuração, de maneira bastante simplificada, fica da seguinte forma:

<?xml version="1.0" encoding="utf-8"?> 
<AggregatorItems tfsServerUrl="http://tfs2010dev:8080/tfs" >
<AggregatorItem operationType="Numeric" operation="Sum" 
		linkType="Self" workItemType="Task">
	<TargetItem name="Estimated Work"/>
	<SourceItem name="Estimated Dev Work"/>
	<SourceItem name="Estimated Test Work"/>
</AggregatorItem>
</AggregatorItems>

No exemplo acima, temos a configuração do nosso servidor e uma única regra de agregação que monitora todos os work items do tipo Task, soma os valores dos campos Estimated Dev Work e Estimated Test Work e insere no campo Estimated Work.

Obviamente existem cenários bem mais complexos que esse e para conhecer todo o potencial do plug-in, não deixe de visitar a documentação do TFS Aggregator.

Cenários de Utilização

Vamos ver abaixo como o plug-in resolve de forma bastante objetiva algumas das principais dúvidas citadas no início do post:

Cenário 1: Fechar um work item pai quando todos os filhos forem fechados

<AggregatorItem operationType="String" linkType="Parent" linkLevel="1" workItemType="Task">
  <Mappings>
    <Mapping targetValue="Done" inclusive="And">
      <SourceValue>Done</SourceValue>
    </Mapping>
  </Mappings>
  <TargetItem name="State"/>
  <SourceItem name="State"/>
</AggregatorItem>

Cenario 1 

Cenário 2: Somar o remaining work de todos os filhos e inserir em um campo do work item pai

<AggregatorItem operation="Sum" linkType="Parent" linkLevel="1" workItemType="Task">
  <TargetItem name="Business Value"/>
  <SourceItem name="Remaining Work"/>
</AggregatorItem>

Cenario 2

Cenário 3: Mudar um PBI para Commited assim que qualquer tarefa tiver seu status como In Progress

<AggregatorItem operationType="String" linkType="Parent" linkLevel="1" workItemType="Task">
  <Mappings>
    <Mapping targetValue="Committed" inclusive="Or">
      <SourceValue>In Progress</SourceValue>        
    </Mapping>
  </Mappings>
  <TargetItem name="State"/>
  <SourceItem name="State"/>
</AggregatorItem>

Cenario 3

Agora, você que já teve que trabalhar com a API do TFS para fazer a mesma coisa deve estar se perguntando: “Por que eu não descobri isso antes?”. Pois é, foi a pergunta que me fiz quando descobri esse plug-in.

Espero que seja útil para vocês.

Até a próxima,
André Dias

Como adicionar um novo item na Quick Launch do TFS Project Portal

O título deste post foi exatamente o pedido que um cliente me fez. Nós tínhamos acabado de criar uma Document Library e ele queria, simplesmente, adicionar um link para ela no Quick Launch. Ahhh, um pequeno detalhe: ele queria que essa alteração fosse válida para todos os sites novos, ou seja, a alteração deveria ser no template do portal.

Na mesma hora eu pensei: “Beleeeeza, vou lá no Site Settings, Quick Launch, adiciono o novo link, exporto o site alterado como um template, faço a importação do template alterado com um outro nome, altero o WssTasks.xml para usar o novo template e pronto. Problema resolvido”.

Mal sabia eu que essa solução tão simples não funcionava mais com o TFS 2010. Pois é, devido a grande mudança nos Dashboards da versão 2010, o TFS passou a utilizar features como meio de customização dos Portais. Com isso, durante a criação de um Team Project, o PCW (Project Creation Wizard) verifica quais recursos instalados o SharePoint possui (Excel Services, por exemplo) e segue habilitando as features de Dashboard de acordo com esses recursos.

Burndown Dashboard   Infrastructure Team Dashboard

Depois de descobrir que a minha solução de customização de portal para o TFS 2008 não era mais válida para o TFS 2010, comecei a buscar outras soluções. Procurei em blogs, documentação do produto, questionei em listas privadas da Microsoft e nada. Até achei algumas soluções que faziam a inclusão de links via SDK, mas confesso que achei inadmissível ter que usar código pra fazer algo tão simples. Pedi ajuda pros MVPs e Rangers da Lambda3 e alguns dias depois, o grande Claudio Leite, me apareceu com uma solução digna de respeito: uma customização através features usando apenas arquivos .xml. Vamos ver abaixo como ficou isso.

Criação da Feature

O primeiro passo é a criação da Feature. Para isso, vamos criar dois arquivos XML, o primeiro é o feature.xml, que descreve a feature, e o segundo vamos chamar de elements.xml que será o arquivo que descreverá todos os recursos utilizados pela feature.

Vamos ao primeiro arquivo:



Como podemos ver, é um arquivo bastante simples e temos que nos preocupar, basicamente, com 3 parâmetros:

  • ID: Precisa ser um GUID. Se você não sabe como criar um, basta acessar o menu Tools do seu Visual Studio e acessar a opção Create GUID;
  • Title: Título da feature que aparecerá na lista de features ativadas no seu site;
  • Scope: Precisa ser Web, pois a feature funcionará para cada site instalado no servidor;

O próximo passo é criar o Elements.xml:



  
  
  

Esse arquivo já é um pouco mais complicado. Vamos entendê-lo:

Elemento ListInstance

É o elemento que vai criar a biblioteca de fato.

  • FeatureID: não pode ser alterado, ele é referente a feature base de Document Library do Sharepoint;
  • TemplateType: idem ao acima. É um modelo da biblioteca;
  • ID: nome interno da biblioteca no sharepoint. Não pode ter espaços;
  • Description: descrição da lista;
  • Title: título da biblioteca e o que aparecerá nos links dentro do Sharepoint. Deve ser único;
  • OnQuickLaunch: É o objetivo principal deste post! É o atributo que vai fazer a Document Library aparecer no Quick Launch;
  • Url: URL relativa do site, de preferência, sem acentuação e espaços;

Caso você queira publicar arquivos junto com a criação da document library, não deixe de consultar os elementos Module e File.

Instalação da Feature

Uma vez que temos os arquivos criados, vamos colocá-los em uma pasta chamada MinhaFeature e vamos copiá-la para pasta de features do SharePoint, normalmente em C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions12TEMPLATEFEATURES.

Feito isso, vamos rodar o seguinte comando para instalar a feature no servidor:

C:Program FilesCommon Filesmicrosoft sharedWeb Server 
Extensions12BINstsadm -o installfeature -name MinhaFeature

Pronto, a nossa feature está instalada e pronta para ser usada.

Configuração do Template

Agora vamos ao último passo, vamos informar ao nosso template para utilizar a feature que acabamos de criar. Para isso, acesse o arquivo <Process Template> Windows SharePoint ServicesWssTaks.xml e dentro do elemento activateFeatures, insira o novo elemento abaixo:

<feature featureId="23C75B71-7FFA-4E03-AD04-4A7FE7700AD7" /> 

Importante: O atributo featureId deve conter o mesmo GUID gerado para o arquivo feature.xml.

Depois do template configurado, basta fazer o upload do seu Process Template para o TFS 2010 e assim que um Team Project for criado, você deverá ver imagens parecidas com as imagens abaixo:

quick launch  moss feature

É isso aí. Por isso que eu adoro esse produto, não basta conhecer TFS para trabalhar com ALM, você precisa conhecer SharePoint, SQL Server, Reporting Services, Analysis Services, IIS, Project Server, Windows Server e isso para citar apenas produtos, ou seja, é diversão que não acaba mais e oportunidade para aprender sempre.

Espero que tenham gostado.

Abraços e até a próxima,
André Dias

Como impedir o desenvolvedor de sobrescrever a política de check-in no TFS?

Vocês devem estar se perguntando: que raio de agilista sou eu, escrevendo esse post que ensina como “colocar uma algema” nas mãos do desenvolvedor e viola, praticamente, todos os princípios ágeis? Quero deixar claro que não recomendo que vocês apliquem isso em suas empresas e que o objetivo do post é apenas demostrar como trabalhar com eventos de servidor do TFS, ok? Vamos lá!

Políticas de Check-In

Uma das primeiras configurações que as pessoas fazem assim que começam a utilizar o TFS é habilitar as políticas de check-in no source control. Isso não é por acaso, esse é um processo bastante simples e extremamente tentador, já que com apenas alguns cliques, o administrador pode habilitar políticas para:

  • Garantir que o programador não esqueça de colocar comentários no check-in;
  • Associar o check-in com algum work item;
  • Garantir que o código está seguindo o Code Analysis;
  • Garantir que o programador não suba um código com a build quebrada e dificulte ainda mais a correção da build;
  • Garantir que os testes foram executado antes do check-in;
  • E muitos outros

políticas de check-in

Legal! É uma lista bastante tentadora, mas use-a com moderação. A minha experiência em consultoria diz que quando você liga todas essas políticas, sem a aprovação e a conscientização do time de desenvolvimento, lá na máquina do desenvolvedor, o resultado será o seguinte:

sobreescrever política

Isso mesmo, ele vai sobrescrever a política e não vai dar a mínima para as políticas que ele deveria seguir.

A minha dica aqui é: um time é diferente do outro, deixe para cada time a decisão de quais políticas utilizar. Não imponha nada, no máximo peça para experimentarem e analisar os benefícios antes de decidirem se vão ou não usar alguma política.

Agora vamos imaginar que você tenha realmente um forte motivo para impedir que o desenvolvedor sobrescreva as políticas de check-in e que você queira garantir que o TFS não deixe de forma alguma que a políticas sejam violadas.

Eventos de Servidor

O TFS possui diversos eventos de servidor. Esses eventos são disparados pelos mais diversos componentes do TFS, entre eles source control, build, work item tracking, entre outros. Os eventos também possuem duas classificações: Eventos de Notificação, onde você pode disparar uma ação qualquer e Eventos de Decisão, onde você pode cancelar ações e interagir com o usuário.

Para a nossa solução, vamos basicamente criar uma classe que implemente a interface de notificação do TFS, a ISubscriber, e que trate o evento de decisão chamado CheckinNotification. Vamos ver passo a passo como fazer isso:

  1. Instale o Visual Studio 2010 SP1 SDK, se você não o tiver instalado;
  2. Crie um projeto do tipo Class Library;
  3. Referencie os seguintes namespaces:
    using System;
    using Microsoft.TeamFoundation.Framework.Server;
    using Microsoft.TeamFoundation.Common;
    using Microsoft.TeamFoundation.VersionControl.Server;
    
    
  4. Implemente a interface ISubscriber:
    public class BloqueadorViolacaoPolitica : ISubscriber
    
  5. Crie uma propriedade read-only chamada Name que identifique o seu event handler:
    private const string _name = "Bloqueador de Violacao de Politica";
    
    public string Name
    {
        get { return _name; }
    }
    
  6. Defina a prioridade que o seu evento será tratado:
    public SubscriberPriority Priority
    {
        get { return SubscriberPriority.Normal; }
    }
    
  7. Defina os tipos de eventos que o seu event handler vai tratar:
    public Type[] SubscribedTypes()
    {
        return new Type[] { typeof(CheckinNotification) };
    }
    
  8. E por último e mais importante, implemente a regra que vá impedir o check-in caso o programador tente violar a política:
    public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext,
        NotificationType notificationType,
        object notificationEventArgs,
        out int statusCode,
        out string statusMessage,
        out ExceptionPropertyCollection properties)
    {
        statusCode = 0;
        statusMessage = string.Empty;
        properties = null;
    
        if (notificationType == NotificationType.DecisionPoint 
            && notificationEventArgs is CheckinNotification)
        {
            CheckinNotification data = notificationEventArgs as CheckinNotification;
            if (!string.IsNullOrWhiteSpace(data.PolicyOverrideInfo.Comment))
            {
                statusMessage = "Check-in nao permitido. Verifique as politicas violadas.";
                    
                statusCode = -1;
                return EventNotificationStatus.ActionDenied;
            }
    
        }
        return EventNotificationStatus.ActionPermitted;
    }
    
    

Veja que o código é bastante simples. Eu tenho basicamente que verificar se o evento que estou recebendo é um CheckinNotification é do tipo de NotificationType.DecisionPoint e se for, eu devo verificar também se houve algum comentário inserido para justificar a violação. Se houve comentário, significa também que houve também uma violação de política e a partir daí é só informar ao evento que ele não deve permitir o check-in.

Isso é feito através do retorno EventNotificationStatus.ActionDenied e eu aproveito para retornar também um mensagem e um código de erro para informar ao desenvolvedor que aquela ação não é permitida.

Uma vez a dll compilada, basta eu copiá-la para o diretório de plug-ins do TFS, no C:Program FilesMicrosoft Team Foundation Server 2010Application TierWeb ServicesbinPlugins e pronto. Minha nova regra já está valendo e na prática, o usuário verá um tela parecida com essa:

check-in nao permitido

Abaixo você tem o código completo da classe:

using System;
using Microsoft.TeamFoundation.Framework.Server;
using Microsoft.TeamFoundation.Common;
using Microsoft.TeamFoundation.VersionControl.Server;

public class BloqueadorViolacaoPolitica : ISubscriber
{
    private const string _name = "Bloqueador de Violacao de Politica";

    public string Name
    {
        get { return _name; }
    }

    public SubscriberPriority Priority
    {
        get { return SubscriberPriority.Normal; }
    }

    public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext,
     NotificationType notificationType,
     object notificationEventArgs,
     out int statusCode,
     out string statusMessage,
     out ExceptionPropertyCollection properties)
    {
        statusCode = 0;
        statusMessage = string.Empty;
        properties = null;

        if (notificationType == NotificationType.DecisionPoint 
         && notificationEventArgs is CheckinNotification)
        {
            CheckinNotification data = notificationEventArgs as CheckinNotification;
            if (!string.IsNullOrWhiteSpace(data.PolicyOverrideInfo.Comment))
            {
                statusMessage = "Check-in nao permitido. Verifique as politicas violadas.";
                
                statusCode = -1;
                return EventNotificationStatus.ActionDenied;
            }

        }
        return EventNotificationStatus.ActionPermitted;
    }

    public Type[] SubscribedTypes()
    {
        return new Type[] { typeof(CheckinNotification) };
    }

}

Bom galera, é isso! Como eu disse no início do post, não recomendo que vocês implantem essa solução em produção e espero que vocês tenham entendido como tratar os eventos de servidor do TFS.

Até a próxima
André Dias

ALM – A Análise da Análise!

Em novembro de 2010, o Gartner publicou uma pesquisa sob o título “MartetScope for Application LifeCycle Mangement”. É uma pesquisa que, basicamente, avalia diversas ferramentas de ALM e as classificam entre Forte Positivo, Positivo, Promissora, Cautela e Forte Negativo e a IBM foi à única empresa que recebeu o Forte Positivo entre as 20 empresas avaliadas.

Não posso dizer que fiquei surpreso com o resultado, afinal a IBM lidera esse mercado há algum tempo, no entanto, estranhei a ausência da plataforma de ALM da Microsoft na mesma posição e estranhei ainda mais o Gartner classificando a plataforma da Microsoft apenas como positivo, ao lado da HP, que até hoje não entendeu o real significado de ALM e apresenta uma suíte de testes e gerenciamento de requisitos como plataforma de ALM.

Diante dessas classificações, no mínimo, curiosas, eu resolvi fazer uma análise da análise do Gartner, uma instituição extremamente respeitada, para tentar entender porque a IBM é TOP 1 e a HP, com o seu “ALM” capenga, está ao lado da Microsoft.

Antes de começar a minha análise, convido vocês a assistirem esse vídeo do David Chappell que esclarece muito bem o que é ALM.

Minha análise começa pelo final do documento. Lá no trecho onde eles explicam o que significa cada classificação

Strong Positive

Is viewed as a provider of strategic products, services or solutions:

  • Customers: Continue with planned investments.
  • Potential customers: Consider this vendor a strong choice for strategic investments.

Positive

Demonstrates strength in specific areas, but execution in one or more areas may still be developing or inconsistent with other areas of performance:

  • Customers: Continue planned investments.
  • Potential customers: Consider this vendor a viable choice for strategic or tactical investments, while planning for known limitations.

Interessante: um dos critérios de avaliação com mais relevância é a opinião dos potenciais clientes, ou seja, clientes que talvez nunca tenham utilizado o produto ou clientes que talvez nunca tenham estudado o produto a fundo para saber se as “limitações conhecidas” são realmente limitações ou se é apenas um FUD (Fear Uncertainty Doubt) da concorrência.

Nada contra esse critério de avaliação, afinal as opiniões dos clientes são fundamentais e acredito que a Microsoft precisa trabalhar para melhorar essa falta de visibilidade apontada no estudo. Porém, opinião de cliente é um item extremamente subjetivo e pode ter uma variação bastante grande dependendo do critério de amostragem utilizado.

Em minha opinião, o peso deste critério afeta absurdamente a credibilidade deste estudo e só isso já seria suficiente para eu ignorar todo o resto do documento. No entanto, o estudo traz também algumas comparações técnicas, o que me fez continuar com a leitura. Vamos ver então o que o Gartner diz sobre as ferramentas da IBM, HP e Microsoft:

IBM

“IBM is one of the few vendors with credible offerings in almost all the subcategories of ALM – requirements, software change and configuration, quality, build and distribution domains – while also offering a wealth of methodology content and workflow support…”

“The centerpiece of IBM’s current ALM offering is Rational Team Concert (RTC)”

“IBM positions RTC both as the solution for small and midsize teams”

Até aqui, nenhum diferencial em relação às outras ferramentas. É uma ferramenta de ALM completa, com um servidor centralizado que atende times de tamanhos variados.

“The original Rational ALM solution, built around ClearCase and ClearQuest, remains the lead offering for larger organizations using traditional methods, but will be eventually replaced by newer products, creating an upgrade path for the installed base”

Issue Tracking e SCCM como solução de ALM? Nem vou comentar. Se você não estendeu o porquê, volte no início do post e assista o vídeo do David Chappell.

“IBM is managing a complex product transition. Gartner clients (…) had been telling us that they were looking at open source and other commercial alternatives in search of ease of use, lower administrative overhead, lower cost of ownership and different mixes of functionality”

“The big installed base may create challenges for IBM in the sense that it will be difficult to migrate existing customers to the new solutions”

“IBM still has to remove differences among the various Jazz platform offerings to resolve the installation and use difficulties reported by many of our clients.”

Neste ponto, vale a pena compartilhar uma experiência não tão agradável que tive quando fui instalar o RTC 3.x.

Basicamente, eu queria instalar o produto utilizando, como banco de dados, o SQL Server 2008. Nada complexo para uma ferramenta multi-banco, certo? Não foi bem assim! Enquanto que em algumas ferramentas, um simples wizard com Next, Next and Finish me auxilia a completar esse passo, validando se todos os pré-requisitos estão realizados, o RTC dá uma aula de como não fazer uma aplicação user friendly.

Eu utilizei como guia este documento da própria IBM http://publib.boulder.ibm.com/infocenter/clmhelp/v3r0/index.jsp?topic=/com.ibm.jazz.install.doc/topics/t_s_server_installation_setup_sql.html.

Basicamente ele nos pede para:

  • Criar um banco de dados;
  • Criar um login;
  • Alterar a collation e o row versioning do banco de dados;
  • Baixar o JDBC driver do banco;
  • Copiar os .jars para diretórios específicos;
  • Alterar a connection string em arquivos de propriedades;
  • Executar alguns comandos para criar tabelas;

E por aí vai! Confesso que me lembrei da época em que programava em Java e usava produtos Open Source sem nenhuma preocupação com o usuário.

Acho que isso mostra bem porque os clientes atuais estão procurando ferramentas mais fáceis de usar, com baixo trabalho administrativo e melhor TCO (Total Cost of Ownership).

“The published Jazz platform road map states that many Rational products can gain the benefits of the Jazz platform…”

Roadmap? Avaliar desejos e promessas para comparar ferramentas, em minha humilde opinião, não faz o menor sentido. Vou lançar um produto chamado “ALM do André v1.0” e dizer que na versão 2.0 a ferramenta vai assoviar, chupar cana e dar um triplo twist carpado invertido. Não dúvido que eu tire o primeiro lugar da IBM com esse roadmap.

“To enable standards-based integration between both IBM and third-party tools, IBM is supporting OSLC (an open XML- and REST-based tool integration format)…”

Isso é muito legal. Queria ver isso na plataforma da Microsoft.

“Scalability and performance of the Jazz-based products continue to improve…”

Muito bom, isso é um pré-requisito de qualquer ferramenta de ALM respeitável.

“We rate IBM as a Strong Positive because of its installed base and breadth of portfolio”

Em outras palavras: “Nós classificamos a IBM como forte positivo em ALM porque ela possui muitos ClearCase e ClearQuest instalados, apesar de não serem ferramentas de ALM, e porque ela possui diversos produtos, mesmo que eles sejam difíceis de instalar, migrar e não se comuniquem muito bem”.

Ah, só pra deixar claro, isso não é necessariamente a minha opinião. É apenas um resumo de tudo que está escrito no estudo.

HP

O estudo apresenta apenas dois parágrafos sobre as ferramentas da HP. Imagino que seja porque ela simplesmente não possui uma ferramenta de ALM (Lembram-se do vídeo do Chappell?). Ainda assim, vamos ver o que o estudo diz:

HP’s greatest assets are its existing installed base for PPM and quality, its sales force, and its consulting group. We think these will help establish HP as a major provider of ALM functionality. A key factor will be HP’s ability to manage partnerships to complete the solutions for clients with higher needs for agile or complex product development.

O estudo é sobre ferramentas de ALM e ele me diz que os maiores destaques da HP são o time de vendas e o grupo de consultoria? Só se for pra vender e realizar integrações com outras ferramentas para deixar o ALM da HP menos capenga.

Sinceramente, não consigo entender como HP e Microsoft estão classificadas no mesmo nível neste estudo.

Microsoft

Visual Studio 2010 gives Microsoft’s ALM offering a new, more-cohesive look, and addresses pricing and administration obstacles that have limited the use and adoption of the ALM offering.

With Visual Studio 2010, Microsoft reduced the prices of both the VS client and the Team Foundation Server (TFS) component.

Another plus for Microsoft is the strength of its Microsoft Developer Network (MSDN) franchise. Relatively low cost and ease of acquisition make MSDN a realistic channel to sell ALM into many accounts.

Redução de preço sempre é bem vinda. O alto custo das versões anteriores do produto somado com o seu pouco tempo de estrada, acabava sendo um impedimento para a adoção do TFS em diversas empresas.

A redução de preço, junto com incentivos do programa MSDN que cede gratuitamente o TFS para assinantes, acabaram viabilizando a grande adoção do produto.

Microsoft also incorporated interfaces to leverage its project and PPM offerings, as well as its agile methodology positions, to build awareness and commitments in larger clients.

Sem dúvida, a integração com o Project Server 2010 e a parceria com a Scrum.Org e o Ken Schwaber, para a criação de um template de processo baseado em Scrum foram dois dos grandes destaques de 2010.

Hoje em dia, temos dois grandes grupos de metodologias de gerenciamento de projetos de software: a metodologia “tradicional” com PMPs, seus Gantt Charts e planilhas de gerenciamento e as metodologias ágeis famosas pela sua simplicidade e planejamento constante e até o lançamento do Visual Studio 2010, a Microsoft não tinha ferramentas de primeira linha para atender a esses dois mundos.

(…) many of the gaps are “filled,” and clients have the ability to exploit existing investments in products like HP Quality Center. Microsoft’s recent contributions to filling in the gaps include testing, lab management and modeling in the Visual Studio 2010 release.

O investimento na área de qualidade foi muito grande. Até o Visual Studio 2008, a Microsoft não era conhecida por ferramentas de QA e, sem fazer muito barulho, ela chega ao mercado com o Microsoft Test and Lab Management e o Coded UI. Ferramentas completas para testes funcionais manuais e automatizados, além do gerenciamento de ambientes de testes virtuais. Sem dúvida, uma grande surpresa para o mercado, para clientes e principalmente para os concorrentes.

Substantial improvements to administrative facilities have been delivered in Visual Studio 2010.

O grande destaque deste item fica por conta do Team Foundation Administration Console, um ambiente visual onde é possível realizar grande parte das tarefas administrativas do TFS, porém para tarefas mais avanças, a linha de comando continua sendo uma ferramenta indispensável.

Another area of improvement is the ability to customize workflows, adding flexibility in supporting both agile and more-formal development processes, as well as enabling support from third parties.

Além do já citado template oficial de Scrum, homologado pela Scrum.org, a ferramenta oferece de forma nativa, outros templates para processos de desenvolvimento mais formais como o CMMi.

A grande novidade da versão 2010 fica por conta da criação do programa Visual Studio Certified Process Templates Program que avalia se templates criados por parceiros foram desenvolvidos seguindo as recomendações e se oferecem suporte e treinamento 

Additionally, there are more reporting and analytic capabilities.

Utilizando como base a plataforma de BI e o Reporting Services do SQL Server 2008, o TFS melhorou sensivelmente seus recursos de relatórios. Relatórios mais apresentáveis, com informações mais claras, com explicações sobre como interpretá-los e links para relatórios relacionados permitem que você tenha uma visão completa da saúde de seus projetos.

Microsoft improved support for Eclipse and for other non-Microsoft environments with Visual Studio Team Explorer Everywhere 2010. This permits users to store artifacts in TFS.

Cross-platform support in other parts of the solution are limited, so a separate Java tool stack is likely needed.

Uma grande crítica que a Microsoft recebia até a versão 2008 do TFS, era que a plataforma era extremamente produtiva, porém só funcionava com Visual Studio e aplicações .net. Na versão 2010 isso mudou muito e agora usuários de Eclipse possuem a mesma usabilidade que um programador .net dentro do Visual Studio.

Além disso, outros ambientes como Mac, Linux e até mainframe são suportados através de linha de comando.

O estudo aponta também uma limitação de integração dizendo que outras ferramentas como IntelliJ e JDeveloper não possuem integração nativa com o TFS. Realmente a plataforma de ALM da Microsoft não oferece plug-ins para essas ferramentas e acredito que, devido ao grande número de ferramentas existentes para Java, a Microsoft irá utilizar a abordagem de deixar esse suporte para parceiros.

Microsoft has a strong reach in the market, and moderate pricing for a large, stable provider. It has a proven, scalable architecture. A large community of supporting vendors helps fill gaps in the tool portfolio.

Rating: Positive

Em outras palavras, apesar da Microsoft ter recebido apenas elogios no estudo, ter um forte alcance no mercado, uma política de preços moderados, uma arquitetura escalável, suporte a agilidade e a métodos tradicionais, diversas melhorias na instalação, ferramentas de testes, relatórios, interoperabilidade, a Microsoft é classificada apenas como Positivo.

Conclusão

Minha conclusão, com todo respeito ao Gartner, é que esse estudo está cheio de falhas e que foi feito por pessoas diferentes com critérios de avaliação diferentes.

Ele relata claramente dificuldades de instalação e migração na plataforma IBM, afirma que clientes estão buscando alternativas com mais facilidade de uso e menor custo de manutenção e que a classificação como forte positivo é baseado no grande número de clientes que utilizam ClearCase e ClearQuest e no grande número de produtos disponíveis que possuem dificuldades de integração.

Por outro lado a Microsoft, que possui uma plataforma completa de ALM, que só recebeu elogios durante o estudo e que apresentou melhorias em diversos componentes de sua plataforma é classificada apenas como positivo ao lado da HP, que não possui uma ferramenta de ALM, tendo como grande destaque o seu time de vendas e grupo de consultores.

De qualquer forma, o paper não é totalmente inútil. Ele nos ajuda a conhecer um pouco mais sobre outras ferramentas.

Aproveito esse espaço também para deixar um conselho a todos vocês. Sempre que algum consultor ou vendedor tentar te oferecer um produto baseado em opiniões de entidades externas, mesmo que extremamente conhecidas e respeitadas, desconfie! Peça para ler o estudo, analise-o atentamente, instale a ferramenta, faça uma PoC (Prova de Conceito) e tire as suas próprias conclusões!

É isso pessoal, espero que tenham gostado!

Abraços e até a próxima.

Obs: Normalmente esses estudos são pagos e empresas como IBM e Microsoft compram o direito de reprodução para disponibilizar o estudo a seus clientes. O estudo completo, onde fiz a minha análise, pode ser encontrado publicamente no blog do Bruno Braga, IT Specialist da IBM Rational, no seguinte endereço http://www.brunobraga.com.br/files/Gartner_2010_ALM.pdf

ALM Summit Brasil – O maior evento de ALM do país

No próximo dia 27/11, teremos a primeira edição do ALM Summit Brasil. Se você não sabe bem o que é ALM ou ainda está em dúvida de vale a pena ir ou não, confira abaixo um raio-x do evento.

O que é ALM?

ALM ou Application Lifecycle Management nada mais é do que um conjunto de práticas distribuídas entre 3 pilares: Pessoas, Processos e Ferramentas. São esses pilares que suportam uma aplicação desde o seu nascimento até o momento que ela deixa de ser utilizada.

Legal, ficou um pouco teórico, vamos ver um exemplo prático: Podemos dizer que quando alguém tem alguma ideia ou necessidade e esta vai para um portfolio de projetos, o seu ciclo de vida já começa a ser gerenciado e a governança começa atuar sobre ele. Em seguida esse projeto será priorizado, estimado, os requisitos serão levantados, a aplicação será construída e colocada em produção. Neste instante, a aplicação deixa de ser um projeto e vai para o portfolio de aplicativos, pois ela passa a ser um ativo da empresa, ela já começa a gerar algum ROI (Retorno sobre Investimento), seja ele financeiro ou não. Porém, o ciclo não acaba aí. Precisamos monitorar essa aplicação o tempo todo para avaliarmos se vale a pena mantê-la ativa, se ela precisa de evoluções, se o custo de manutenção está muito alto ou se ela não dá mais nenhum retorno e já pode ser descontinuada.

Resumindo, se você é um gerente de projetos, desenvolvedor, arquiteto, tester, analista de negócio, profissional de infraestrutura ou desempenhe qualquer outro papel necessário para desenvolver um software, você está usando alguma das práticas do ALM. Scrum, CMMi, PMBoK, TDD, Integração Contínua, IoC, Gerenciamento de Portfolio de Projetos, .NET, Java e todos os demais frameworks, práticas, técnicas e tecnologias que você conhece estão debaixo do guarda-chuva do ALM.

Qual o propósito do evento?

Esse evento tem o objetivo de ser um evento anual, onde discutiremos as tendências e desafios do ALM no Brasil e no mundo. Esta primeira edição foi inspirada no ALM Summit americano que contará com grandes nomes do mercado como Ken Schwaber (criador do Scrum), Brian Harry (pai do Team Foundation Server), Dave West (Analista da Forrester, uma das líderes mundiais em pesquisa de mercado) e Tony Scott (CIO da Microsoft).

Na edição 2010, teremos duas sessões gerais, vamos reproduzir 7 palestras do ALM Summit americano, teremos também 3 palestras inéditas com alto conteúdo técnico e por fim teremos uma sessão chamada ASK THE EXPERTS, onde o público poderá esclarecer suas dúvidas com os palestrantes do evento.

Visão Geral da Programação

O evento começará com uma sessão geral, onde Rodrigo de Carvalho (Microsoft) e Giovanni Bassi (Lambda3) falarão sobre as tendências e desafios do ALM. Eles também farão um overview de como foi o ALM Summit americano e por fim, o Paulo Yamada (Secretaria da Fazenda – SP) comentará sobre uma implantação de ALM realizada na SeFaz-SP.

Em seguida partiremos para as palestras simultâneas. Teremos duas tracks, sendo uma extremamente técnica e outra abordando conceitos, negócios e algum conteúdo técnico também.

Nas sessões de antes do almoço teremos 4 palestras cobrindo o ALM em ambientes heterogêneos, falando sobre o uso do ALM com Java, Linux, Mac, etc. Teremos palestras falando sobre testes em ambientes ágeis, continuous delivery que é um conceito um pouco além da integração contínua e teremos um palestra que entrará bem a fundo na customização de relatórios do TFS.

Após o almoço teremos mais 4 palestras. Do lado técnico, teremos uma focada na customização avançada de Work Items e outra também focada na customização avançada do Team Build. Na sala de negócios, teremos outras duas falando sobre o verdadeiro conceito por trás do ALM e sobre os estilos de gerenciamento de projetos e desenvolvimento colaborativo. Simplesmente imperdível!

Ao final, teremos outra sessão geral, onde Giovanni Bassi fará uma reprodução da palestra de Ken Schwaber falando sobre a 3ª década do Scrum e finalizaremos com o Ask The Experts.

Escolha dos Palestrantes

O comitê de organização do evento selecionou as principais palestras do evento americano, em seguida incluímos alguns temas que raramente são comentados em palestras devido a sua alta complexidade técnicas e por fim selecionamos os melhores nomes para os assuntos no país. E como vocês podem ver na grade do evento, temos 3 ALM Rangers, 4 MVPs, e 4 Funcionários da Microsoft Brasil. Sem dúvida, são os maiores nomes de ALM e TFS no Brasil!

Preço

O evento tem um custo simbólico de R$ 70,00 até o dia 12/11. Esse custo é apenas para ajudar a pagar despesas operacionais do evento, coffee break, além de ser revertido em brindes para os participantes (quem se inscrever até 12/11 ganhará uma linda camisa polo do evento).

Após 12/11 o valor de inscrição vai para R$ 100,00.

Por que você deveria participar do evento?

  1. É o primeiro evento focado 100% em ALM do Brasil;
  2. Os maiores nomes de ALM do Brasil estarão presentes;
  3. O custo do evento é insignificante. Apenas R$ 70,00 contra 1495 dólares no evento americano;
  4. Alto conteúdo técnico. Serão as primeiras palestras nível 400 em português do sobre Team Build, Work Items e Reporting;
  5. Todos os aspectos do ALM serão cobertos: Pessoas, Processos, Ferramentas, Governança, Desenvolvimento e Monitoração;
  6. Práticas ágeis como continuous integration, continuous delivery, tdd, entre outras serão abordadas em profundidade;
  7. Você terá uma sessão dedicada para tirar dúvidas com os maiores especialistas no assunto;
  8. A possibilidade de networking com os palestrantes e com o público é sensacional.
  9. Acho que já é suficiente né?

Inscrições

Você pode pagar em boleto bancário, transferência eletrônica e cartão de crédito. Acesse já o site do evento e faça a sua inscrição. http://www.alm-summit.com.br

Até lá!
André Dias

TechEd Brasil 2010: Palestra – Tudo o que você precisa saber sobre Scrum e Visual Studio ALM

Hoje, durante o primeiro dia do TechEd Brasil 2010, tive o grande prazer palestrar sobre dois assuntos que eu “gosto pouco”: Agilidade e ALM. Só isso seria o suficiente pra me deixar bastante satisfeito, afinal falar sobre o que você gosta no maior evento de tecnologias Microsoft da América Latina não acontece sempre.

Mas, para minha felicidade, foi um pouco mais que isso. Eu e o Giovanni Bassi fizemos uma palestra dupla sobre o assunto. Isso mesmo! Foram 150 minutos falando sobre praticamente toda a plataforma de ALM da Microsoft. Nós mostramos a Arquitetura do TFS, fizemos uma introdução sobre método ágeis, fizemos dezenas de demos sobre as Ferramentas de Testes, Arquitetura, Desenvolvimento, além de mostrar diversas features do TFS como Source Control, Team Build, Scrum Process Template e muito mais.

Nos últimos 30 minutos da palestra, ainda rodamos um projetinho ao vivo simulando a prática do Scrum no dia a dia. Fizemos a Planning Meeting, definimos o Sprint Backlog, desenvolvemos um Blog utilizando TDD, ASP.NET MVC 3 e Entity Framework 4.0 e por fim fizemos o Sprint Review e a Sprint Retrospective. Foi um exercício bastante divertido!

No final da palestra, sorteamos alguns baralhos de Planning Poker da Microsoft, uma licença do ReSharper e uma licença do MSDN Ultimate no valor de aproximadamente R$ 25.000,00, cedido gentilmente pelo time de Visual Studio da Microsoft Brasil.

Abaixo você pode conferir os slides das duas palestras:

Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 1/2

Tudo o que você precisa saber sobre Scrum e Visual Studio ALM – Parte 2/2

Como não colocamos referências nos slides, vou publicar alguns links aqui que são bastante interessantes:

Bom, é isso, espero que vocês tenham gostado.

Um grande abraço,
André Dias

Como obter todos os arquivos das changesets de um Work Item

Essa semana, um desenvolvedor me perguntou como ele poderia obter todos os arquivos .sql de um determinado work item. Ele precisava atualizar o banco de dados de produção e gostaria de saber quais scripts ele deveria executar.

Inicialmente, achei o pedido um pouco estranho, pois o Visual Studio faz isso automaticamente pra gente quando estamos utilizando um projeto do tipo Database Project, porém acabei descobrindo que o projeto estava fora do nosso padrão recomendado e além de não ter o Database Project, também estava sem a estratégia de branch, builds, etc.

O mais triste é que o desenvolver até tinha achado uma “solução”: Ele estava acessando a aba All Links do Work Item, clicando em cada changeset e anotando cada arquivo manualmente, parecido com as imagens abaixo. Confesso que até pensei em deixar o desenvolvedor sofrer um pouco mais, já que ele estava fora do padrão, porém quando vi a quantidade de changesets que havia no work item, mudei de ideia e resolvi ajudar o cidadão.

changeset
Imagem 1: Work Item com a listagem das changesets

changeset details
Imagem 2: Detalhes de uma changeset

A ajuda foi, basicamente, escrever o código C# abaixo que usa as APIs do TFS. Esse código conecta no servidor, obtém uma referência para o Work Item, entra em cada link do tipo changeset e imprime os nomes de arquivos lá existentes.

Para rodar o código abaixo, você precisará instalar o Visual Studio 2010 SDK e adicionar as seguintes referências em seu projeto:

  • Microsoft.TeamFoundation.Client
  • Microsoft.TeamFoundation.Common
  • Microsoft.TeamFoundation.VersionControl.Client
  • Microsoft.TeamFoundation.WorkItemTracking.Client

           
//Id do Work Item a ser consultado
const int workItemId = 63;           
           
//Endereço da coleção do Team Foundation Server
Uri collectionUri = new Uri("http://localhost:8080/tfs/DefaultCollection");

//Connecta no team foundation server
using (var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(collectionUri))
{
    //Obtém referências para os repositórios de Work Item e de Código Fonte
    var workItemStore = tpc.GetService<WorkItemStore>();
    var versionControlServer = tpc.GetService<VersionControlServer>();

    //Obtém o Work Item armazenado no repositório
    WorkItem wi = workItemStore.GetWorkItem(workItemId);

    //Varre todos os links do Work Item 
    foreach (var link in wi.Links)
    {
        //Verifica se o link é um link externo pois queremos
        //os links do tipo changeset (externos)
        if (link is ExternalLink)
        {
            //Utiliza um utilitário para quebrar a URL do recurso
            //em diversos campos
            var artefactId = LinkingUtilities.DecodeUri(((ExternalLink)link).LinkedArtifactUri);

            //verifica se o link externo é do tipo Changeset
            if (artefactId.ArtifactType == "Changeset")
            {
                //captura o Id do Changeset
                int changesetId = int.Parse(artefactId.ToolSpecificId);

                //obtem o objeto changeset de acordo com o seu ID
                var changeset = versionControlServer.GetChangeset(changesetId);

                //Imprime no console todos os arquivos que foram
                //encontrados dentro da changeset
                Console.WriteLine("Arquivos da changeset: " + changesetId);
                changeset.Changes.ToList().ForEach(p => Console.WriteLine(p.Item.ServerItem));
            }

        }

    }
}

Como vocês podem ver o código não é nada complexo. Ele trabalha com vários recursos do TFS, além de acessar dois de seus principais repositórios: Work Items e Source Control, logo é um código que você pode facilmente adaptá-lo para outras necessidades.

Bom, é isso! Espero que seja útil para vocês também 🙂

Abraços e até a próxima!

André Dias

Correção para Bug de Migração do TFS 2008 p/ TFS 2010

Há algumas semanas, durante um processo migração de um TFS 2008 para o TFS 2010 tive a infelicidade de me deparar com alguns bugs no novo produto. E não eram aqueles bugs que travam a ferramenta e quando você reinicia está tudo ok novamente, eram bugs que aparentemente tinham migrado informações incorretamente ou simplesmente não tinham migrado todas as informações de uma versão para a outra.

O primeiro bug foi reportado por um membro do time que não conseguia realizar um Merge, pois os valores da Drop Down List da Target Branch estavam completamente incorretos. Em alguns casos o Visual Studio 2008 simplesmente perguntava se você queria fazer um merge de $/Proj/Main para $/Proj/Main, ou seja, para o mesmo lugar.

O segundo foi um pouco pior, um programador veio até a minha mesa e disse que precisava fazer uma alteração em produção, mas que não conseguia criar uma branch baseada numa label que tinha aplicado. Quando fui verificar a label, percebi que apesar dela existir ela estava vazia e a minha reação inicial foi afirmar que o programador tinha aplicado a label de forma incorreta. Porém, após um processo de troubleshooting que chegou a envolver até a restauração do TFS original, descobri que a ferramenta não tinha migrando o conteúdo das labels.

Depois de vários contatos com o time de produto, os bugs foram confirmados e workarounds foram sugeridos:

Para o primeiro caso, fui informado que o bug só acontecia com o VS2008, pois o patch de atualização do VS2008 para se conectar ao TFS 2010 tentava inferir a estrutura de branches ao invés de usar a nova API de branches do TFS 2010 e para casos de branches complexas ele “se perdia” e por isso mostrava valores incorretos no campo de Target Branch. Situação que foi facilmente resolvida utilizando o Team Explorer 2010. No segundo caso, não teve muito jeito, tive que reconstruir as branches na unha, pois o banco já tinha sido migrado. O time de produto até se prontificou de me enviar um QFE (Quick Fix Engineering) e sugeriu para eu refazer a migração, mas o TFS já estava em produção há alguns dias então não valia a pena.

Enfim, após alguns dias trabalhando com a galera do TFS/VS2010 conseguimos colocar o ambiente 100% operacional de novo e a boa notícia é que se você ainda não migrou o seu TFS 2008 para o TFS 2010, temos um hotfix que vai te livrar de todos esses problemas.

O hotfix é baseado no KB2135068 – Labeled items and merge targets missing after upgrade to TFS2010 e pode ser baixado em http://code.msdn.microsoft.com/KB2135068

tfs installation

Uma nota importante é que esse hotfix deve ser aplicado depois da instalação do TFS 2010, porém antes do processo de configuração, ou seja, quando o Wizard de instalação terminar, não clique no botão Configure, ao invés disso, feche a janela, aplique o hotfix e depois acesse o Team Foundation Administration Console para continuar com o processo de configuração.

O processo de aplicação do hotfix é bastante simples e após isso, você deve ter um grande período de lua de mel com todas as novas features do TFS e do Visual Studio 2010.

Se você tiver dúvidas em relação ao processo de migração do TFS 2008 para o TFS 2010, entre em contato.

Um abraço,
André Dias