Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Introdução
Extreme Programming (XP) é uma metodologia de abordagem deliberada e
disciplinada para o desenvolvimento de software, salientando a satisfação dos clientes.
O primeiro projeto XP foi iniciado em 6 de março, 1996 e sua implementação foi bem
sucedida pois realça a satisfação do cliente.
O grande diferencial deste método é salientar o trabalho em equipe como o
melhor caminho para o sucesso no desenvolvimento dos sistemas. Todas as pessoas,
gerentes, clientes e desenvolvedores, que fazem parte da equipe são igualmente
respeitados por fazerem parte ativamente do desenvolvimento do projeto.
Os projetos implementados sob a metodologia XP seguem cinco valores
essenciais para o sucesso final: comunicação, simplicidade, feedback, respeito e
coragem. Estes valores interagem entre si e fazem com que a equipe de
desenvolvimento do sistema seja altamente produtiva. Os valores começam a interagir
quando os extreme programadores iniciam a comunicação com seus clientes e os
demais integrantes da equipe de desenvolvimento. Os desenvolvedores devem manter o
projeto simples e limpo e utilizar o feedback para testar o seu software a cada dia. Cada
sucesso na elaboração do sistema aprofunda o respeito pelas contribuições únicas de
cada membro da equipe, alem disso programadores XP são capazes de encarar novos
requisitos e tecnologias com coragem.
Segundo Kent as 12 práticas da metodologia XP são muito parecidas com um
quebra-cabeça, ou seja, individualmente as peças não fazem sentido, mas quando
combinadas formam uma imagem completa. Essas regras podem parecer simples e até
mesmo ingênuas, porém são baseadas em valores e princípios sólidos. A Figura 1 ilustra
como as práticas e os valores (que serão explicadas nas seções seguintes) são ligados
para assim conseguir a harmonia no desenvolvimento de um projeto sob a metodologia
XP.
Figura 1. Valores e práticas do XP integrados.
2. Valores do XP
Segundo Kent, o sucesso para o desenvolvimento de um sistema é alcançado quando
temos uma conduta que valoriza um conjunto de comportamentos que servem tanto as
necessidades humanas quanto as comerciais: comunicação, simplicidade, feedback e
coragem. O site oficial do XP ainda acrescenta outro valor, o respeito, e aconselha que
após inserir os valores já citados, adicionar os próprios valores que a equipe de
desenvolvimento ache pertinente.
1. Comunicação: todo mundo faz parte da equipe e se comunicar frente a frente
diariamente é fundamental. Problemas com o projeto podem passar
despercebidos pelo simples fato de falta de comunicação entre os integrantes da
equipe. O XP tem como objetivo manter o fluxo de comunicação empregando
principalmente nas práticas de programação em pares e testes.
2. Simplicidade: para este valor Kent ressalta a importância da seguinte pergunta
“Qual a coisa mais simples que poderia funcionar?”. É sabido que em
programação simplicidade não é fácil. A equipe de desenvolvimento deve focar
no que for necessário e solicitado, mas não mais. Esse tópico irá maximizar o
valor criado para o investimento feito. É importante ter em mente que se
tomarmos passos simples para os nossos objetivos as falhas também serão,
quando ocorrerem.
3. Feedback: segundo Kent o otimismo profissional é um perigo de programação e
o feedback é o tratamento. O feedback funciona a partir do momento que os
programadores escrevem rotinas de teste para qualquer lógica do sistema que
pode quebrar, assim o próprio sistema manda um feedback sobre o seu estado.
4. Coragem: esse valor enfatiza a honestidade e respeito entre a equipe, pois o fato
de querermos o sucesso não pode sobrepor a necessidade de dizer a verdade
sobre o progresso e as estimativas. Kent diz que,
“comunicação apóia coragem porque abre a possibilidade de mais
alto risco, experimentos de grande recompensa. Simplicidade suporta
coragem, pois você pode dar ao luxo de ser muito mais corajoso com
um sistema simples. Coragem apóia simplicidade, porque assim você
vê a possibilidade de simplificar o sistema que você desenvolveu.
Feedback concreto suporta coragem porque se sente muito mais
seguro tentar uma cirurgia no código, se você pode empurrar um
botão e ver o resultado dos testes no final.”
5. Respeito: todos da equipe devem se tratar com respeito pela importância
fundamental que cada um tem no desenvolvimento do sistema. Desenvolvedores
devem respeitar a experiência dos clientes assim como os clientes devem
respeitar a experiência dos desenvolvedores.
3. Práticas do XP
Podemos agora dar início ao desenvolvimento do nosso software, pois já sabemos o
problema a ser resolvido e temos um conjunto de valores para nos orientar de como
melhor proceder em cada uma das atividades (codificação, testes, monitoramento e
projeto).
Contamos com práticas simples que muitas vezes são abandonadas por serem
vistas como impraticáveis ou ingênuas. As principais praticas em XP são estruturadas
sob as quatro atividades visando fazê-las seguindo seus princípios.
Sempre que uma prática é fraca os pontos fortes das outras cobrirão as referidas
fraquezas o que constitui uma das vantagens do método.
As 12 práticas são conceituadas a seguir:
1. Jogo de Planejamento: nessa etapa o cliente é essencial, pois ele identifica
quais funcionalidades é prioridade para serem estimadas pelos desenvolvedores.
Ainda nessa etapa o cliente fica sabendo o que ira acontecer durante o projeto;
2. Pequenas Versões: o conceito de pequenas versões é colocar um sistema
simples em produção de imediato e em seguida disponibilizar uma nova versão
em intervalo espaço de tempo;
3. Metáfora: é onde os desenvolvedores traduzem as palavras do cliente para o
que ele espera no projeto. Essa é a etapa guia de todo o desenvolvimento, pois
cria uma historia de como funciona todo o sistema;
4. Projeto Simples: o sistema deve ser implementado de maneira simples.
Qualquer complexidade encontrada deve ser removida assim que for descoberto;
5. Teste: são testes criados pelos clientes e desenvolvedores para identificar quais
funcionalidades já estão prontas. Os testes devem rodar sem falhas de
desenvolvimento para continuar;
6. Refatoração: é a etapa que proporciona uma melhoria continua ao sistema
desenvolvido. Os desenvolvedores reestruturam o sistema sem executar
alterações a fim de eliminar a duplicação, melhorar a comunicação, simplificar
e/ou adicionar flexibilidade;
7. Programação em Pares: todo o código fonte é feito por dois programadores em
uma mesma máquina;
8. Propriedade ou Posse Coletiva: o código fonte não pertence a apenas um
membro da equipe e sim a todos, assim, qualquer um pode alterar qualquer parte
do código em qualquer lugar no sistema e a qualquer momento;
9. Integração Contínua: consiste em adicionar e/ou fortalecer quantas vezes for
possível a cada vez que uma tarefa for concluída. Esta etapa permite saber o
status real do desenvolvimento do sistema e diminui a possibilidade de conflitos
e erros no código fonte;
10. 40 horas por semana ou Ritmo Sustentável: respeitar o ritmo de trabalho
buscando formas de trabalhar com qualidade e saudável. Como regra não
exceder 40 horas semanais e se necessário fazer horas extras, porém nunca fazê-
las duas vezes consecutivas;
11. Time Coeso: consiste em incluir um usuário real do sistema, em tempo integral,
para esclarecer possíveis duvidas;
12. Padrões de Codificação: a equipe de desenvolvimento deve estabelecer regras
de padronização do código que deve ser seguida por todos e enfatizar a
comunicação através do código;
5. Etapas de desenvolvimento
Um projeto considerado ideal utilizando a metodologia Extreme Programming inicia
por uma curta fase de desenvolvimento, seguida de anos de produção e refinamentos
simultâneos e finalmente encerra quando o projeto não faz mais sentido (BECK, 2000).
O ciclo de vida XP é considerado bastante curto e, à primeira vista, difere dos
padrões dos modelos de processo convencionais. De acordo com Pressman (2006), as
atividades-chave do XP podem ser resumidas em quatro: planejamento, projeto,
codificação e testes. A Figura 2 ilustra o processo XP e mostra algumas das idéias-
chave e tarefas que estão associadas a cada atividade.
Nas subseções a seguir serão detalhadas as atividades presentes na Figura 2, bem
como suas fases e subfases.
Figura 2. O processo Extreme Programming (PRESSMAN, 2006).
5.1 Planejamento
A atividade de planejamento é realizada diversas vezes ao longo do projeto para
garantir que a equipe de desenvolvimento esteja sempre trabalhando naquilo que irá
gerar maior valor para o cliente a cada dia (TELES, 2005).
É preciso garantir que as ferramentas utilizadas permitirão a finalização do
projeto, além disso, que o código implementado irá executar adequadamente todos os
dias e, principalmente, que os desenvolvedores aprenderão as habilidades necessárias
para o desenvolvimento do sistema. Dessa forma, antes da etapa de planejamento
propriamente dita, existe uma etapa de preparação que os autores denominam de
Exploração que tem como objetivo entender o que o sistema deve fazer de forma a
proporcionar confiança suficiente para que o time consiga iniciar e finalizar o
programa, utilizando as ferramentas que possui.
Durante a exploração os programadores testam a performance da tecnologia a
ser utilizada, como exemplo podem ser citados os requisitos de hardware necessários
para rodar o sistema ou a largura de banda viável para que a rede possa sustentar o
sistema. Além disso, os programadores, divididos em duplas, desenvolvem um sistema,
sobre visões diferentes, semelhante ao que será realmente desenvolvido, durante uma
ou duas semanas. A melhor opção será escolhida. Se o período estimado não for
suficiente para testar a tecnologia, então ela deve ser classificada como um risco para o
projeto.
De acordo com Beck (2000), a exploração da arquitetura fornece aos
programadores uma boa noção da implementação quando o usuário apresentar seus
cartões de história (que serão detalhados na subseção seguinte), pois os programadores
precisarão estimar a duração de cada tarefa.
Entende-se que essa fase termina quando o cliente está convencido que existem
materiais suficientes para uma boa primeira entrega e os programadores estarem
convencidos de que não é possível melhorar, sem implementar o sistema.
5.1.1 User Stories
Wake (2002) considera que, histórias menores tendem a apresentar risco menor.
Quando os programadores não sabem como estimar alguma coisa, eles podem fazer
uma pontuação (spike), isto é, uma rápida programação da história, que pode durar
minutos, horas ou no máximo dois dias. O resultado de uma pontuação é conhecimento
suficiente para tentar uma estimativa.
Na realização de um projeto XP utiliza-se o conceito de “dia ideal de
desenvolvimento”, que representa um dia no qual o programador só trabalha na
implementação de funcionalidades, sem ser atrapalhado por uma atividade externa
(reuniões, atender telefone, etc.). Isso é importante, pois dará uma melhor noção ao
desenvolvedor ao estimar a implementação de user stories.
Wake (2002) ressalta que as histórias dos clientes são quebradas em pequenas
tarefas e, definidos quais os programadores que irão trabalhar em cada tarefa. No
primeiro dia de cada iteração, o time decide quais as histórias que serão trabalhadas. Os
programadores selecionam as tarefas, estimam e aceitam as tarefas que irão programar
a cada dia de trabalho. A Figura 7 mostra como funciona a fase de iteração.
A primeira iteração mostrará como a arquitetura do sistema irá se comportar.
Após a primeira versão de projeto ter sido entregue, a equipe calcula a velocidade do
projeto que corresponderá à quantidade de histórias do cliente implementadas durante a
primeira versão. Se um comprometimento excessivo ocorrer, o conteúdo das versões
será modificado ou as datas de entrega finais são alteradas.
6.2 Projeto
O processo Extreme Programming segue rigorosamente o princípio da simplicidade.
Um projeto simples é sempre preferível em relação a uma representação mais
complexa. Além disso, o projeto fornece diretrizes de implementação para uma história
como ela está escrita – nada mais, nada menos. O projeto de uma funcionalidade que
não esteja marcada para a iteração corrente é desencorajado, pois o desenvolvedor
considera que ela será exigida depois. Desta forma, o prazo final de cada interação será
seriamente respeitado.
O XP encoraja o uso de cartões CRC (Class-Responsibility-Colaborator) como
um mecanismo efetivo para raciocinar sobre o software no contexto orientado a objetos.
Os cartões CRC (Figura 9) identificam e organizam as classes orientadas a objetos que
são relevantes para o incremento de software atual.
Se em alguma parte do projeto de uma história for detectado um problema de
alta complexidade, o XP recomenda a criação imediata de um protótipo operacional
daquela parte do projeto. Denominado de solução de ponta o protótipo de projeto é
implementado e avaliado. A intenção é diminuir o risco quando a implementação
verdadeira começa e validar as estimativas originais correspondentes à história que
contém o problema proposto.
Figura 9. Modelo e exemplo de um cartão CRC (adptado de Taylor, 2003).
5.3 Codificação
Na fase de codificação a partir das histórias é desenvolvido o aplicativo executável.
Esta fase é suportada pelas seguintes práticas do XP: programação em par, padrão de
desenvolvimento, refatoração, integração contínua, propriedade coletiva e ritmo
sustentável, descritas a seguir.
5.3.2 Refatoração
A estrutura dos softwares tende a se degradar medida que novas funcionalidades são
inseridas, modificações são feitas e erros são corrigidos. Desta forma, para evitar que o
código se torne difícil de entender e perca desempenho, deve ser usada uma técnica
conhecida como refatoração. A refatoração consiste na alteração de pequenas partes do
sistema, de forma a torná-la mais simples, eficiente e fácil de ser entendida. Tais
alterações não devem influenciar nas funcionalidades do sistema, devem apenas
melhorar a estrutura do código. Essa prática de forma sistemática e com a maior
freqüência possível (TELES, 2011e).
A refatoração também torna o código mais auto-explicativo, reduzindo a
necessidade de documentação, pratica defendida pelo XP (TELES, 2005).
5.4 Testes
Um dos principais problemas dos sistemas computacionais é sua grande propensão a
falhas, que podem causar desde aborrecimentos até perda de vidas. Levando em
consideração o grande prejuízo causado por estes falhas, os engenheiros de software
vêm buscando meios para minimizar sua incidência através da identificação de erros no
código. Uma das abordagens que tem se mostrado bastante eficiente e muito usada na
maioria dos processos de desenvolvimento de software consiste na aplicação de uma ou
mais fases de teste durante o ciclo de vida do sistema (ENTREGUE, 2011).
Além da Programação em Par o XP se prevê duas abordagem para prover a
diminuição de erros: o teste de unidade (resultante do desenvolvimento dirigido a testes) e o
teste de aceitação. O primeiro tenta assegurar que cada componente do sistema funcione
corretamente. O segundo procura testar a interação entre os componentes, as quais dão
origem às funcionalidades (BECK, 2011).
Os testes de unidade procuram testar cada classe isoladamente. Porém geralmente
as classes de um sistema alcançam seus objetivos com a ajuda de outras. Desta forma, na
construção de um teste de unidade um dos maiores desafios é exatamente isolar a classe
que está sendo testada, para que nenhuma outra classe do sistema seja envolvida no teste
(TELES, 2011a).
Os testes de aceitação (também conhecidos como testes funcionais) são escritos
para assegurar que o sistema como um todo funcione, tratando o sistema inteiro como uma
caixa preta tanto quanto possível. Estes testes são executados pelo cliente ou com a
orientação do cliente, pois ele é a pessoa que conhece o negócio e, portanto, os resultados
que devem ser produzidos pelo sistema.
A maior diferença dos testes no XP com relação aos processos de
desenvolvimento de software tradicionais é a aplicação do desenvolvimento dirigido a
testes apresentado na seção a seguir.
Os testes devem poder ser executados isoladamente. A ordem dos testes não
deve importar.
Qualquer duplicação lógica dos testes deve ser eliminada.
Cada teste deve testar um e somente um negócio. Por exemplo, nunca escreva
um teste para testar a atribuição de um livro e o registro de um membro.
Todas as pré-condições, pós-condições e exceções devem ser testadas.
Segundo Beck (2011), escrever um teste antes de cada história também representa
uma forma de aprimorar a análise sobre as características dela. Pois a necessidade de
implementar um teste força o desenvolvedor a buscar maiores detalhes sobre o
comportamento da funcionalidade.
Segundo Beck (2011b) a criação dos testes antes do código funcional facilita a
implementação das funcionalidades. Ainda segundo este autor, o tempo gasto para a criação
de um teste de unidade e da implementação do seu código funcional é o mesmo gasto para
criar o código a partir do zero. Porém, como já se tem o código de testes antes da
implementação da funcionalidade não é necessário fazê-lo depois, resultando em aumento
de velocidade de produção.
6. Vantagens e Desvantagens
6.1 Vantagens
XP é ideal em projetos onde o cliente não sabe exatamente o que quer.
O feedback constante facilita a adaptação do projeto as eventuais mudanças de
requisitos do cliente. Estas alterações nos requisitos são muitas vezes críticas
nas metodologias tradicionais, que não apresentam meios de se adaptar
rapidamente às mudanças.
Entregas freqüentes de partes funcionais do sistema permitem ao cliente
conhecer e participar com maior intensidade do desenvolvimento do sistema.
Desta forma, o cliente não precisa esperar muito para ver o software
funcionando, como nas metodologias tradicionais.
A integração e os testes contínuos contribuem, em muito, para a qualidade do
sistema em desenvolvimento.
As práticas do XP são usadas pelos integrantes da equipe, para facilitar no
desenvolvimento e agregar qualidade no projeto, com isso todos do time devem
estar cientes de cada fase do sistema.
torna o processo mais ágil e flexível. As práticas do XP são criadas para
funcionarem juntas e fornecer mais valor do que cada uma poderia fornecer
individualmente.
Análise prévia de tudo que pode acontecer durante o desenvolvimento do
projeto, oferecendo qualidade, confiança, data de entregas e custos promissores.
6.2 Desvantagens
Eliminação de algumas práticas vinculadas ao desenvolvimento de software -
como a análise do problema por meio de diagramas. O que ele retrata como
importante auxílio no entendimento do problema.
A informalidade na análise de requisitos pode provocar desconforto aos clientes.
Fazendo com que esses não acreditem fielmente no sucesso do sistema proposto
e se sintam inseguros quanto ao bom funcionamento do sistema.
Falta da análise e planejamento de riscos – uma vez que riscos acontecem
freqüentemente em projetos de desenvolvimento de software. Deve-se, então,
implementar uma análise e estratégias que buscam diminuir os erros.
É freqüente acontecer bugs em todos os projetos de desenvolvimento de
software.
Refatoração do código pode ser vista como irresponsabilidade e incompetência,
pois, não existe uma preocupação formal na utilização do código.
A falta de documentação é característica do processo XP, pois, o mesmo não dá
muita ênfase em burocracias (documentos, formulários, processos, controles
rígidos, etc.). Sendo, portanto, importante a elaboração de documentos e
diagramas que facilitem no entendimento e identificação do problema.
9. Ferramentas
Existem ferramentas de suporte de processos ágeis. Este conjunto é composto por
ferramentas ainda algo limitadas e por ferramentas já bastante desenvolvidas, com um
conjunto de funcionalidades bastante rico (PINTO, 2010). As ferramentas abaixo suportam
o XP:
VersionOne: é uma ferramenta comercial e especificamente desenvolvida para
auxiliar na gestão de projetos com processos ágeis.
http://www.versionone.com/
RallyDev: é, também, uma ferramenta comercial que possui uma boa interface e
contém um bom conjunto de relatórios e gráficos. O facto de suportar o RUP, XP e
Scrum (PINTO, 2010) funciona como uma grande vantagem desta ferramenta.
http://www.rallydev.com/
TargetProcess: Trata-se de uma ferramenta altamente configurável, podendo ser
adaptada de forma a corresponder às necessidades do processo de desenvolvimento
escolhido (PINTO, 2010). A ferramenta é muito completa, contendo várias
funcionalidades. No entanto, possui demasiados menus, nem sempre estruturados da
melhor forma.
http://www.targetprocess.com/
Xplanner: ferramenta de projeto, planejamento e acompanhamento de equipes que
utilizam o XP. Open Source.
http://www.xplanner.org/
Referências
BECK, Kent. Extreme Programming Explained: Embrace Change. Longman Higher
Education, 2000. Disponível em: <http://books.google.com.br>. Acesso em 08 de
março de 2011.
BECK, K. Unit Tests. Disponível em:
<http://www.extremeprogramming.org/rules/unittests.html>. Acesso em: 10 Mar.
2011a.
BECK, K. Code the Unit Test First. Disponível em:
<http://www.extremeprogramming.org/rules/testfirst.html >. Acesso em: 10 Mar.
2011b.
BECK, K. Pair programming. Disponível em:
<http://www.extremeprogramming.org/rules/pair.html>. Acesso em: 10 Mar. 2011c.
BECK, K. Coletive Ownership. Disponível em:
<http://www.extremeprogramming.org/rules/collective.html>. Acesso em: 10 Mar.
2011d.
BONA, Cristina. Avaliação de Processos de Software: Um estudo de caso em XP e
ICONIX. Florianópolis, 2002. Dissertação (Mestrado em Engenharia de Produção) –
Programa de Pós-Graduação em Engenharia de produção, UFSC, 2002.
ENTREGUE seu código com confiança utilizando desenvolvimento dirigido a testes.
Disponível em: <http://javafree.uol.com.br/artigo/871450/Entregue-seu-codigo-com-
confianca-utilizando-desenvolvimento-dirigido-a-testes.html>. Acesso em 10 Mar.
2011.
GONÇALVES, A. e DIAS, V. P. (2008). Extreme Programming (XP): metodologia
ágil de desenvolvimento de software. In 2ª Jornada Integrada de Cursos CTESOP
(Centro Técnico-Educacional Superior do Oeste Paranaense).
PINTO, M. A. P. Gestão de Projectos com Processos Ágeis. Lisboa, 2010. Dissertação
(Mestrado em Engenharia Informática e de Computadores) – Instituto Superior
Técnico, Universidade Técnica de Lisboa, 2010.
PRESSMAN, Roger. Engenharia de Software. 6ª ed. São Paulo: McGraw-Hill, 2006.
SOMMERVILLE, Ian. Engenharia de Software. 8ª ed. Pearson Addison-Wesley, 2007.
TAYLOR, David A. Engenharia de Negócios com Tecnologia de Objetos. Editora
Axcel: 2003.
TELES, Vinícius Manhães. Um Estudo de Caso da Adoção das Práticas e Valores do
Extreme Programming. Rio de Janeiro : UFRJ/IM, 2005. Dissertação (Mestrado em
Informática).
TELES, V. M. Extreme Programming: Testes com Mock Objects. Disponível em:
<http://www.improveit.com.br/xp/praticas/tdd/mock_objects> Acesso em: 10 Mar.
2011a.
TELES, V. M. Extreme Programming: Programação em Par. Disponível em:
<http://improveit.com.br/xp/praticas/programacao_par > Acesso em: 10 Mar. 2011b.
TELES, V. M. Extreme Programming: Integração Contínua. Disponível em:
<http://www.improveit.com.br/xp/praticas/integracao>. Acesso em: 10 Mar. 2011c.
TELES, V. M. Extreme Programming: Padrão de desenvolvimento. Disponível em:
<http://improveit.com.br/xp/praticas/codigo_unificado> Acesso em: 10 Mar. 2011d.
TELES, V. M. Extreme Programming: Refatoração. Disponível em:
<http://improveit.com.br/xp/praticas/refatoracao>. Acesso em: 10 Mar. 2011e.
TELES, V. M. Extreme Programming: Código Coletivo. Disponível em:
<http://improveit.com.br/xp/praticas/codigo_coletivo>. Acesso em: 10 Mar. 2011f.
VIANA, L. M. e Deschamps, A. (2008). XP – Extreme Programming. Disponível em:
<http://www.apicesoft.com/common/articles/Apice> Acessado em: 24/02/2011.
WAKE, William C. Extreme Programming Explored. Reading, Massachusetts: Ed.
Addison-Wesley, 2002.
WELLS, Don. Disponível em: < http://www.extremeprogramming.org >. Acesso em 08
de março de 2011.