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

Casamento e Agilidade

Não, você não leu errado, esse post é realmente sobre casamento, e não estou falando de casar frameworks, metodologias e coisas do tipo, estou falando daquele casamento com noiva, noivo, igreja, aquele que a maioria dos homens, como eu, morrem de medo.

A motivação para esse post surgiu após eu ter twitado a seguinte frase “Ano passado ganhei um Grill da patroa, esse ano foi uma cafeteira! Será que ela está querendo mobiliar meu AP? #Medo #Casório 🙂”. Depois disso eu comecei a receber comentários no facebook de amigas e “amigos” a apoiando, dizendo que já passou da hora, dando dicas presentes futuros, etc. Imaginem a minha situação? Eu precisava provar não só para a patroa como a todas as amigas e “amigos” que casamento é coisa do passado e que estamos descobrindo melhores maneiras de construir um relacionamento!

Mulher? Tem algo mais complexo que mulher? E o casamento então? O número de incertezas é gigantesco, nós nunca sabemos o que as mulheres querem, logo o escopo é totalmente desconhecido, temos que gerenciar expectativas o tempo todo, afinal elas estão sempre esperando mais do que podemos oferecer, isso sem falar na transparência e adaptação constantes que é necessário para termos uma relação saudável.

Meu amigo, eu só conheço uma coisa capaz de lidar com um problema desse tipo e definitivamente não é o casamento.

Casamento é igual Waterfall, funcionou no passado quando as coisas eram mais simples. Tínhamos um padre (Gerente de Projetos), sem nenhum envolvimento com os noivos (comprometido com o time), falava meia dúzia de palavras para colocar medo no time (até que a morte os separem) e ia embora achando que o projeto ia dar certo. Se compararmos o Chaos Report com o índice de divórcios no mundo, os números devem ser bem parecidos.

Tá na cara que aplicar Casamento na relação não funciona, temos que ir para uma abordagem ágil, sem burocracia, com autogerenciamento, sem interferências externas e para isso nós precisamos buscar os valores e princípios da agilidade. Vamos recorrer à bíblia dos agilistas, vamos olhar o Manifesto Ágil.

O Manifesto Ágil aplicado ao casamento

Individuals and interactions over processes and tools

Esse valor deixa muito claro que pessoas e a interação entre elas (sexo) é muito mais importante que processos (metodologias de casamento como civil / religioso) e ferramentas (vestidos de noiva, decoração, festa, etc).

Alguém duvida?

Working software over comprehensive documentation

Esse tá na cara: Assim que o seu software (é melhor ele seja um hardware) parar de funcionar, você vai levar um pé na bunda e nenhuma documentação vai te salvar. Então amigão, pode esquecer toda aquela documentação extensa como certidão de casamento, cartinhas de amor, depoimentos no Orkut e outros tipos de documentações inúteis. O que realmente importa é o soft(hard)ware funcionando o tempo todo. E lembre-se de não deixar o sistema cair. Se algum bug for detectado, vá à farmácia mais próxima, peça um Service Pack Azul e coloque o sistema no ar novamente.

Se alguma mulher falar que não é bem assim, está mentindo!

Customer collaboration over contract negotiation

Eu sei, eu sei, colaborar com mulher é complicado: “Amor, vamos visitar o meu pai”, “Amor, vamos ver o show da Rita Lee”, “Ai, não acredito que você vai me deixar sozinha pra ir jogar futebol com os seus amigos”. Enfim, é muuuito chato paparicar mulher, mas como o manifesto é a nossa bíblia, temos que entender que é melhor colaborar algumas vezes do que assinar aquele contrato de escopo fechado chamado Certidão de Casamento, aonde o escopo vai te transformar numa múmia e que contém cláusulas de quebra que normalmente te causam um baita prejuízo.

Acho que peguei pesado aqui, mas que tem um fundo de verdade, tem!

Responding to change over following a plan

O que vocês preferem? Ter uma vida mais dinâmica ou seguir um plano? Muitos podem falar que seguir um plano dá mais segurança, porém o problema começa a aparecer quando esse plano começa a te levar pra longe dos seus objetivos e muitas vezes você está tão cego seguindo o plano que não percebe que está ficando cada vez mais longe do que realmente busca.

Há ainda os que percebem que o plano está atrapalhando, mas se conformam em continuar com ele, pois a mudança geraria muita dor de cabeça, a burocracia é gigante e por aí vai.

Ahhh, apenas para a sua informação: agora eu estou falando de projetos de software tradicionais e não de casamento, ok? Realidades parecidas, não?

Bom, não posso falar do casamento, mas posso dizer que praticamente todas as pessoas que conheço que escolheram ter uma vida mais dinâmica do que seguir um plano cegamente, estão mais felizes que antes. E você, o que prefere?

E agora? Você ainda acha que casamento é uma boa para o relacionamento? Eu provei acima baseado em teoria, princípios, valores e relatos que casamento não funciona no mundo atual. Que tal considerar implantar agilidade no seu relacionamento? Se você não concorda comigo, apresente-me cases que mostram um casamento que não estourou o orçamento, atendeu todos os requisitos dos stakeholders e que teve zero de turnover 🙂

Espero que vocês tenham gostado desta “brincadeira” e que possam descontrair um pouco neste final de ano que foi tão agitado para todos nós!

Um Feliz Natal e um 2011 cheio de realizações para todos nós,
André Dias

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

O trabalho já acabou, mas a Sprint ainda não. O que fazer?

É até estranho falar sobre o que fazer quando o projeto está adiantado, principalmente devido ao histórico de problemas e atrasos que o Chaos Report vem apresentando há algum tempo. Pois bem, o cenário está mudando e essas situações já começam a aparecer e como ainda não é uma situação comum, bate aquela dúvida: “O que fazer com o tempo que está sobrando?”.

Apenas para termos um contexto, vamos assumir que estamos falando de uma Sprint com duração de 1 mês e que todo o trabalho foi concluído faltando 3 dias para o encerramento da Sprint.

Formalmente, o Scrum não diz nada sobre isso, então vamos verificar algumas possibilidades que temos:

  1. O primeiro ponto é verificar se realmente não há mais nada a ser feito na Sprint atual. Todas as histórias e tarefas foram realmente concluídas? Todo o conceito de pronto foi implementado? Todos os critérios de aceitação estão passando?
  2. Se o time realmente concluiu todo o trabalho previsto, o próximo passo é colocar o time e o Product Owner (PO) juntos para tentarem identificar se é possível trazer algo do Product Backlog para a Sprint atual. Pode ser uma história pequena, de repente puxar algumas correções de bugs que foram encontrados nas Sprints anteriores, etc. Se o time e o Product Owner encontrarem algo pra ser feito em 3 dias, ótimo, problema resolvido, caso contrário a busca por atividades continua.
  3. Ok, terminamos tudo para a Sprint atual, não há nada pra fazer em 3 dias que vá agregar algum valor, e aí? Bom, eu conversaria com o Time para identificar algumas sugestões de atividades, entre elas poderíamos ter:
    • Realização de treinamentos;
    • Estudo de alguma tecnologia / ferramenta que será usada futuramente no projeto;
    • Realizar melhorias no código atual;
    • Criação de componentes ou ferramentas para aumentar a produtividade / qualidade do time;
    • Liberar o time para realizar projetos pessoais;

    Depois de ter uma lista de sugestões, conversaria com o Product Owner sobre quais dos itens sugeridos ele vê mais valor, afinal ele é o responsável pelo ROI do projeto. Dependendo do relacionamento entre o PO e o time, eu não me surpreenderia se o PO liberasse o time para atuar em projetos pessoais para dar um descanso pra galera.

  4. Por último, e acredito que seja o item mais importante, é discutir na retrospectiva o motivo da Sprint ter terminado antes. Levantar se essa situação é recorrente e se for pensar em aumentar a velocidade do time já que parece estar havendo uma superestimativa das atividades.

Enfim, não é uma receita de bolo, é apenas uma visão de bom senso muito parecida com outras situações que já apliquei em alguns projetos e que se demonstrou muito eficiente principalmente pela transparência.

Gostaria de saber se vocês já estão passando por esse tipo de “problema”? Como vocês estão lidando com a situação? É diferente da forma que citei aqui? Quais são os resultados?

Abraços
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

MSDN WebCast : Desvendando o TFS e o Visual Studio 2010

No último sábado (24/04), tivemos mais um MSDN WebCast – Saturday Night Code, onde falamos sobre o novo MSF for Agile 5.0, Scrum, TFS 2010 e Visual Studio 2010 por mais de 3 horas.

O Webcast começou comigo falando sobre as novidades do MSF for Agile, mostrando como planejar e executar um projeto ágil utilizando o TFS 2010 e o SharePoint Server. Em seguida, passei a bola para o Daniel Oliveira que demonstrou, com riqueza de exemplos, dezenas de features novas do VS 2010, tais como Diagramas UML, Grafos de Dependência, Diagrama de Camadas com Validação de Arquitetura, além de cobrir muitas outras novidades sobre as ferramentas de testes do Visual Studio 2010.

Infelizmente, o site de eventos global da Microsoft entrou em manutenção e apenas 12 pessoas das mais de 700 cadastradas tiveram a oportunidade de ver o evento ao vivo.

A boa notícia é que o evento foi gravado e se você não foi um dos premiados que conseguiu ver o evento ao vivo, pode baixar o vídeo direto do site de eventos da Microsoft 

Os slides da minha palestra também estão disponíveis no SlideShare.

Um grande abraço e espero que gostem.
André Dias

Exames Beta para Visual Studio 2010 Disponíveis

Acaba de ser liberado o registro para os exames beta do Visual Studio 2010 e do .NET Framework 4.0.

Lista de Exames

Exam 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4

Exam 71-515, TS: Web Applications Development with Microsoft .NET Framework 4

Exam 70-513: TS: Windows Communication Foundation Development with Microsoft .NET Framework 4

Exam 70-516: TS: Accessing Data with Microsoft .NET Framework 4

Exam 70-518: Pro: Designing and Developing Windows Applications Using Microsoft .NET Framework 4

Exam 70-519: Pro: Designing and Developing Web Applications Using Microsoft .NET Framework 4

Disponibilidade

O registro inicia em 17 de Março de 2010.

O período beta dos exames vai de 5 de Abril até 30 de Abril de 2010.

Informações sobre o registro

O exame pode ser agendado no site da Prometric até 24 horas antes do exame, porém o número de exames é limitado, então corra para garantir o seu.

Utilize os Promo Codes abaixo para ter o direito de realizar os exames gratuitamente.

Exam Number

Beta Code

70-511

511BC

70-515

515AA

70-513

513CD

70-516

516B1

70-518

518PE

70-519

519ZS

Abraços e boa sorte!
André Dias