XP1: Um Processo de Desenvolvimento

Jacques P. Sauvé, Airon F. da Silva, Francisco R. de A. Neto, Francisco W. L. Cabral

Versão 1.3, 22/11/2002

Introdução

Este documento descreve um processo de desenvolvimento de software. O processo pretende ser útil para alunos de Projeto em Computação I ou outras pessoas que estejam usando um processo de desenvolvimento pela primeira vez, em ambiente universitário. O processo descrito aqui tem as seguintes características:

Por ser baseado em XP, este processo é particularmente indicado quando os requisitos funcionais do software a ser desenvolvido não estiverem muito bem definidos, pois permite fazer mudanças a um custo menor.

 

Um processo de desenvolvimento de software diz "Quem faz o quê, quando e como". É assim que organizamos este documento.

Quem faz ...

Os papeis assumidos por pessoas no processo são os seguintes:

O quê ...

Responsabilidades

Os participantes do processo têm as seguintes responsabilidades básicas:

Cliente

Responsável pelas seguintes atividades:

  1. Descrever a funcionalidade desejada (ver User Stories), estando disponível para pequenas interrupções a qualquer momento para refinar as Stories e tirar dúvidas que surgirem durante o desenvolvimento
  2. Descrever os requisitos não funcionais do software
  3. Definir o plano de release de software
  4. Descrever os testes de aceitação para cada User Story
  5. Escolher User Stories para cada iteração

Em XP1, gente técnica toma decisões técnicas e gente de negócio toma decisões de negócio. Portanto, o cliente não deve fazer o seguinte:

Desenvolvedor

Responsável pelas seguintes atividades:

  1. Ajudar a levantar User Stories e requisitos não funcionais junto ao cliente
  2. Durante a fase de planejamento de releases, elaborar um projeto arquitetural
  3. Durante o planejamento de releases, estimar, aproximadamente, o tempo de desenvolvimento de User Stories
  4. Durante o planejamento de iteração:
  1. Elaborar o esquema lógico dos dados, se necessário.
  2. Escrever o código das tarefas, sempre incluindo Testes de Unidade. A existência de testes de unidade e de aceitação permite que desenvolvedores façam constante refatoramento para manter o código "limpo".
  3. Executar atividades de integração de tarefas realizadas à base central de código do projeto.
  4. Executar Test Review a pedido do gerente de projeto.
  5. Implementar a automação de Testes de Aceitação (alguns desenvolvedores, não necessariamente todos).

Gente técnica toma decisões técnicas e gente de negócio toma decisões de negócio. Portanto, os desenvolvedores não devem fazer o seguinte:

Gerente de projeto

  1. Conduzir as atividades de planejamento
  2. Alocar reviewers de testes
  3. Avaliar riscos e lidar com os riscos descobertos
  4. Manter o progresso do projeto

Atividades

Atividades de planejamento

Atividades de projeto (design)

Atividades de testes

Atividades de integração

Já que equipes diferentes poderão trabalhar em paralelo, há possibilidade de alterarem o mesmo código, resultando em conflitos. Para lidar com a situação, atividades especiais de integração devem ser seguidas.

Atividades de gerência

Numa empresa, um gerente de projeto tem muitas atividades que não serão consideradas aqui (gerência de RH, gerência de custos, gerência de aquisições, etc.) Só consideramos as atividades de gerência relacionadas com o acompanhamento do projeto (escopo, tempo, qualidade).

Descrição do risco
Data em que foi identificado
Gravidade (baixo, médio, alto)

Ordem

(1 = pior risco)

Ordem semana passada
Número de semanas na lista
Responsável por fazer o risco sumir
Observações
               
               

Quando ...

A tabela abaixo resume quando as atividades deste processo devem ser realizadas.

Tipo de Atividade
Atividade
Quando realizar
Planejamento
Escrita de User Stories No início do projeto, e sempre que o cliente pensar em novas stories
Levantamento de requisitos não funcionais No início do projeto, em paralelo com o levantamento de User Stories
Planejamento de releases Logo depois que o projeto arquitetural estiver pronto
Planejamento de iteração Iterações individuais são planejadas em detalhe imediatamente antes do início da iteração e não antecipadamente. Há uma iteração a cada 2 semanas.
Projeto
Projeto arquitetural Imediatamente após o levantamento de User Stories e requisitos não funcionais
Projeto do esquema lógico dos dados No início de um release, planeja-se o modelo de dados para todas as User Stories do release. Mudanças poderão ocorrer durante iterações.
Refatoramento constante Ao longo das iterações
Testes
Elaboração de Testes de Aceitação O cliente deve se antecipar e ter testes de aceitação prontos o quanto antes. Os testes de aceitação de uma User Story devem necessariamente estar prontos antes de iniciar qualquer tarefa relacionada ao User Story;
Elaboração de Testes de Unidade À medida que se codifica. Sugere-se codificar os testes de unidade antes de escrever o código. É uma boa forma de fazer o design de baixo nível do software.
Realização de Test Review Antes de fazer o check-in no final de uma tarefa.
Integração
Iniciar controle de versão Na criação de qualquer documento, arquivo, etc. que necessite estar sob controle de versão.
Realizar check-out

No início de uma tarefa.
Também é feito no final de uma tarefa para realizar a integração (operação de update).

Realizar check-in No final de uma tarefa, depois de passar por um Test Review.
Gerência
Gerenciar riscos

Todo dia, em papos informais no corredor.
Também é feito na reunião semanal de acompanhamento.

Manter o progresso

A coleta de informação para o Big Chart deve ser feita pelo menos semanalmente, mais freqüentemente se a coleta for automática.

Publicação

A publicação de resultados de acompanhamento (tabela de riscos, Big Chart) deve ser feita pelo menos 1 vez por semana

  • Big Chart: antes da reunião de acompanhamento
  • Tabela de riscos: depois da reunião de acompanhamento
  • Plano de releases: sempre que houver mudança

Outras regras importantes na dimensão "quando"

Como ...

Já falamos vários coisas sobre o "como" acima. Completamos a informação aqui.

Como realizar uma reunião de acompanhamento

A reunião dura o tempo mínimo, 1 hora sendo um bom tempo limite. São 4 etapas na reunião:

  1. Avaliação de riscos: cada membro da equipe relata a existência ou não de riscos de não cumprir o prometido.
  2. Discussão do progresso do projeto (usando o Big Chart)
  3. Discussão do plano de releases, para posicionar a equipe sobre a situação global do projeto.
  4. Resumir a situação global do projeto: um nível de risco global (baixo/medio/alto) é atribuído ao projeto, com respeito ao fim do próximo release

A cada duas semanas, depois da reunião de acompanhamento, tem uma reunião de planejamento de iteração para a próxima iteração. Iterações iniciam e terminam na reunião de acompanhamento. Essa reunião é obrigatória.

Como fazer estimativas de tempo (cronograma)

Seguem algumas dicas a respeito de estimativas de tempo:

Artefatos usados no processo

Neste processo, "artefatos" representam informação que deve ser guardada sob controle de versão de forma permanente e em sincronia. XP1 é "light" em termos de artefato, numa tentativa de minimizar esforços de sincronização. Os artefatos de XP1 são:

Observe que vários outros tipos de "artefatos" opcionais e descartáveis (que não entram em controle de versão) podem ser usados. Exemplos incluem diagramas de Entidade-Relacionamento e outros modelos conceituais, diagramas UML, etc. Pode-se usar papel ou quadro branco e jogar fora os diagramas quando não são mais necessários.

Frequently Asked Questions

"XP1 não inclui todas as regras e práticas de XP. Por que não?"

"Posso usar XP1 com Pair Programming?"

"Por que não tem design review e code review em XP1"

"Que práticas de XP1 não são XP e por que foram introduzidas?"

"Cadê atividades de análise deste processo? Cadê o modelo conceitual?"

"Posso usar XP1 como processo de desenvolvimento para sempre, mesmo fora da Universidade?"

"XP usa algo chamado Progress Velocity que XP1 não usa. O que substitui isso?"

"Por que planejar releases e iterações por tempo e não por escopo?"

"O que acontece com design detalhado (design de baixo nível) com diagramas de classes, etc.?"

"O que ocorre se meu cliente exigir diagramas de classes, de sequência, e outros diagramas UML (ou diagramas de outro tipo)?"

"Por que XP1 dá tão pouco valor a diagramas UML?"

"Em outros processo, ouço falar de Work Breakdown Structure - WBS. Onde está isso em XP1?"

"Há lugar para usar Gantt charts com uma ferramenta como Microsoft Project em XP1?"

"Por que não há métricas de produtividade em XP1?"

"Quais são os maiores riscos associados a XP1 num ambiente universitário?"

"Como faço para completar minha tarefa se eu dependo de João fazer alterações nas classes sob sua responsabilidade?"

"A palavra iteração é empregada no mesmo sentido do processo RUP?"

"Como faço para usar CVS nas atividades de integração?"

"Como faço para construir o Big Chart automaticamente?"

"Onde posso obter mais informação sobre XP?"