Extreme Programming (XP)
Metodologia Ágil focada na excelência técnica e na colaboração próxima entre os envolvidos no projeto. Seu objetivo é entregar software de alta qualidade por meio de práticas iterativas, feedback constante, melhoria contínua do processo.
Características
-
Continuous Integration
-
Continuous Delivery
-
Continuous Refactoring
-
Test Driven Development
-
Requirements as User Stories
-
Object Oriented Programming
Valores
Comunicação |
Enfatiza a colaboração estreita, embora informal (verbal), entre clientes e desenvolvedores, o estabelecimento de metáforas eficazes para comunicar conceitos importantes, feedback (realimentação) contínuo e evitar documentação volumosa como meio de comunicação. |
|---|---|
Simplicidade |
Restringe os desenvolvedores a projetar apenas para as necessidades imediatas, em vez de considerarem as necessidades futuras. O intuito é criar um projeto simples que possa ser facilmente implementado em código. Se o projeto tiver que ser melhorado, ele poderá ser refatorado mais tarde. |
Feedback |
Provém de três fontes: do próprio software implementado, do cliente e de outros membros da equipe de software. |
Coragem |
Uma equipe XP ágil deve ter disciplina (coragem) para projetar para hoje, reconhecendo que as necessidades futuras podem mudar dramaticamente exigindo, consequentemente, substancial retrabalho em relação ao projeto e ao código implementado. |
Respeito |
Buscar respeito entre seus membros, entre outros envolvidos e os membros da equipe, e, indiretamente, para o próprio software. |
Atividades
- Planejamento
-
O jogo do planejamento se inicia com a atividade de ouvir — uma atividade de levantamento de requisitos que capacita os membros técnicos da equipe XP a entender o ambiente de negócios do software e possibilita que se consiga ter uma percepção ampla sobre os resultados solicitados, fatores principais e funcionalidade. A atividade de Ouvir conduz à criação de um conjunto de histórias de usuários que descreve o resultado, as características e a funcionalidade requisitados para o software a ser construído. O cliente atribui um valor (uma prioridade) á história baseando-se no valor de negócio global do recurso ou função. Os membros da equipe XP avaliam então cada história e atribuem um custo — medido em semanas de desenvolvimento - a ela.
- Projeto
-
Segue rigorosamente o princípio KISS. É preferível sempre um projeto simples, do que uma representação mais complexa. Como acréscimo, o projeto oferece um guia de implementação para uma história à medida que é escrita — nada mais, nada menos. O projeto de funcionalidade extra(pelo fato de o desenvolvedor supor que ela será necessária no futuro) é desencorajado. Encoraja o uso de cartões CRC como um mecanismo eficaz para pensar sobre o software em um contexto orientado a objetos. Os cartões CRC (classe-responsabilidade-colaborador) identificam e organizam classes orientadas a objetos relevantes para o incremento de software corrente. Se um difícil problema de projeto for encontrado como parte do projeto de uma história, recomenda-se a criação imediata de um protótipo operacional dessa parte do projeto. Denominada solução pontual, o protótipo do projeto é implementado e avaliado.
- Codificação
-
Depois de desenvolvidas as histórias e o trabalho preliminar de elaboração do projeto ter sido feito, a equipe não passa para a codificação, mas sim, desenvolve uma série de testes de unidades que exercitarão cada uma das histórias a ser inclusas na versão corrente (incremento de software). Uma vez criado os testes de unidades, o desenvolvedor poderá melhor focar-se no que deve ser implementado para ser aprovado no teste. Nada estranho é adicionado (KISS). Estando o código completo, este pode ser testado em unidade imediatamente, e, dessa forma, prover, instantaneamente, feedback para os desenvolvedores. Um conceito-chave na atividade de codificação é a programação em dupla. O XP recomenda que duas pessoas trabalhem juntas em uma mesma estação de trabalho para criar código para uma história. Isso fornece um mecanismo para resolução de problemas em tempo real e garantia da qualidade em tempo real (o código é revisto à medida que é criado).
- Testes
-
Como os testes de unidade individuais são organizados em um conjunto de testes universal, os testes de integração e validação do sistema podem ocorrer diariamente. Isso dá á equipe XP uma indicação contínua do progresso e permite lançar alertas logo no início, caso as coisas não andem bem. Os testes de aceitação da XP, também denominados testes de cliente, são especificados pelo cliente e mantém o foco nas características e na funcionalidade do sistema total que são visíveis e que podem ser revistas pelo cliente.
Práticas
Planning Game
O desenvolvimento é feito em interações semanais. No início da semana, desenvolvedores e cliente reúnem-se para priorizar as funcionalidades. Essa reunião recebe o nome de Jogo do Planejamento e nelas já devem estar criadas antecipadamente pelos usuários as User Stories (histórias dos usuários). Nessa reunião, o cliente identifica prioridades e os desenvolvedores as estimam. O cliente é essencial neste processo e assim ele fica sabendo o que está acontecendo e o que vai acontecer no projeto. Como o escopo é reavaliado semanalmente, o projeto é regido por um contrato de escopo negociável, que difere significativamente das formas tradicionais de contratação de projetos de software. Ao final de cada semana, o cliente recebe novas funcionalidades, completamente testadas e prontas para serem postas em produção.
Small Releases
A liberação de pequenas versões funcionais do projeto auxilia muito no processo de aceitação por parte do cliente, que já pode testar uma parte do sistema que está comprando. As versões chegaram a ser ainda em tempo real, como controle de tráfego aéreo. É preciso traduzir as palavras do cliente para o significado que ele espera dentro do projeto.
Metaphor
Procura facilitar a comunicação com o cliente, entendendo a realidade dele. O conceito de rápido para um cliente de um sistema jurídico é diferente para um programador experiente em controlar comunicação em sistemas de tempo real, como controle de tráfego aéreo. É preciso traduzir as palavras do cliente para o significado que ele espera dentro do projeto.
Simple Design
Simplicidade é um princípio da XP. Projeto simples significa dizer que caso o cliente tenha pedido que na primeira versão apenas o usuário teste possa entrar no sistema com a senha 123 e assim ter acesso a todo o sistema, você vai fazer o código exato para que esta funcionalidade seja implementada, sem se preocupar com sistemas de autenticação e restrições de acesso. Um erro comum ao adotar essa prática é a confusão por parte de programadores de código simples e código fácil. Nem sempre o código mais fácil de ser desenvolvido levará a solução mais simples por parte de projeto. Esse entendimento é fundamental para o bom andamento do XP. Código fácil deve ser identificado e substituído por código simples.
Customer Tests
São testes construídos pelos clientes em conjunto com analistas e testadores, para aceitar um determinado requisito do sistema.
Sustainable Pace
Trabalhar com qualidade, buscando ter ritmo de trabalho saudável (40 horas / semana, 8 horas / dia), sem horas extras. Horas extras são permitidas quando trouxerem produtividade para a execução do projeto. Outra prática que se verifica neste processo é a prática de trabalho energizado, onde se busca trabalho motivado sempre. Para isto o ambiente de trabalho e a motivação da equipe devem estar sempre em harmonia.
Collective Ownership
O código fonte não tem dono e ninguém precisa solicitar permissão para poder modificá-lo. O objetivo com isto é fazer a equipe conhecer todas as partes do sistema.
Pair Programming
É a programação em par/dupla num único computador. Geralmente a dupla é formada por um iniciante na linguagem e outra pessoa funcionando como um instrutor. Como é apenas um computador, o novato é que fica à frente fazendo a codificação, e o instrutor acompanha ajudando a desenvolver suas habilidades. Desta forma o programa sempre é revisto por duas pessoas, evitando e diminuindo assim a possibilidade de defeitos. Com isto busca-se sempre a evolução da equipe, melhorando a qualidade do código fonte gerado.
Coding Standards
A equipe de desenvolvimento precisa estabelecer regras para programar e todos devem seguir estas regras. Desta forma parecerá que todo o código fonte foi editado pela mesma pessoa, mesmo quando a equipe possui 10 ou 100 membros.
Test Driven Development
Primeiro crie os testes unitários (unit tests) e depois crie o código para que os testes funcionem. Esta abordagem é complexa no início, pois vai contra o processo de desenvolvimento de muitos anos, mas os testes unitários são essenciais para manter a qualidade do projeto.
Refactoring
É um processo que permite a melhoria contínua de programação, com o mínimo de introdução de erros e mantendo a compatibilidade com o código já existente. Refatorar melhora a clareza (leitura) do código, divide-o em módulos mais coesos e de maior reaproveitamento, evitando a duplicação de código-fonte. A refatoração melhora o código, mas sem modificar a funcionalidade.
Integração Contínua
Sempre que produzir uma nova funcionalidade, nunca esperar uma semana para integrar á versão atual do sistema. Isto só aumenta a possibilidade de conflitos e a possibilidade de erros no código fonte. Integrar de forma contínua permite saber o status real da programação.