Ricardo Serradas

Visual Studio ALM in a nutshell

Agile Brazil 2010–Palestras

com um comentário

Olá a todos!

O foco neste post é falar sobre a segunda parte do Agile Brazil 2010, onde os palestrantes apresentaram seus trabalhos e onde pude conhecer muita gente boa da comunidade ágil do Brasil.

O keynote de abertura foi de ninguém menos que Martin Fowler, um dos idealizadores do manifesto ágil. Sinceramente, ele não trouxe nenhuma novidade à nossa comunidade mas claro, falou com muita propriedade de assuntos de seu domínio, focando principalmente em práticas de engenharia de software voltadas ao desenvolvimento ágil. Muito bacana!

A grade de palestras ficou um pouco corrida, com muito paralelismo. Muitas vezes palestras que tinham tudo para ser de ótima qualidade rolavam ao mesmo tempo. Isso me desapontou um pouco. Mas o que vi foi muito bom! Dou um destaque especial para a palestra do Alexandre Gomes (@alegomes) e do Renato Willi (@rwilli), onde falaram sobre Desenvolvimento Ágil no Governo, onde demonstraram domínio do assunto e souberam reter a atenção do público com maestria.

E claro, com uma diversidade grande de palestras como essa, algumas deixaram sim à desejar, ou pelo conteúdo que era pouco atrativo, ou pela capacidade do palestrante de chamar a atenção do público.

Durante o evento, tive a oportunidade de conhecer pessoalmente uma galera de presença na comunidade ágil e de desenvolvimento de software, como:

André Nascimento – @alnascimento
Daniel Oliveira – @dfaoliveira
Igor Abade – @igorabade
Rafael Noronha – @rafanoronha
Rodrigo Vidal – @rodrigovidal

Entre outros. É super interessante a experiência de trocar idéias com esses caras através de grupos (como o DotNetArchitects), redes sociais (como Twitter) e depois conhecê-los pessoalmente e poder trocar idéias já como amigos de longa data! Foi um prazer conhecer vocês, pessoal!

Infelizmente, devido ao horário do meu vôo na sexta, não pude participar do keynote de encerramento que, acompanhando a hashtag do evento (#AgileBrazil), deve ter fechado com chave de ouro!

Abaixo, algumas fotos que tirei durante o evento:

 

DSC00472

Michel Goldenberg ministrando o curso de CSM

DSC00479

Rodrigo Yoshima falando sobre Engenharia de software no curso de CSM

DSC00487

Turma de CSM no Agile Brazil 2010

DSC00538

O evento estava começando. Hall principal. Olha nós no telão!

DSC00541

Galera da Stefanini em peso no evento!

DSC00567

Martin Fowler no seu keynote

DSC00581

Alexandre Gomes e Renato Willi ministrando sua palestra

DSC00594

Galera de peso no stand da Microsoft pareando para completar um desafio em .Net

DSC00604

Igor Abade em sua palestra sobre Desenvolvimento Ágil com Visual Studio

DSC00634

Daniel Wildt e Aleckssandro Tavares: PMBOK num time ágil, como fica?

 

Enfim, o Agile Brazil 2010 foi nota 10! Em 2011 estarei presente novamente!

[]’s

Ricardo Serradas

Escrito por Ricardo Serradas

29/06/2010 em 4:23 PM

Publicado em Agilidade, Eventos

Etiquetado com , , ,

CSM no Agile Brazil 2010

fazer um comentário »

Olá a todos!

Post épico este! Tanto por ser o primeiro fora de São Paulo quanto por ser o primeiro que faço através de um dispositivo móvel.

Estou em Porto Alegre, Rio Grande do Sul para participar do Agile Brazil 2010. Aqui tenho tido contato com feras do mundo do Desenvolvimento de Software e de Agilidade. O evento é dividido em dois dias de cursos (terça e quarta) e dois dias de palestras (quinta e sexta) e conta com grandes nomes como Giovanni Bassi, Alexandre Magno, Michel Goldenberg, Rodrigo Yoshima, o próprio Martin Fowler, entre outros.

Os dois primeiros dias foram muito legais. Cheguei aqui na segunda e, ao sair pra jantar com alguns amigos, descobrimos no dia seguinte que na mesa ao nosso lado jantava Martin Fowler. Olha a oprtunidade de conseguir um autógrafo desperdiçada.

No dia seguinte começaram os cursos de CSM, CSPO E XP. eu participei do CSM, que acabou hoje. O curso foi bem legal e foi diferente dos cursos de CSM que já aconteceram pois, além da aula tradicional sobre o Scrum Master ministrada pelo Michel Goldenberg, algumas boas práticas de Engenharia de Software com foco no mundo ágil foram mostradas pelo Rodrigo Yoshima.

Ao final do dia, no jantar, fomos comer num lugar muito interessante: o “D’Gato” Churrasquinhos. É mole?

Abaixo, algumas fotos:

Victor Cavalcante, Giovanni Bassi e Alexandre Magno À esquerda e Rodrigo yoshima à direita, no coffee-break

Michel Goldenberg ministrando o curso de CSM


Michel novamente no curso

Bom, como estou sem computador, estou impossibilitado de fazer um post mais detalhado e de postar fotos da minha câmera também. Então, assim que estiver de posse do meu computador denovo, faço um post mais completo.

[]‘s
Ricardo Serradas

Escrito por Ricardo Serradas

24/06/2010 em 12:03 AM

Publicado em Agilidade, Eventos, Scrum

Etiquetado com ,

Customizando E-Mails de Project Alerts

fazer um comentário »

O envio de alertas por e-mail quando um evento acontece no projeto do time pode ser muito importante quando falamos de integração.

Com os Project Alerts é possível, por exemplo, enviar e-mails para o responsável pela tarefa quando ela for atribuída a ele ou quando sofre modificações; pode-se enviar uma cópia para o responsável pelo projeto quando a tarefa é finalizada, entre outros fins. Porém, o template de e-mail nativo do TFS pode não ser satisfatório para o time.

Vamos falar um pouco mais sobre os Project Alerts abaixo.

Como funciona?

No servidor de aplicação, há um agente (TFSJobAgent) que fica aguardando algum evento para disparar os alertas. Os eventos podem ser:

- Modificação em um work item;

- Um check-in é realizado;

- A qualidade de um build é modificado;

- Um build termina;

Entre outros que podem ser criados. Os templates de email (tanto texto plano quanto HTML) ficam armazenados na seguinte pasta, no servidor de aplicação do TFS:

[Drive]:\ Program Files\Microsoft Team Foundation Server 2010\Application Tier\TFSJobAgent\Transforms

Dentro dessa pasta, você encontrará dois arquivos para cada tipo de evento. O arquivo de extensão “plaintextxsl” define o template de e-mail em texto plano, enquanto o de extensão “xsl” define o formato do email HTML, além do arquivo TeamFoundation.xsl, que é como um template, uma casca (como uma Master Page) para os demais arquivos. A partir daí, cada arquivo de cada evento importa este arquivo e define as outras informações a serem exibidas.

Quando o agente identifica o evento, ele recebe uma coleção de informações contendo os campos do work item e/ou do evento para gerar uma saída com base nos arquivos mencionados acima. São elas:

- CoreFields: contém os campos e seus conteúdos, cujo namespace é System.*.

- ChangedFields: contém os campos que foram modificados neste evento.

Um fator muito importante é: campos que estão fora do namespace System.* (ou campos non-core) não são enviados nesta coleção por questões de desempenho. Portanto, se quiser, por exemplo, mostrar o campo “Start Date” (Microsoft.VSTS.Scheduling.StartDate) e ele não tiver sido modificado, não será possível recuperar essa informação no alerta.

Como customizar?

No nosso exemplo, vamos customizar o alerta de Work Item modificado no formato HTML. A modificação que faremos é simples: a linha que contém o “Assigned to:” deve ficar em negrito e removeremos a linha que contém o “Changed date:”. O que temos hoje é:

 

E para fazer essa modificação, vamos seguir os passos abaixo (faça back-up dos arquivos antes de começar a customização):

- Abrir o arquivo WorkItemChangedEvent.xsl em algum editor de XML ou no próprio Visual Studio;

- Dentro do arquivo, procure pelo trecho “ReferenceName[.='System.AssignedTo”. Verá que existe uma definição de uma linha de tabela (TR). Assim:

Interpretando esse trecho de código: na primeira célula da linha (PropName), ele coloca o título do campo, que é “Assigned to:”. Na segunda (PropValue), é inserido o valor.

Dentro dessa segunda TD você pode enxergar uma estrutura de repetição (foreach) e uma de validação (IF) onde ele varre os campos da coleção CoreFields em busca de um campo do tipo “System.AssignedTo”; se encontrar, exibe seu valor, através da propriedade “NewValue”.

Vamos fazer uma simples modificação de HTML. Colocaremos a tag de bold (“<b>”) nas duas tds. Fica assim:

Sobre o Changed Date, basta procurar pelo texto “System.ChangedDate” no código e remover a TR que á contém.

Depois dessas edições, salve o arquivo e faça alguma modificação em algum work item para disparar o evento. No meu caso, o resultado foi o segunte:

 

Daí pra frente é só ir brincando com os campos e com o template dos alertas.

[]’s

Ricardo Serradas

Escrito por Ricardo Serradas

08/06/2010 em 7:58 PM

Publicado em Dicas

Etiquetado com , , , ,

Gated Check-in no TFS 2010

com 2 comentários

Olá,

Muito falou-se sobre uma das features mais esperadas da versão 2010 do Visual Studio Team Foundation Server: o Gated Check-in. Neste post, vamos fazer um raio-x deste mais novo aliado na luta por uma integração contínua mais forte e código fonte de nossas aplicações de melhor qualidade.

De uma forma geral, como ele funciona?

Quando um desenvolvedor efetua um check-in, ele recebe uma notificação dizendo que suas alterações devem ser compiladas antes de serem persistidas no controle de versão. O TFS então desvia essas alterações para um shelveset. No servidor de build é feito um unshelve dessas alterações e em seguida todo o código é compilado. Se o build tiver sucesso, um novo changeset é criado a partir do shelve e o check-in é feito em nome do desenvolvedor.

Como configurá-lo?

Para que o Gated Check-in seja usado no seu time, precisamos criar uma Build Definition com essa característica. Vamos ver como funciona:

Vamos assumir que já temos configurado nosso servidor de build e que ele está definido como Build Agent e Controller no TFS.

Não vamos entrar em detalhes sobre a configuração completa de um build definition por não ser o foco principal deste post. Sendo assim, durante a configuração de uma build definition, vemos várias abas. Uma das abas que nos interessa neste momento é a de nome “Trigger”. É nela onde definimos que essa build configura o Gated Check-in:

Um passo muito importante (e que chega até ser uma “pegadinha”) no processo de configuração está na próxima aba, que é a “Workspace”. É lá que definimos para qual estrutura de pastas esta build funcionará. Veja:

Isto significa que esta política de gated check-in somada ao build automatizado só vai ser disparado se uma tentativa de check-in for realizada na estrutura de diretórios abaixo de $/TFS10Demo/dotnet/GatedCheckinDemo.

Se esta configuração não for feita da forma correta e, por exemplo, se deixarmos este campo com “$/”, esta política se aplicará para todos os projetos desta coleção. Sendo assim, um check-in em qualquer outro Team Project será barrado por este Gated Check-in e o código do projeto GatedCheckinDemo será compilado sem real necessidade.

Salvas essas e outras configurações, vamos testar se nosso Gated Check-in está funcionando. Para isso, vamos modificar algum fonte que está versionado debaixo da estrutura definida no workspace. Depois disso, vamos efetuar um check-in. Após isso, recebemos a seguinte mensagem:

*Ao clicar em Build Changes, uma nova build é disparada e as pendências de check-in na máquina do desenvolvedor são desfeitas, ficando apenas no shelveset que será usado pelo servidor de build.

Se tudo der certo, se tudo foi bem codificado e o processo de check-in foi bem feito (Get Latest Version antes, tentativa de compilação e etc), será mostrada essa mensagem na tela do desenvolvedor que efetuou o check-in:

Ela informa que o build teve sucesso e que as suas alterações foram persistidas no controle de versão. Se a opção para preservar os check-outs ficou marcada na hora de submeter o build, use o botão “Reconcilie…” para acertar seu workspace. Se não, basta apenas ignorar a mensagem e rodar um Get Latest Version para obter suas próprias alterações.

Já se o build falhar, uma janela semelhante será mostrada, sugerindo dar o unshelve das alterações que foram enviadas para que a correção possa ser feita.

* A opção “Bypass validation build and check-in my changes automatically on your behalf” é, por padrão, desabilitada para membros do grupo “Contributors”, que é o grupo onde costuma-se incluir desenvolvedores.

Você já conhecia este novo conceito? Gostou desta nova funcionalidade? Tem críticas? Comente!

[]’s

Ricardo Serradas

Escrito por Ricardo Serradas

24/03/2010 em 7:09 PM

Publicado em Dicas

Etiquetado com , , ,

Problemas com WebTest Recorder e Internet Explorer

fazer um comentário »

Olá,

Desde meus primeiros contatos com o WebTest Recorder do Visual Studio Team System, identifiquei que problemas aconteciam com ele com frequência e, por conta disso, perdia tempo correndo atrás de uma solução a cada vez que isso acontecia.

E ontem aconteceu denovo. Eu, com uma instalação completa e atualizada do VS 2008 Team Suite, não conseguia ver a barra do WebTest Recorder no Internet Explorer 8. Fazendo uma pesquisa rápida, encontrei um post do Michael Taute que compila soluções para diversos tipos de problemas referentes ao plugin. Você pode ler o post na íntegra em:

http://blogs.msdn.com/mtaute/archive/2007/11/09/diagnosing-and-fixing-web-test-recorder-bar-issues.aspx

Porém, um dos problemas me chamou a atenção ontem, depois de ter passado por ele. O cenário é o seguinte:

  • Windows 7 64 Bits
  • Visual Studio 2008 Service Pack 1 Up-To-Date
  • Internet Explorer 8

O add-on do webtest recorder estava habilitado no navegador e, mesmo assim, a barra não aparecia. Veja a solução apontada pelo Michael:

O Windows Vista faz cache da lista de barras disponíveis para o Internet explorer e a barra do gravador não estava disponível na sua lista. A correção consiste em forçar o Windows a reconstruir este cache. Para fazer isso, primeiro certifique-se que você está sem nenhuma janela do Internet Explorer aberta e então abra o editor de registros do Windows (Regedit) e exclua as seguintes chaves:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021493-0000-0000-C000-000000000046}

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\Component Categories\{00021494-0000-0000-C000-000000000046}

Nota: Por padrão, o editor de registro 32 bits está localizado em %WINDIR%\SysWow64\RegEdt32.exe

Vamos aguardar e torcer para que a ferramenta de testes web do Visual Studio 2010 seja mais estável :-)

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

25/02/2010 em 10:32 PM

Máquinas virtuais de Visual Studio 2010 Ultimate e TFS 2010

fazer um comentário »

Olá,

Para quem é daqueles que está sempre querendo estar um passo à frente, é uma informação muito importante. A Microsoft já disponibiliza para download um kit de aprendizado sobre o Visual Studio 2010 e o Team Foundation Server 2010. As máquinas virtuais existem nas versões para Windows Virtual PC, Microsoft Virtual PC e Hyper V.

Este material contém tudo que é preciso para estudar e entender as capacidades desta poderosa ferramenta de ALM (Application Lifecycle Management). Inclusive, a base de dados do TFS já vem populada com dados de exemplo. Há apenas uma exceção: as funcionalidades de Lab Management não estão inclusas. Ainda espera-se uma novidade vinda do time de produto relacionada a isso.

Abaixo, o link para download de cada uma das versões:

As máquinas tem validade até 9 de abril de 2010, data de expiração do trial do SQL Server. Notificações de ativação serão exibidas durante o uso, comportamento normal de uma versão trial do Windows. Não há com o que se preocupar.

Boa diversão! :-)

[]‘s
Ricardo Serradas

Escrito por Ricardo Serradas

08/01/2010 em 1:15 AM

LINQ To Entities e o método Contains, um contorno

fazer um comentário »

Olá a todos,

Depois de muito tempo, volto a escrever. Tem sido uma dura correria que me impossibilitou de dar atenção a este valioso espaço. Porém, mais uma vez, prometo tentar reservar um pouco do meu tempo para enriquecer o conteúdo desta página.

Volto hoje com um assunto que não costumo discutir aqui no blog, que é codificação.

Ultimamente tenho ocupado quase que todo o meu tempo com estudos e discussões sobre a melhor forma de codificar algo. Um problema que encontrei dias atrás foi uma limitação do LINQ To Entities, que não implementou um método mapeado para a função “IN” do SQL. Um exemplo: quero obter todos os usuários do banco cujo ID é um dos números da sequência mística do seriado LOST, que é: 4, 8, 15, 16, 23, 42. A query SQL seria:

SELECT * FROM USER U WHERE U.ID IN (4, 8, 15, 16, 23, 42)

 

Em tese, uma expressão LINQ para fazer a mesma coisa seria mais ou menos assim:

string[] ids = { “4″, “8″, “15″, “16″, “23″, “42″ };

var users = (from t in _db.User where ids.Contains(t.Id.ToString()) select t).ToList();

 

Em tempo de compilação, tudo certo. Porém, ao executar este código, você receberá esta mensagem de erro:

LINQ to Entities does not recognize the method 'Boolean Contains(Int32)'

 

É possível estender as bibliotecas do LINQ para mapear a função, criar uma função ultra-complicada para fazer isso, mas há uma maneira de resolver com uma linha de código, que é:

var users = _db.User.Where("it.Id IN {" + string.Join(",", ids) + "}");

 

Atenção para a palavra chave “it”, ela representa sua entidade na query. Logo, Id é a propriedade.

Experimente!

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

08/01/2010 em 12:40 AM

Erro MSB6006 em testes unitários numa Team Build

fazer um comentário »

Olá a todos! Hoje vamos falar de mais um capítulo da série “Problema e solução”.

Problema:

Ao configurar uma Team Build no VSTS de um projeto que compila e que roda os testes unitários tudo certinho, a build roda, porém o status dela fica como “Partially Succeeded” porque os testes unitários falharam e, ao analisar o log, você encontra a seguinte linha no final:

MSBUILD : warning MSB6006: “MSTest.exe” exited with code 1.

O mais interessante é que se você roda os testes unitários a partir do Test List da Solution, todos funcionam, não é?

Causa:

Pois bem. Por algum motivo, o erro se dá por conta do usuário TFSSERVICE* não ter permissão na pasta onde o resultado do build foi colocado (ou “dropado”).

Solução:

Basta permitir escrita (tanto NTFS quando de compartilhamento) para pra o usuário TFSSERVICE na pasta de build drop.

*Este nome pode variar de acordo com a instalação realizada.

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

20/10/2009 em 4:54 PM

Publicado em Problema e Solução

Etiquetado com , , ,

Erro TF53010 ao iniciar o TFSServerScheduler

fazer um comentário »

Mais um erro comum depois de criar uma nova instalação do servidor do VSTS é aquele que você visualiza logo ao iniciar a máquina, dizendo algo como “Alguns serviços não puderam ser inicializados adequadamente. Consulte o visualizador de eventos…”.

Então, a primeira iniciativa que tomamos é olhar qual serviço com modo de startup automático não foi inicializado.

Chegando lá no snap-in de serviços, conferimos que o serviço “Visual Studio Team Foundation Server Task Scheduler” (TFSServerScheduler) não está inicializado. Vamos lá então: iniciamos ele manualmente e… Ele inicia! E fica lá, rodando normalmente. Mas oras, então porque ele não conseguiu subir no startup da máquina?

Consultando o Event Log, encontramos a seguinte mensagem de erro:

TF53010: The following error has occurred in a Team Foundation component or extension:

(…)

Application Domain: TFSServerScheduler.exe

(…)

Detailed Message: Unable to connect to the remote server

O que acontece?

O TFSServerScheduler depende tanto do SQL Server quanto do IIS para funcionar. Logo, se um dos dois serviços ainda não estiver devidamente inicializado, o TFSServerScheduler não vai conseguir ser inicializado também.

Como contornar isso?

Basta configurar o serviço TFSServerScheduler para ser dependente dos serviços do SQL e do IIS. Assim, ele só fará tentativas de inicialização depois que os dois serviços os quais ele depende estejam devidamente no ar. Para configurar isso, use a seguinte linha de comando no Command Prompt:

sc config TFSServerScheduler depend= W3SVC/MSSQLSERVER

Reinicie o servidor para conferir. O serviço estará devidamente inicializado.

[]‘s

Ricardo Serradas

Escrito por Ricardo Serradas

13/10/2009 em 5:09 PM

Publicado em Problema e Solução

Erro TF15003 no Event Viewer do TFS

fazer um comentário »

Está aí mais um código de erro que vem incomodando logo depois de uma instalação nova e completa de um servidor do VSTS é feita. A mensagem de erro é encontrada no Visualizador de Eventos (Event Viewer) do Windows e é exatamente assim:

TF15003: The cache root specified in the fileCacheRoot configuration value must be an absolute (rooted) path. File caching will be disabled.

Isso soa falha no processo de instalação e a causa nada mais é do que a pasta que está sendo apontada como cache no arquivo de Configuração do WebService de Version Control do TFS não existir. Como conferir isso? Veja:

- Acesse a pasta de instalação do TFS e edite o arquivo Web.Config, comumente em:

C:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\VersionControl\Web.Config

- Encontre a chave “fileCacheRoot”, dentro de “AppSettings” e confira se a pasta para a qual a chave está apontando existe. No meu caso, apontava para:

C:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\VersionControl\Data

Se a pasta realmente não existir, basta criá-la. Após isso, reinicie os serviços e confira se a mensagem de erro aparece de novo no Event Viewer. Se não aparecer mais, pronto! Seu serviço de controle de versão voltará a trabalhar com cache.

[]’s

Ricardo Serradas

Escrito por Ricardo Serradas

13/10/2009 em 4:01 PM

Publicado em Problema e Solução

Etiquetado com ,