Muitas das práticas da XP estão rapidamente se tornando
partes de outros processos. Por exemplo, a programação em pares e o teste
primeiro são agora oferecidos como parte da estrutura do RUP. As principais
práticas do XP são:
Todos
em um projeto XP fazem parte de uma equipe. A equipe deve incluir um
representante do cliente.
O cliente deve ter o poder de responder perguntas e tomar decisões relativas à prioridade de recursos, riscos e assim por diante. Tomarão parte no planejamento escrevendo e priorizando histórias e resolvendo sobre o conteúdo liberado. Quando trabalham junto com a equipe de desenvolvimento, eles fornecem feedback constante, bem como respondem todas as perguntas da equipe sobre o que realmente queriam dizer as escrever histórias. O cliente também é responsável por escrever os testes de aceitação que verificam se cada história é implementada corretamente. Geralmente, os clientes não são desenvolvedores de software, e, assim, eles precisam da ajuda da equipe para automatizar os testes de aceitação.
Além do cliente, deve haver um representante (ou um de seus assessores) é usuário final que conhece o domínio do problema e suas necessidades.
Outros papéis assumidos pelos integrantes da equipe:
Os
jogadores do jogo de planejamento são os técnicos e o cliente. Os projetos de
desenvolvimento de software de qualquer tamanho significativo precisam ser
planejados. O planejamento serve para fornecer uma compreensão mútua para todas
as partes de quanto tempo, aproximadamente, levará o projeto. Serve também como
um medidor do tamanho do projeto com relação à capacidade da organização. Deve
definir as estimativas de prazo para cada tarefa e as prioridades (quais tarefas
são mais importantes).
Dois
passos chave:
1.
Planejamento
de um release:
2.
Planejamento
de uma iteração (de duas semanas):
O
planejamento é um ótimo feedback para que cliente possa dirigir o projeto. Com
ele é possível ter uma idéia clara do avanço do projeto, reduzindo riscos e
aumentando as chances de sucesso.
No planejamento, o usuário-cliente elabora
“estórias” que descrevem cada funcionalidade desejada. O programador as
implementa.
Cada estória deve ser entendida suficientemente bem
para que programadores possam estimar sua dificuldade e deve ser testável.
Os testes de aceitação são elaborados pelo cliente,
algumas de suas características:
·
São testes automáticos
·
Quando rodarem com sucesso significa que a funcionalidade foi
implementada
·
Devem ser rodados novamente em cada iteração futura
·
Oferecem feedback, pois pode se saber, a qualquer momento, quantos % do
sistema já foi implementado e quanto falta implementar.
“Releases antecipados, releases
freqüentes.“ “Resultados freqüentes, tangíveis e funcionais.” Essas são as duas
frases que resumem a idéia do uso dos releases pequenos. Com os releases
pequenos, se coloca as novas funcionalidades na mão dos verdadeiros usuários o
mais cedo possível. Fornecendo um feedback valioso sobre estar no caminho
certo. Além de detectar os defeitos o mais cedo possível. Um release com um
recurso implementado pela metade não tem muita utilidade. A regra para uma
equipe de XP é que o release não pode ser liberado enquanto não estiver
completamente acabado.
A cada iteração é
disponibilizado um software 100% funcional, onde cada release possui
funcionalidades prioritárias, já que os valores de negócio implementados foram
escolhidos pelo cliente. O release pode ser destinado ao usuário-cliente ou ao
usuário final do sistema.
O design simples e a integração
contínua são práticas essenciais para viabilizar os pequenos releases.
O
design está presente em todas as etapas do XP. O projeto começa simples e se
mantém simples através de testes e refinamento do design
(refatoramento).
Buscar
o design simples e claro é levado a extremo no XP. Não é permitido que se
implemente nenhuma função adicional que não será usada na atual
iteração.
A
implementação ideal é aquela que roda todos os testes, expressa todas as idéias
que se deseja expressar, não contém código duplicado e que tem o mínimo de
classes e métodos. O que não é necessário agora não deve ser implementado.
Prever o futuro é “anti-XP” e impossível (requisitos
mudam).
No
XP as pessoas desenvolvem em pares. Cada código de linha de produção é escrito
por um par de desenvolvedores.
O
piloto tem o controle escreve ativamente os testes, codifica, integra ou faz o
refatoramento. O co-piloto observa, tendo em mente os objetivos estratégicos,
encontrando os erros de ortografia e sintaxe e oferecendo idéias e sugestões.
Os
papéis são alternados frequentemente e os pares são trocados periodicamente.
Com
a programação em pares é obtido os seguintes benefícios:
Apesar
de se ter uma pessoa programando pelo preço de duas pessoas, as pesquisas
demonstram que duplas produzem código de melhor qualidade em aproximadamente o
mesmo tempo que programadores trabalhando sozinho e 90% dos que aprendem
programação em duplas a preferem.
O
desenvolvimento de software que não é guiado por testes não é XP. O feedback é
um dos valores fundamentais do XP e sem os testes não há como obter feedback.
Os
testes “puxam” o desenvolvimento do software. Os programadores XP escrevem os
testes primeiro, em seguida escrevem o código e rodam os testes para validar o
código escrito.
Cada
unidade de código só tem valor se seu teste funcionar 100%. Todos os testes são
executados automaticamente, o tempo todo. Os testes são a documentação
executável do sistema.
Algumas
das vantagens de adotar a abordagem de testar primeiro:
Não
existe uma etapa isolada de design em XP, o próprio código é o
design.
De
acordo com Martin Fowler [Fowler, 1999]:
“Refactoring
é o processo de alterar um sistema de software de tal forma que ele não altere o
comportamento externo do código e melhore sua estrutura interna. Essa é uma
forma disciplinada de limpar o código que minimiza as chances de introdução de
bugs”.
O
design é melhorado continuamente através do refinamento. Ao escrever os testes é
possível fazer o refactoring para tornar algo mais fácil de ser testado. Ao
codificar alguma funcionalidade, o refactoring pode ser feito para facilitar a
inclusão ou remoção de código duplicado. Além de poder utilizar um código
existente e reestruturá-lo para que seja compatível com um padrão de
projeto.
Antes
de fazer uma mudança, deve ser feito um refactoring no código. De acordo com Ron
Jeffries [Jeffries, 2001A]:
“Existem
dois momentos em que se considera o refactoring como parte da execução de uma
tarefa: antes de a tarefa começar, para “criar espaço” para o código novo, e
após a tarefa ser implementada, para tornar os códigos novo e antigo o mais
claro e simples possível”.
Os
Projetos XP mantém o sistema continuamente integrado. A integração de todo o
sistema pode ocorrer várias vezes ao dia (pelo menos uma vez ao dia). Geralmente
após a conclusão de cada tarefa. Todos os testes (unidade e integração) devem
ser executados.
Segundo
Fowler a integração contínua “reduz o tempo passado no inferno da integração”.
Quanto mais tempo durarem os bugs de integração, mais difícil serão de
eliminar.
Entre
os benefícios alcançados com a integração estão:
Em
um projeto XP qualquer dupla de programadores pode melhorar o sistema a qualquer
momento. Não é preciso pedir autorização para realizar alterações em qualquer
arquivo.
Todo
o código em XP pertence a um único dono: a equipe.
Todos
da equipe compartilham a responsabilidade pelas alterações. Os testes e a
integração contínua são essenciais e dão segurança aos
desenvolvedores.
Programação
em pares reduz os riscos de danos.
O
código escrito em projetos XP segue um padrão de codificação definido pela
equipe. Todos os membros da equipe devem concordar voluntariamente em seguir
esses padrões.
O
padrão de codificação define um padrão para nomes de métodos, classes e
variáveis. Todo o código parece que foi escrito por um único indivíduo,
competente e organizado.
O
código com uma estrutura familiar facilita e estimula:
Uma
metáfora é uma forma poderosa de relacionar uma idéia difícil em uma área
desconhecida. Equipes XP devem utilizar metáforas para manter uma visão
compartilhada do funcionamento do sistema.
Tendo
uma metáfora compartilhada, todas as pessoas envolvidas compartilham de uma
compreensão da visão do quadro geral do sistema e do problema que deve ser
solucionado. A metáfora também serve como uma definição da arquitetura
conceitual geral do sistema. Servem de base para estabelecimento de padrões de
codificação, facilitando a escolha de nomes de métodos, classes, campos de
dados, etc. Fornecem um contexto para discutir os problemas e suas
soluções.
Os
Projetos XP estão na arena para ganhar com o objetivo de entregar softwares de
melhor qualidade, obtendo a maior produtividade dos programados e a satisfação
do cliente.
Projetos
com cronogramas apertados que sugam todas as energias dos programadores não são
projetos XP.
“Semanas
de 80 horas” levam à baixa produtividade. E produtividade baixa leva à código
ruim, relaxamento da disciplina (testes, refactoring, simplicidade), além de
dificultar a comunicação, aumentar a irritação e o stress da equipe. O tempo
ganho será perdido depois.
Os
projetos devem ter um ritmo sustentável por longos prazos. Eventuais horas
extras são aceitáveis quando a produtividade é maximizada no longo
prazo.