XP1: Um Processo de Desenvolvimento

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

 

Versão 1.7, 21/03/2007: Adaptação e complementação do processo com ênfase em papel do cliente (uso de proxy do cliente na equipe), atividades de documentação e cálculo da estimativa de tempo para realização de User Stories.

Versão Word

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;

Caso o cliente não esteja sempre disponível (pode não estar na UFCG, por exemplo), uma pessoa da equipe assumirá este papel durante todo o projeto, sendo um proxy do cliente na equipe. Durante as reuniões de acompanhamento ele deve apresentar a visão do cliente. Para isso, ele deverá interagir continuamente com o cliente a fim de validar:

  1. requisitos levantados e suas prioridades;
  2. plano de release, definindo quais User Stories estarão em cada iteração;
  3. testes de aceitaçã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:

·         Dividir as User Stories em Tarefas;

·         Estimar, com precisão, o tempo de desenvolvimento de Tarefas. A estimativa deve ser feita em “horas ideais”. Essas horas são convertidas para “horas reais” levando em consideração a última velocidade do desenvolvedor ao qual a tarefa foi alocada;

·         Escolher Tarefas para desenvolver;

5.      Elaborar o esquema lógico dos dados, se necessário;

6.      Escrever o código das tarefas, baseado nos Testes de Aceitação automáticos recebidos. A existência de testes automáticos permite que desenvolvedores façam constante refatoramento para manter o código "limpo". Outros tipos de testes (de unidade, por exemplo), podem ser mantidos pelo desenvolvedor mas apenas os testes de aceitação automáticos são obrigatórios (e são de responsabilidade do cliente ou de seu proxy);

7.      Executar atividades de integração de tarefas realizadas à base central de código do projeto;

8.      Conversar com o cliente antes do desenvolvimento da User Story para detalhar o que deverá sem implementado.

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.      Avaliar riscos e lidar com os riscos descobertos;

3.      Manter o progresso do projeto;

4.      Auxiliar na coleta de informações auxiliares;

Atividades

Atividades de análise

Atividades de planejamento

Atividades de projeto (design)

Atividades de testes

Atividades de documentação

·         Documentação do código fonte: Documentar (código fonte) significa descrever em linguagem natural a funcionalidade do programa para que os desenvolvedores (inclusive você) possam entendê-lo sem ter de (re)ler o código. É realizado para manter o código compreensível e de fácil manutenção, permitindo fácil adaptação de novos programadores à equipe.

·         Documentação dos testes de aceitação: Escrever testes de aceitação é uma atividade do cliente, mas que pode ser auxiliada pelos desenvolvedores. Deve existir pelo menos um script automático de teste de aceitação testando a funcionalidade de cada User Story. É fundamental que a descrição da Story esteja descrita no script de teste. Dessa forma, a documentação das funcionalidades do programa segue junto com os testes facilitando atividades de manutenção do programa. O uso de scripts automáticos de testes de aceitação (exemplo: EasyAccept) é fundamental para sucesso deste tipo de atividade.

·         Projeto Arquitetural: Produzido durante a fase de análise este documento deve apresentar a organização geral do sistema, descrevendo:

o   camada de lógica da aplicação;

o   camada de dados persistentes;

o   camada de interface;

o   entidades externas ao sistema;

 

Grandes alterações na arquitetura do sistema refletem mudanças neste documento. Mais detalhes sobre este documento ver aqui.

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 aqui 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

Análise

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

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 semana.

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 (ou o proxy servindo de analista) 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 para que a User Story seja alocada.

Documentação

Documentação do código fonte

Realizada durante a implementação do código. Também é realizada nas tarefas de refatoramento.

Documentação dos testes de aceitação

Durante a escrita dos testes de aceitação. O cliente escreve um texto descritivo detalhado da User Story junto com seu teste de aceitação.

Projeto Arquitetural

Imediatamente após o levantamento de User Stories e requisitos não funcionais. Também deve ser realizado após grandes alterações arquiteturais no sistema.

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.

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"

No processo XP1, o cliente deve estar "sempre" disponível. Idealmente, o cliente faz parte da equipe de desenvolvimento em tempo integral. Como isso raramente poderá ser o caso em ambiente universitário, é absolutamente imprescindível que o cliente esteja "facilmente" acessível. Neste caso uma pessoa da equipe (o proxy do cliente) assumirá este papel durante todo o projeto, sendo responsável por todas as atividades do cliente. Para isso, ele deverá interagir continuamente com o cliente a fim de validar:

Os desenvolvedores devem poder tirar uma dúvida com o cliente a qualquer momento. Embora isso possa parecer difícil e chato para o cliente, o processo depende deste fato, já que atividades antecipadas de planejamento detalhado são evitadas em XP1.

Como...

Já falamos várias 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, 2 horas sendo um bom tempo limite. Ela sempre deve ser realizada antes do planejamento da iteração. São 4 etapas na reunião:

  1. A reunião inicia com a visão do cliente. Caso o cliente não esteja presente, seu proxy na equipe deverá apresentar a visão do cliente. Para isso, uma reunião com o cliente deverá ter sido realizada antes da reunião de acompanhamento.
  2. Planejamento de releases e Avaliação de riscos: cada membro da equipe relata a existência ou não de riscos de não cumprir o prometido.
  3. Discussão do progresso do projeto (usando o Big Chart).
  4. Discussão do plano de releases, para posicionar a equipe sobre a situação global do projeto.
  5. Resumir a situação global do projeto: um nível de risco global (baixo/médio/alto) é atribuído ao projeto, com respeito ao fim do próximo release:

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)

Muitas coisas podem levar ao furo de estimativas iniciais de tempo de realização de tarefas, por exemplo: tarefa desconhecida, curva de aprendizagem mais acentuada do que o esperado, feriados e férias esquecidos, viagens, tarefas prioritárias que “pintam” (ex. tirar bugs), treinamento esquecido, reuniões, tarefas "burocráticas" como check-in/check-out de código na ferramenta de controle de versão, etc., integração mais difícil do que se pensava, etc.

Em vez de se preocupar com tudo isso, usamos uma técnica mais simples. As tarefas são estimativas em horas-ideais como se o mundo não fosse cruel J. No final de uma iteração, calculamos a velocidade de cada desenvolvedor (horas reais/horas ideais). Esta velocidade é usada para estimar quantas horas reais serão utilizadas para as tarefas cujas horas ideais estimadas conhecemos.

Contudo, não faz mal incluir um buffer de contingência (digamos 50%) em cada atividade realmente nova (atividades com conteúdo tecnológico novo e aparentemente complexo).

É importante observar que uma velocidade mais baixa não significa que um desenvolvedor não esteja trabalhando bem; significa apenas que a hora ideal dele(a) é diferente da hora real. Se este desenvolvedor mantiver consistência nas estimativas (a velocidade não altera muito), então o planejamento funcionará muito bem!

Produção dos 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 artefatos, 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 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.

Como manter User Stories

Uma sugestão:

User Story

4

Título

Gerar carta

Business Value

Alto (ou prioridade: 0, 1, 2, ...)

Status

Concluída

Descrição

Um usuário seleciona um cliente para o qual deseja enviar uma carta e um gabarito que define o formato da carta. O Jato produz uma carta para cada cliente, usando a informação do gabarito para gera a carta, substituindo a informação "plugável" (chamada tag) que estiver no gabarito pela informação relacionada ao cliente. Há informação plugável não relacionada ao cliente, a data de hoje, por exemplo. O usuário recebe uma visão da expansão da carta para cada cliente para verificação.

Observações

Embora tenhamos que eventualmente gerar cartas em formatos mais complexos como HTML ou PDF, nessa User Story, basta usar texto simples.

Dependências

1,2

Tempo ideal estimado

12 hrs

Tempo Real consumido

21 hrs

Nessa tabela, o business value pode ser "alto, médio, baixo". As dependências indicam os User Stories que deveriam estar prontas antes de atacar essa User Story. Tempo ideal estimado serve para o cliente ter uma idéia do esforço necessário para realizar a User Story. O tempo real, é o tempo gasto para a realização da User Story e serve principalmente para cálculo da velocidade do desenvolvedor.

Note que a informação acima poderá ser mantida em HTML, usando uma ferramenta como Xplanner, etc.


Como fazer um plano de release

  1. Obtenha as User Stories do cliente;
  2. Estime o tempo de desenvolvimento de cada User Story;
  3. O cliente prioriza as User Stories em função de quanto ele quer cada uma (seu business value) e quanto tempo cada uma vai levar;
  4. Com as User Stories priorizadas, o cliente "passa a faca" onde ele quer um release. Isso pode ser feito por tempo fixo no release ou pelo escopo desejado no release;
  5. O plano de release é simplesmente essa lista ordenada de User Stories, com as marcas onde cada release termina;

 

Aqui está um plano de releases típico:

 

Plano de Releases

Observações gerais (isso existe mais para ajudar o professor a corrigir o plano)

  • Time com 4 desenvolvedores
  • 88 horas reais disponíveis por iteração (2 semanas * (12+12+12+8))
  • Horas reais são usadas nesse plano. Usamos velocidade de 75%. Portanto, 66 horas de horas estimadas serão alocadas em cada iteração

Release 1

Data inicial: 17/05/2004
Data final: 28/06/2004
Número de iterações: 3

User Story

Título

Prioridade

Número de horas

66

Tamanho janela

11

8

141

Exibição de vários gráficos de um objeto

9

16

151

Melhoras na interface gráfica - gráficos/zoom

10

8

155

Saúde de host e respectivo plugin

5

4

159

Calculador de SLA

1

24

160

Saúde de host para windows 2000

6

16

79

Dashboard de SLA

4

30

80

SLA com histórico de falhas

7

8

163

Calculador de Business Metrics

3

40

165

Empacotar o BL

8

24

166

Saúde de componentes

2

20

Total

198

Release 2

etc...

Total

198

Se você usar pair programming, cuidado com as estimativas de horas: duas pessoas estão envolvidas e o número de horas disponíveis é menor.

Inicialmente, uma velocidade chutada pode ser usada para fazer o plano de releases (digamos 50% ou o valor “conhecido” para a equipe em projetos passados).


Como fazer um plano de iteração

  1. Senta com o cliente e priorize User Stories, escolhendo as próximas a fazer na iteração;
  2. Divida cada User Story em tarefas;
  3. Estime o tempo de cada tarefa (horas ideais);
  4. Junte tarefas o suficiente para encher o tempo disponível da iteração, levando em conta a última velocidade da equipe.
  5. Para distribuir as tarefas entre desenvolvedores, eles fazem sign-up (cada um escolhe as tarefas que ele quer fazer);
  6. Entre com esses dados na ferramenta de acompanhamento (XPlanner, ...);
  7. Se não usar XPlanner, seu plano de iteração tem que indicar:
    1. User Stories;
    2. Tarefas de cada User Story;
    3. Estimativa de tempo;
    4. A quem foi alocada;
    5. Percentual concluído (com isso, o plano de iteração também serve de acompanhamento de progresso);

Aqui está um plano de iteração típico:

 

Plano de Iteração

Data inicial: 17/05/2004
Data final: 25/05/2004
Número de User Stories: 3

Desenvolvedores: Anderson, Tiago e Carlos;

User Story 4

Tarefas

Descrição

Desenvolvedor

Número de horas

Concluída

TA 4.1

Página para seleção de clientes

Anderson

2

100%

TA 4.2

Seleção de clientes por critério

Anderson

4

100%

TA 4.3

Apresentação de template

Carlos

8

100%

TA 4.4

Substituição de informações

Tiago

8

70%

 

User Story 5

Tarefas

Descrição

Desenvolvedor

Número de horas

Concluída

TA 5.1

Calculador de SLA

Anderson

4

100%

TA 5.2

Calculador de Business Metrics

Anderson

6

100%

TA 5.3

Dashboard de SLA

Carlos

8

100%

TA 5.4

SLA com histórico de falhas

Tiago

8

100%

 

User Story 6

Tarefas

Descrição

Desenvolvedor

Número de horas

Concluída

etc

 

 

Como obter requisitos não funcionais

 

Para obter os requisitos não funcionais devemos investigar cada um dos tópicos listados abaixo:

Exemplos:

 

Atributo

Detalhes ou condição limite

Tempo de resposta

(Condição limite) Ao registrar um item sendo vendido, a descrição e preço devem aparecer em 2 segundos

Tipo de interface

(Detalhe) Usar formulários para entrada de dados e dialog boxes
(Detalhe) Maximizar a facilidade de uso via teclado e não via mouse

Tolerância a falhas

(Condição limite) Deve fazer log dos pagamentos autorizados via cartão de crédito em 24 horas, mesmo com falhas de energia ou de dispositivo

Plataformas operacionais

(Detalhe) Microsoft Windows 95, Windows, 98, Windows NT e Windows 2000

 

 

Como fazer um projeto arquitetural

 

Para construir um projeto arquitetural devemos responder as seguintes perguntas:

Sobre entidades externas ao sistema

Determinação de oportunidades para o reuso de software

Sobre a organização geral do sistema

Sobre a camada de interface

Sobre a camada de lógica da aplicação

Sobre a camada de dados persistentes


Sobre requisitos de desempenho

O que deve ser produzido?

Sobre a integração futura

Perguntas adicionais

Pergunta final

Você já verificou que a arquitetura bolada pode atender a todos os requisitos levantados?

 

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?"

"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 seqüê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?"