Material Evento XP em Vitória

by alisson.vale 4/30/2006 2:12:57 PM
Mais de 100 pessoas compareceram na quinta-feira dia 27/04 ao nosso primeiro evento sobre Extreme Programming no Espírito Santo. O feedback daqueles que compareceram foi ótimo e a palestra do nosso convidado, Vinícius Teles, foi bastante elogiada. Parabéns, Vinícius, pela palestra e parabéns a todos que participaram de alguma forma da organização do evento.

O material das palestra pode ser obtido nos links abaixo:

Vinícius Teles - Extreme Programming
Alisson Vale - Estudo de Caso: Projeto Phidelis

Evento XP em Vitória

by alisson.vale 4/20/2006 1:38:03 AM
No próximo dia 27/04/2006 às 19:00 horas, teremos o prazer de estar realizando o primeiro evento de XP no Espírito Santo. O evento contará com a presença ilustre de Vinícius Teles e eu terei a satisfação de estar apresentando um estudo de caso do projeto Phidelis. Se você estiver na grande Vitória neste dia, sua presença será muito importante. Maiores detalhes no link abaixo:

http://www.uvv.br/diversos/eventoxp


Integração Contínua - The Whole Picture

by alisson.vale 4/13/2006 3:25:15 AM

Há algumas semanas eu comentei aqui que estaria apresentando um overview do processo de Integração Contínua que idealizamos e criamos no nosso projeto. Neste artigo, vou apresentar o “The Whole Picture” do processo da forma como ele foi desenhado. Ou seja, como ele está arquitetado para à partir de um check-in do desenvolvedor, disponibilizar a aplicação para uso imediato pela área de qualidade e também, disponibilizar arquivos de instalação para testes e deploy nos clientes. 

O nosso processo de build nada mais é do que um emaranhado de aplicativos e ferramentas, cada um com seu propósito, que nos permite customizar todos os procedimentos e checagens necessárias para um incremento de versão mais seguro em nosso aplicativo. Mas atenção! Este não é um processo que pode ser copiado integralmente para outros projetos. Um processo de build é muito dependente do ambiente em que ele ocorre e do sistema ao qual ele está agarrado. Cada projeto precisa de suas próprias rotinas para validação e geração de artefatos. Uma idéia geral é apresentada nesse post para que você possa seguir seu próprio caminho na hora de projetar seu processo de Integração Contínua.

Características do Processo

  • Usamos 100% de ferramental open-source e freeware (apenas o banco de dados é proprietário: MSSql Server);
  • Há vários pequenos aplicativos desenvolvidos internamente por nossa equip para atender partes específicas do processo;
  • Há duas versões do processo que nós identificamos como RTM e Mainline. Cada uma se aplica a um branch de código diferente. A RTM se refere à versão de produção do nosso sistema, já à Mainline se refere à versão que está em desenvolvimento. Essas duas versões podem se diferenciar na ordem em que os procedimentos são executados, na maneira que ele é executado e também se determinado procedimento vai ou não ser executado.
  • Hoje, em sua versão mais lenta e completa, o processo demora em torno de 35 minutos; e, em sua versão mais rápida, 6 minutos.
  • Qualquer problema encontrado em qualquer uma das etapas da build, faz com que todo o processo seja interrompido. Nesse caso, uma notificação é enviada para toda a equipe.

Artefatos Gerados

  • Uma aplicação publicada em um servidor de homologação para uso imediato, sem que seja necessário qualquer procedimento manual para instalação;
  • Um relatório contendo o ChangeLog da versão “Minor” e o ReleaseNotes da build.
  • Um arquivo msi auto-instalável, disponibilizado em um website para download, onde se pode baixar uma determinada versão e instalá-la em uma máquina para testes, para apresentação ou até no ambiente de produção do cliente.
O aumento de confiança da equipe na qualidade da build gerada é um ponto importante. A aplicação deverá chegar na área de qualidade com menos problemas de deploy e de integração se passar por todas as validações incorporadas nesse processo de Integração Contínua.

RoundTrip

A seguir é apresentado o esquema de execução do processo de Integração Contínua, a lista de ferramentas utilizadas e uma explicação geral sobre cada passo, são mostrados mais adiante.

WholePicture.png


Ferramental

Função

Ferramenta

Tipo

Passos

Controlador de Código-Fonte

CVS

Open Source

1, 2

Issue Tracking

Mantis

Open Source

1, 11

Build Server

CruiseControl.Net

Open Source

3, 4, 17

Build Script Tool

NAnt

Open Source

Do 5 ao 16 

Build Script Tool

MSBuild

Freeware

8

Validação dos schemas dos arquivos xml da aplicação.

Phidelis-XmlValidator.exe

Desenvolvida internamente

7

Execução de scripts no BD

Isql.exe

Proprietária do SqlServer

9

Execução de testes de unidade

NUnit

Open Source

10

Geração de ChangeLog e Release Notes

ChangeLogManager.exe

Desenvolvida internamente

11

Geração de meta-dados para o Wix.

GenWixFiles.exe

Desenvolvida internamente

12

Geração de instalador no formato MSI

Wix

Open Source

13

Suporte para deploy de alterações no banco de dados e arquivos de configuração

SupportDeploy.exe

Desenvolvida internamente

14

Monitoramento e Notificação

DevConsole

Desenvolvida internamente

17


Políticas de Check-in

O processo começa com o desenvolvedor efetuando check-in (commit no CVS) em um ou mais arquivos. Criamos então, um conjunto de políticas de check-in, conforme descrevemos a seguir:

  • Comentário obrigatório para qualquer commit;
  • Comentário individualizado por arquivo;
  • Associação com uma tarefa previamente cadastrada no Issue Tracking;
  • Os comentários devem fazer parte da documentação da task no issue tracking; 


Obviamente, as ferramentas de controle de código-fonte e issue tracking não se falam nativamente. Houve então a necessidade de integrá-las. Implementamos então uma integração do CVS com o Mantis de forma que um script PHP validasse a forma e o conteúdo do comentário escrito pelo desenvolvedor no momento do check-in. Para que isso funcione, o comentário é sempre escrito conforme uma regra pré-estabelecida. Ele é aplicado a uma Regular Expression que valida sua forma. Já o script PHP valida seu conteúdo, recuperando de seu texto o número da task do Mantis e documentando o comentário inserido pelo desenvolvedor nas notas dessa mesma task. Esse processo será descrito com mais detalhes em um post futuro.

Processo de Build e Deploy

Após todo o processo de check-in do desenvolvedor, este pode acionar o build server para disparar os procedimentos de build e deploy, conforme é mostrado no passo 3 da figura 1. O próprio build server se encarrega de obter o código-fonte na versão mais atual para o branch associado. O NAnt é acionado então pelo build server e começa a execução de uma série de procedimentos. Inicialmente, os assemblies são marcados com um novo número de versão seguindo uma máscara pré-definida (ex: 2.0.1.*), onde o * é um número que é incrementado a cada execução do processo (apenas as execuções com sucesso são contadas). Os assemblies saem então com o mesmo número de build da Integração Contínua. Cada assembly é então compilado e reservado junto com referências a bibliotecas de terceiros.

Depois disso, os vários arquivos Xml utilizados para configurar a aplicação passam por procedimentos de checagem. São 3 níveis de checagem: sintaxe (via parser), regras de integridade (via schemas) e semântica (via um aplicativo desenvolvido internamente). Por exemplo, nós temos um arquivo de mapa de urls que mapeia o caminho físico de uma página web com um alias lógico. A validação sintática checa se não há má-formação do xml, a validação de integridade checa, entre outras coisas, se os atributos obrigatórios de cada elemento estão preenchidos; ou ainda, se um determinado atributo contém valores válidos. Já a validação semântica verifica, por exemplo, se o arquivo indicado no mapa existe fisicamente no repositório. Há também vários outros arquivos Xml utilizados pela aplicação que passam pelos seus próprios níveis de validação. 

O próximo passo é o acionamento do MSBuild para a compilação e merging da aplicação web. O ASP.Net 2.0, diferentemente do 1.1,  disponibiliza um aplicativo chamado ASPNetMerger que compila todo o código de interface de usuário em um único assembly, deixando as páginas aspx apenas com conteúdo HTML. O MSBuild foi utilizado nesse caso por que já tem tasks preparadas para rodar este procedimento.

Feito isso, e se tudo deu certo até agora, estamos prontos para executar os testes unitários. Como há vários testes que acessam o banco de dados, é necessário acionar o isql.exe para execução do script SQL de inicialização do BD da aplicação. Um BD novo é criado, as configurações para acesso a este bd são realizadas, e o NUnit é chamado para rodar os testes de cada um dos assemblies compilados anteriormente.

Se nenhum teste falhar, a build continua com o procedimento de geração de ChangeLog e ReleaseNotes. Esses procedimentos merecem estar em um post específico (e estarão!), mas, em resumo, o que acontece aqui é a leitura de todos os logs do CruiseControl. Esses logs contém as informações de que tasks do Issue Tracking foram contempladas em cada build gerada. Com essa informação, nós conseguimos gerar um documento de ChangeLog que relaciona as tasks associadas a cada build gerada anteriormente. O ChangeLog é contextual à máscara de número de versão que está no contexto da integração contínua.

O resto do processo fica por conta da geração e execução do MSI, um arquivo auto-instalável que permite a instalação de toda a aplicação em modo silencioso. A geração do MSI é toda realizada pelo framework open-source WIX. Como a aplicação é toda web, depois de instalada ela já pode ser acessada pela equipe e testada. Vale destacar, nesse processo de instalação, que houve a necessidade de desenvolvermos um pequeno aplicativo para a atualização automática de estruturas de banco de dados e arquivos de configuração que venham a ser criados ou modificados pelos desenvolvedores.

Ao final, o NAnt faz a cópia do arquivo MSI para um diretório onde ele estará disponível para download pela equipe ou pelos próprios clientes.

O próprio Build Server se encarrega de notificar a equipe de que o processo de build foi finalizado com sucesso. Se qualquer evento anterior falhar, a build se encerra e a equipe é imediatamente notificada.



Upgrade para Acompanhar Iterações

by alisson.vale 4/9/2006 2:48:57 PM
Já vamos entrar na terceira iteração utilizando um novo esquema de acompanhamento da iteração. Até então, não tínhamos a noção de como uma mudança sutil como essa poderia deixar o acompanhamento das iterações tão mais agradável.

Nessa mudança, nós usamos um quadro branco inteiro apenas para acompanhamento e fizemos os seguintes ajustes:

  • Ao invés de fichas com adesivos indicando a situação da história (Figura 1), nós optamos por usar "Post-its" posicionados em áreas diferentes do quadro. A área em que ele se encontra, identifica sua situação e não mais a sua cor.
  • Nossas histórias agora só tem duas cores: amarelo e laranja. A cor laranja identifica tarefas extras (tarefas não planejadas) - o que nós chamamos de SWATs - pois na maioria das vezes elas são de caráter emergencial.
  • O quadro também contém gráficos que nos dão uma indicação de produtividade:
    • Quantos pontos a equipe produziu na iteração (Velocidade);
    • Desses pontos, qual o percentual de pontos de tarefas planejadas com relação às tarefas não-planejadas.
  • Criamos uma área de "Product BackLog". Assim, na hora de planejar a iteração seguinte, basta priorizar e estimar a parte do backlog que será atacada.
    Veja o Antes e o Depois....

    Antes:

cortica-reduzido.png
Figura 1 - Modelo anterior. Fichas com adesivos que indicavam
a situação da história.


    Depois:

quadroIteracao.PNG
Figura 2: Novo quadro de acompanhamento. Mais útil,
mais fácil de atualizar e mais informativo.


    O novo modelo deu muito certo até agora. Há muitas vantagens sobre o modelo antigo. A idéia agora e mandar fazer um quadro com uma estrutura parecida para que não precisemos desperdiçar um dos nossos quadros brancos para esse propósito.

Integração Contínua x One-Step-Build x One-Step Deployment

by alisson.vale 3/26/2006 8:13:45 PM

Em um projeto XP a Integração Contínua deve ser encarada como um importante agente transformador. Ela é o primeiro passo para que o software saia da máquina de um desenvolvedor e apareça na máquina de um cliente para que este o utilize. Na minha visão, a IC afeta diretamente e de forma significativa um projeto XP. Ela pode dizer, por exemplo, o quão rápido será o feedback do seu cliente. Pode dizer também quanto tempo um desenvolvedor terá que gastar para incorporar seu código no sistema e quão confiante o time estará depois de modificações no código, pois este sabe que uma “Successfull Build” é o resultado da passagem do código por vários níveis de checagens. Um integração contínua executa no mínimo três operações básicas: Recupera o código-fonte de seu repositório em sua versão mais atualizada, compila e monta seus diversos componentes e executa todos os testes de unidade sobre esses componentes recém-compilados. Ou seja, nesse cenário, tivemos dois níveis de checagem: compilação e testes de unidade.

De forma geral, uma IC que apenas compila e executa testes de unidade é o suficiente para o seu propósito, que é permitir que os códigos de  vários desenvolvedores estejam sempre sintonizados e funcionando de forma correta. Este processo deve ser simples e rápido o suficiente para ser executado em até 10 minutos. Esta é uma média de tempo que pode ser considerada para a maioria dos projetos. Há projetos em que esse tempo acaba sendo maior. O ideal é que a IC possa acontecer várias vezes por dia e, que os desenvolvedores não precisem ficar parados esperando longos processos de integração.

Ao contrário do que muitos pensam, a IC não precisa ser feita de forma automática. Ela é uma atividade que pode ou não ser feita com o uso de ferramentas. Se, depois de terminar seu trabalho, um par de desenvolvedores sentar em uma máquina, baixar manualmente o código-fonte, compilar esse código e rodar seus testes, tudo de forma manual, ainda assim será um bom processo de IC.

Com o uso de ferramentas de script você pode fazer seu processo de IC se beneficiar do conceito de One-Step Build. Um One-Step Build é um processo que permite a geração de uma build de um sistema por meio de apenas um único passo, que pode ser um click de botão ou a execução de um programa. O próprio script criado se encarrega de rodar todos os passos necessários para a geração da build. Se os passos necessários para execução dessa build passarem por “Obter a última versão do código”+”Compilar”+”Rodar testes de unidade”, este processo de One-Step-Build poderá ser utilizado como apoio para a IC. Há várias ferramentas que podem te ajudar nisso. As mais conhecidas são o Ant, o NAnt, o MSBuild e, mais recentemente, o Ruby Rake (a sensação do momento nesse assunto).

Aqui no nosso projeto, nós usamos com muita satisfação o NAnt e o MSBuild. Ambas as ferramentas são usadas no mesmo processo. O NAnt roda 90% do processo. Deixamos o MSBuild responsável apenas por algumas tasks relacionadas com os processos de compilação e merging da parte web da nossa aplicação, que está em ASP.Net 2.0.

Mas o One-Step Build ainda não é suficiente para reduzir em sua totalidade o que há entre o desenvolvedor e o cliente. Ainda há um vazio entre o resultado da integração contínua e o software efetivamente funcionando no ambiente do usuário.

Depois de integrado, em tese, o software estaria pronto para ser disponibilizado em ambientes diversos para testes ou para uso efetivo de seus usuários. Só em tese mesmo... mas há muito o que fazer ainda. Um software integrado, é um software cujo código-fonte foi validado e checado naquilo que é possível em termos de automação. O compilador checa sintaxe, compatibilidade de tipos e a validade de mensagens enviadas entre objetos. Ainda precisamos checar se os objetos respondem satisfatoriamente às regras e ao propósito para os quais eles foram codificados. Isso é feito com testes de unidade. Mas ainda há um longo caminho a andar para que o software possa estar na máquina de um usuário pronto para ser utilizado e testado. 

Percorrer este caminho, significa ter o que chamamos de One-Step Deployment. Esse é um grande desafio para qualquer equipe de desenvolvimento de software. Pense em todos os passos que você precisa tomar para levar seu software do repositório de código-fonte direto para a máquina do usuário. Atualizar o aplicativo, estruturas de banco de dados, arquivos de configuração, módulos rodando em diferentes máquinas com diferentes tecnologias; considerar restrições de segurança, ambientes distribuídos e, como se já não estivesse complicado, você ainda tem que deixar seu processo informar aos usuários o que foi alterado entre uma versão e outra. Difícil? Sim. É complicado mesmo... Mas o tamanho dos benefícios é proporcional ao tamanho do desafio.  Quando você conseguir executar todos estes passos por meio de um “apertar de botão” você terá alcançado o tão sonhado “One-Step Deployment”.

Em nosso projeto, depois de muito esforço, nós conseguimos chegar a uma solução de Gerência de Configuração em que unimos Integração Contínua com One-Step Build e One-Step Deployment.

Para aqueles que querem conhecer essa solução eu estarei postando semanalmente um overview de todas as etapas que precisamos vencer para chegar a este resultado.

Acompanhe!

Agile = Version N to N+1?

by alisson.vale 3/18/2006 8:55:52 PM
       
Há poucos dias atrás Ralph Johnson (Gang of four, lembram-se?) publicou, em seu blog, um artigo contendo algumas idéias realmente muito interessantes: "Software Development is program transformation". Em suas palavras:

"The purpose of work on existing software is to transform it to the new version. Since almost all work on software is converting version N to version N+1, almost all work on software is program transformation."

Pra mim, essa é uma frase muito arrebatadora. Acho que essa idéia sempre foi óbvia pra mim, mas nunca tinha parado pra pensar que acreditar nessa tese pode fazer você drasticamente entender como funciona um projeto ágil. O artigo do Ralph Johnson me fez chegar a uma definição simplória, mas no mínimo intrigante, sobre o que realmente podemos chamar de “desenvolvimento ágil de software”: A arte de minimizar tempo e esforço para a conversão de um software da versão corrente para uma próxima versão, de forma a se aproximar cada vez mais dos desejos de seus usuários.

Pense bem... todas as práticas do XP e de vários outros métodos convergem de certa forma para essa definição. Vamos examinar as práticas da primeira edição do XP por exemplo:

Jogo do Planejamento, Cliente Presente: Qual é o conjunto mínimo de funcionalidades que eu posso entregar, de modo que o cliente possa avaliar e se beneficiar de forma efetiva e imediata do trabalho realizado com a maior freqüência possível? Se descobrirmos algo no meio do processo, de que forma podemos nos adaptar para que o foco na satisfação do cliente seja mantido? Essas duas práticas nada mais são do que modos eficientes de se chegar a uma versão n+1 tendo como meta agregar o máximo de valor para o software sob o ponto de vista do cliente em um dado momento.
Entregas Freqüentes, Integração Contínua: Quantos mais entregas eu fizer, mais próximo estarei de satisfazer as necessidades de meus usuários. Quanto mais eles começarem a usar o produto, maior será a nossa sintonia. Se o código não for integrado continuamente, o momento da entrega será muito penoso e sujeito a erros. Portanto, uma boa Integração Contínua facilita o processo de entrega freqüente e, portanto, diminui o trabalho de se fazer a versão n virar n+1.
Metáforas, Design Simples, Refactoring e Test Driven: Essas práticas te direcionam a uma aplicação fácil de ser manipulada. Melhor do que isso, te levam a uma aplicação cuja manipulação é muito mais segura. Te levam a um bom design. Mas o que é um bom design? Não é aquele que permite melhorar, estender ou alterar a aplicação de forma mais fácil e segura? Quanto mais fácil é alterar a aplicação, mais fácil será incrementar suas versões e mais ágil será o projeto, pois a capacidade de se entregar funcionalidades é muito aprimorada.
Programação em Pares, Propriedade Coletiva, Padrões de Codificação, Ritmo Sustentável: Essas práticas atuam diretamente sobre a capacidade de produção dos desenvolvedores. Elas os levam a entender melhor o que estão fazendo, aumentando a velocidade e a qualidade com que implementam as funcionalidades da versão n+1.

Em termos gerais, cada ação de uma equipe de desenvolvimento que atue diretamente no sentido de facilitar, agilizar ou assegurar a qualidade da transformação do seu software de uma versão n para uma versão n+1 é um poderoso elemento catalisador para a agilidade de seu projeto. Algumas práticas de Arquitetura e Gerência de Configuração, apesar de não muito formalizadas na semântica dos processos, são extremamente importantes no sentido de complementar o projeto com recursos que ajudam-no consideravelmente no seu dia-a-dia. Na área de Gerência de Configuração eu citaria: Branching, automação de deployment, de montagem de ambiente, de execução e construção de cenários de testes. Também citaria a formalização de arquitetura (incluindo aí uma arquitetura que facilite algumas práticas como o TDD), padrões de codificação e regras para análise estática de código.
       
Compreender o processo de incrementar software, é, no meu entender, a chave para o amadurecimento e para o sucesso daqueles que querem conduzir projetos de software vencedores. Cada vez mais técnicas e ferramentas nos ajudam nessas atividades, cabe a nós saber como balanceá-las de modo a contribuir para a agilidade dos nossos projetos.

2 anos de XP

by alisson.vale 2/21/2006 2:19:56 AM
No início do mês de fevereiro deste ano nosso projeto completou 2 anos desde sua primeira iteração. O esforço e a dedicação da equipe foram fundamentais durante todo esse tempo. Certamente, a maior de todas as nossas recompensas foi o aprendizado. Tenho certeza que todos que estão ou estiveram atuando no projeto aprenderam muito tanto tecnicamente, quanto profissionalmente e, hoje, são pessoas muito mais bem preparadas para desempenhar funções de alto nível em projetos de software.

Nosso produto também é outra conquista. Nesse segundo ano, lançamos sua versão 2.0 e evoluímos consideravelmente em aspectos que, na maioria das vezes, são colocados em segundo plano em uma boa parte dos softwares comerciais concorrentes, como segurança, arquitetura, design, release-management e controle de ambiente.  No campo de negócios também avançamos consideravelmente ao incorporar "Workflow Automation" no produto, o que abre portas na criação de um diferencial de mercado importantíssimo.

Alguns números que vão ficar registrados no nosso 2º aniversário:

- 12 profissionais;
- 671.397 linhas de código;
- 3.391 arquivos de código-fonte;
- 622 Páginas de Interface;
- 261 Tabelas;
- 1125 Testes de Unidade;
- 3947 Builds de Integração Contínua;
- 100% das funcionalidades rodando em ambiente web;

Algumas lições que aprendemos nesse tempo:

- "Customer On-Site" é o alicerce de um projeto ágil. Não subestime essa prática. Se não há cliente, coloque alguém no lugar dele, que haja como ele.
- Pair-programming é:
  • disparado a prática que mais afeta positivamente a qualidade do que está sendo produzido.
  • A prática mais difícil de ser estimulada por um gerente.
  • A que leva à maior frustração para um coach que não consegue utilizá-la em sua plenitude no dia-a-dia de um projeto.
- TDD e Refactoring não são técnicas naturais para desenvolvedores acostumados com RAD. Portanto, aprenda com Chapeuzinho Vermelho:
  • RAD = Caminho curto, mas sombrio e com um lobo à solta;
  • TDD + OOP + Refactoring = Caminho mais longo, porém florido, seguro e com a certeza que o lobo não vai aparecer.
- Refactoring não combina muito bem com programação procedural. Se o desenvolvedor não entende OOP, não vai passar do Extract Method. OOP vem primeiro, Refactoring depois.
- programador != desenvolvedor. Se você é um programador, torne-se um desenvolvedor. Se você é um gerente, contrate desenvolvedores. Se eles não aparecerem, contrate um programador com potencial e torne-o um desenvolvedor.
- Automatize tudo que for possível. O que não for possível, faça de outra forma, até que seja possível automatizar.
- Não dá pra abrir mão de um bom processo de Integração Contínua.
- Prepare-se para os bugs que aparecerão depois de suas releases. Não se preocupe, eles vão aparecer. O que importa é o quão ágil sua equipe vai ser para resolvê-los.
- Design, Design, Design...


Estudo de caso de um portal corporativo utilizado como instrumento para gestão de projetos XP

by alisson.vale 2/4/2006 7:23:09 PM
No projeto em que venho trabalhando desde o final de 2003 – projeto este que resultou na construção de um software de gestão acadêmica - nosso grande desafio foi tentar levar informações gerenciais e de acompanhamento do projeto para fora do "war room". Nossa realidade contava com a participação de alguns gerentes e patrocinadores que não frequentavam nossa sala de projeto e, portanto, acabavam tendo que se atualizar por meio de reuniões periódicas que, na maioria das vezes, eram difíceis de se agendar. Por outro lado, a comodidade de se poder acompanhar o andamento do projeto mesmo remotamente foi vista como um grande diferencial tanto pelo cliente quanto pela própria equipe de desenvolvimento. O portal do projeto era consultado várias vezes por semana por gerentes e patrocinadores e muitas vezes por dia pelos próprios membros da equipe.

Quando se fala em agilidade para projetos de desenvolvimento de software uma coisa sempre me vem a cabeça: gargalos. O grande diferencial em processos construídos à partir de métodos ágeis está, no meu ponto de vista, em se minimizar ao extremo todo e qualquer gargalo que possa interferir no trabalho da equipe quando esta tenta transformar as idéias do cliente em software funcional. Assim, tínhamos muito receio que o portal criasse algum tipo de gargalo burocrático para a equipe, afetando diretamente sua velocidade. Assim procuramos diluir as tarefas de atualização das informações no portal entre a equipe de modo a não sobrecarregar um ou outro de seus membros.

O Portal

    O portal foi construído com base em um instrumento de gestão de conteúdo para portais corporativos que eu desenvolvi no ano de 2002. No entanto, acho possível que outras ferramentas - como o Plone ou o SharePoint - também possibilitem a um projeto alcançar resultados semelhantes.  Algumas customizações foram feitas na ferramenta de modo a formatar a informação da maneira que precisávamos e o resultado pode ser observado na figura 1.

Figura 1 – Área principal do portal de acompanhamento do projeto.

A figura 1 mostra o portal do projeto exibindo a situação do projeto em meados da iteração de número 09, ocorrida entre 17/06/2004 e 05/07/2004.  Nesse momento, havia a meta de se atingir aproximadamente 446 pontos em 10 iterações, o que equivalia a se atingir o primeiro marco do projeto, definido pela equipe em conjunto com gerentes e patrocinadores. Ao acessar o portal, estes stakeholders tinham uma visão clara do andamento não só do projeto como um todo, mas também da iteração que se seguia. Era possível saber o nível de velocidade da equipe por meio de um gráfico de análise simples e também conferir visualmente como andava o progresso das iterações. Várias informações disponibilizadas pelo portal foram utilizadas pelos gerentes para, por exemplo, aumentar ou diminuir a equipe de desenvolvimento de acordo com nossas demandas de prazo. Repare (pelo gráfico de velocidade) que houve uma queda de rendimento entre as iterações 03 e 04 – um desenvolvedor deixou a equipe nesse período - e depois um salto entre as iterações 04 e 05 – três novos desenvolvedores foram contratados.

Tivemos a preocupação também de publicar alguma documentação de suporte metodológico, já que os métodos utilizados não eram de todo conhecido pelos patrocinadores. O Plano de Projeto, release planning e a própria descrição do processo interno de desenvolvimento também foram importantes principalmente para os novos membros da equipe que chegavam ao longo do tempo.

O portal também se tornou um ótimo instrumento para centralização do acesso às várias ferramentas de apoio ao processo que utilizávamos (integração contínua, bug tracking, etc). O cliente o utilizava para ter acesso às releases liberadas confrontando-as com as informações de finalização do desenvolvimento de uma user-story.

Outra visão gerencial que sentimos a necessidade de apresentar foi um gráfico para acompanhamento dos testes de aceitação realizados pelo(s) cliente(s). Veja figura 2.

 
Figura 2: Gráfico para acompanhamento da execução dos testes de aceitação ao longo do tempo.

Essa implementação foi inspirada na sugestão dada por Ron Jeffries, Ann Anderson e Chet Hendrickson no livro Extreme Programming Installed (veja figura 3). Ao realizar os testes de aceitação o cliente fazia a marcação nesse gráfico de forma que tínhamos uma idéia dos nossos níveis de regressão ao longo do tempo.

Abrir Imagem
Figura 3: Gráfico sugerido por Ron Jeffries et al,
em Extreme Programming Installed.

Desafios

Nosso maior desafio foi absorver as atividades de alimentação do portal sem burocratizar o processo e sem criar documentações de pouco valor para o usuário. Começamos, então, definindo as seguintes regras:

1 – A equipe de desenvolvimento continuaria a trabalhar com informações físicas dispostas na parede da “War Room”. Adesivos vermelhos, amarelos e verdes seriam afixados nos cartões para indicar seu andamento. Os cartões estariam dispostos em um quadro de cortiça na parede da “War Room” (veja figura 4).
2 – Os cartões físicos continuariam sendo escritos na reunião de início de iteração, porém, os testes de aceitação seriam descritos diretamente no portal pelo cliente.
3 – Ao iniciar ou concluir uma tarefa, os desenvolvedores tinham a responsabilidade de acessar o portal e marcar o status da user story para “Iniciado” ou “Concluído”.
4 – O cliente também tinha a responsabilidade de lançar no portal o resultado de cada teste de aceitação realizado.
5 – Os desenvolvedores deveriam manter uma cópia impressa do cartão de forma a orientar seu trabalho para atender os testes de aceitação. Alterações no cartão eram atualizadas à lápis na cópia impressa e depois discutidas com o cliente para que ele as atualizasse no portal.

Figura 4 – Os cartões de iteração foram mantidos em seu modelo tradicional

Segundo esse modelo, a equipe de desenvolvimento sofreu pouco impacto no seu dia-a-dia. O desenvolvedor, apenas precisava fazer duas coisas: abrir a história no portal e redefinir seu status e colocar o adesivo no cartão localizado no quadro de cortiça na “War Room”. O maior impacto ficou definitivamente por conta da sobrecarga de trabalho para o cliente. Para resolver isso, eventualmente foi preciso alocar um ou dois analistas de negócio para o ajudarem na execução e na documentação dos testes de aceitação. O formulário apresentado a seguir (Figura 5) era utilizado pelo cliente ou analista para documentar a user-history.

Figura 5: Formulário para lançamento de conteúdo no portal. Nesse caso o conteúdo é uma user-story, mas poderia ser uma release, ou um outro documento qualquer.

Um qualificador chamado “Story Point” e outro chamado “Situação” permitiam que o portal calculasse as métricas apresentadas na página principal.

À medida que as iterações se sucediam, um repositório de conteúdo ia se formando permitindo a formação de uma base de conhecimento sobre o projeto que foi muito útil principalmente quando havia troca de membros na equipe (Veja figura 6).

<Abrir Imagem
Figura 6: Repositório de “user stories” classificados por iteração.

O acompanhamento de releases também podia ser feito pelo portal graças a uma integração com os resultados gerados pelo Cruise Control.Net. As informações formatadas no portal indicavam o que efetivamente tinha sido modificado em cada release publicada.

Figura 7: Repositório de releases geradas pela integração contínua.

Conclusão

Esse case me permitiu exercitar algumas idéias para a disponibilização de informações de acompanhamento em projetos ágeis. Mesmo sendo tal idéia, de certa forma, um pouco contraditória com os próprios princípios ágeis, na medida em que podem burocratizar o processo. O que eu pude aprender nesse case é que é possível sim, integrar um projeto de software ágil com outros métodos ou instrumentos de gerenciamento, desde que os princípios do manifesto ágil sejam mantidos e que o código do software continue sendo visto como o artefato mais importante de todo o processo de desenvolvimento. De fato, é preciso muita atenção e muito cuidado para com a definição dos papéis e muita disciplina da equipe para manter a rotina de atualização funcionando. O que pude observar, é que depois que essas rotinas são incorporadas ao dia-a-dia da equipe, o processo flui de maneira muito mais controlada e organizada, deixando gerentes e patrocinadores mais tranquilos com relação a evolução do projeto.


About the Autor

Alisson Vale Alisson Vale
Project Leader at Phidelis Tecnologia.


E-mail me Send mail
      Sign in

Recent posts

Recent comments

Termo de Responsabilidade

Disclaimer: The content of this site represents merely personal opinions.