Extreme Programming: Tudo o que você precisa saber!
Já contei aqui para vocês sobre alguns métodos e frameworks ágeis, como o Scrum e o Kanban, hoje irei apresentar um novo método: o Extreme Programming.
Diferente dos outros que estão muito focados na gestão de projetos, o Extreme Programming está mais voltado ao dia a dia do programador e como ele pode melhorar cada vez mais suas práticas executadas.
Muitas vezes o programador não está interessado em métodos de melhoria contínua e deixam para estudar sobre isso quando se tornam mais experientes em suas carreiras.
Por este motivo é importante que você, como Agile Coach ou Scrum Master, conheça estas práticas e quais as melhores formas que você pode realizar esta passagem de conhecimento para o seu time.
O que é o Extreme Programming?
O Extreme Programming (Programação Extrema, em português) ou apenas XP é um método de desenvolvimento de software leve, não prescritivo e que procura fundamentar as suas práticas por um conjunto de valores.
Este método é focado em agilidade de equipes e qualidade de projetos, adotando estratégias constantes de acompanhamento e realização de vários pequenos ajustes durante o desenvolvimento de software. Ele foi criado em 1997 com o engenheiro de software Kent Beck.
Diferente do que comentam, é possível utilizar o método com programadores iniciantes e mescla-los com programadores mais experientes.
Um dos principais objetivos do Extreme Programming é levar ao extremo o seu conjunto de boas práticas, propiciando que o projeto seja executado dentro do prazo e do orçamento, sem contar a satisfação do cliente.
Podemos encontrar algumas características marcantes no método, tais como:
- Feedback contínuo.
- Abordagem Incremental.
- Comunicação entre todos os envolvidos.
O Extreme Programming tem semelhança com o Scrum em termos de valores e modelos de desenvolvimento, porém o mais importante é que os dois são complementares um do outro, sendo o Scrum focado na gestão de projetos e o XP nas práticas de engenharia de software.
Valores do XP
O Extreme Programming possui 5 valores fundamentais, conforme podemos ver abaixo:
- Comunicação: As práticas do XP são organizadas de modo que não podem ocorrer sem que haja comunicação, ela é fundamental para que não ocorra problemas nos processos e conflitos entre equipe, cliente e fornecedor. Esta comunicação é muito importante na eliminação de documentos e favorece a comunicação face a face.
- Simplicidade: É necessário fazer o mais simples possível, desde o levantamento de requisitos até a entrega da solução desenvolvida, o objetivo é reduzir o desperdício e fazer apenas o suficiente para que seja funcional e agregue valor.
- Feedback: Diferente do Scrum, o feedback do XP é algo mais técnico, onde devemos sempre “Perguntar ao Software e não a um documento” e uma forma rápida de realizar isto é através de entrega contínua e testes automatizados. As equipes devem se adaptar conforme as necessidades surgem ao longo do desenvolvimento e sempre propor melhorias.
- Respeito: É fundamental que os membros das equipes se respeitem para que a comunicação ocorra da melhor forma, com isto o trabalho de equipe e a aceitação de feedbacks funcionará, principalmente quando houver a necessidade de promover mudanças.
- Coragem: Os membros do time devem ter coragem para dizer “não” quando necessário ou para informar que o projeto não irá ser entregue conforme a data planejada. No XP é essencial que o cliente esteja a par de tudo o que está acontecendo, por isto a coragem é muito importante.
Uma organização que queira adotar o Extreme Programming tem que saber que é muito importante treinar seus colaboradores nestes 5 valores, pois somente com eles em mente que as suas práticas irão ocorrer com sucesso.
Práticas do XP
Além dos valores, o Extreme Programming possui algumas práticas que utilizadas em conjunto vão alavancar o desenvolvimento de software da sua organização:
- Planejamento (Planning Game): É uma reunião de planejamento no qual o cliente (ou um representante) prioriza os itens para a próxima interação de desenvolvimento e os desenvolvedores estimam o tempo necessário para a entrega. Os desenvolvedores podem fazer isto de várias forma, sendo uma delas o Planning Poker.
- Releases Curtas (Small Releases): São entregas frequentes ao seu cliente, sendo que estas entregas devem ser pequenas versões funcionais do projeto. O objetivo dessa entrega é permitir que possam ser detectadas necessidades de alterações de requisitos no software o mais rápido possível.
- Metáfora (Metaphor): Os membros da equipe devem entender qual é a realidade de cada cliente, é necessário traduzir tudo o que o cliente está dizendo para o significado que ele espera dentro do projeto.
- Design Simples (Simple Design): O código deve ser simples a ponto que qualquer desenvolvedor consiga altera-lo quando necessário, sem comprometer a qualidade do projeto. É fundamental que a entrega seja somente da necessidade do cliente.
- Testes de Aceitação (Customer Tests): São testes elaborados pelo cliente em conjunto com sua equipe, estes testes são os critérios de aceitação do software para aceitar um determinado requisito do projeto.
- Cliente Presente (Customer Available): O cliente deve estar disponível o tempo todo para colaborar com o time, seja com dúvidas, alterações ou priorizações de escopo. Ele deve ser comunicado de todas as atividades em andamento.
- Semana de 40 Horas (Sustainable Pace): Os times devem trabalhar com qualidade e seguindo um ritmo de trabalho sustentável, sem a realização de horas extras. Deve ser evitado a sobrecarga de trabalho e criado condições favoráveis na carga de trabalho, até mesmo deixando a equipe livre para relaxar, brincar ou fazer o que quiser, com o objetivo de equilibrar o trabalho mental e físico.
- Refatoração (Refactoring): É um processo que permite a melhoria contínua da programação com o objetivo de melhorar a clareza e leitura do código, além de facilitar sua manutenção. Isso faz com que diminua a quantidade de erros e mantem a compatibilidade do código já existem com os novos que surgiram.
- Integração Contínua (Continuous Integration): Sempre que o time desenvolver uma nova funcionalidade, esta deve ser integrada o mais rápido possível com a versão atual do sistema com o objetivo de receber feedback e saber o status real da programação.
- Codificação Padrão (Coding Standards): Os membros do time devem estabelecer regras de programação e todos devem seguir, desta forma todos terão a mesma visão do código e irá parecer que ele foi editado pela mesma pessoa, quando na verdade pode ter sido por 10 ou por 100 pessoas.
- Propriedade Coletiva (Collective Ownership): Os membros do time são responsáveis por todo o código, todos eles possuem acesso e podem melhorar o código a qualquer momento. Objetivo é que todas as pessoas conheçam todas as partes do sistema.
- Programação em Pares (Pair Programming): É a programação em par/dupla em um único computador, geralmente formada por um iniciante e outro especialista que servirá como instrutor da linguagem de programação. O objetivo da programação em par é que o código seja revisto por duas pessoas, diminuindo assim a possibilidades de erros e buscando o compartilhamento de conhecimento entre os programadores.
- Desenvolvimento Orientado a Testes (Test Driven Development): Primeiro será criado os testes unitários e depois será desenvolvido o código para que os testes funcionem, estes testes são utilizados para facilitar o entendimento do projeto.
- Reuniões (Stand Up Meeting): São reuniões realizadas em pé e de curta duração, com o objetivo de serem produtivas e que o time se mantenha alinhado com o que deve ser realizado e qual o andamento do projeto.
Isto é apenas um resumo de como cada prática funciona, em breve irei trazer mais de cada um delas e como você consegue implementar o Extreme Programming dentro da sua organização.
Extreme Programming é só um dos diversos métodos focado em práticas de engenharia de software existentes atualmente, é muito comum que a gente conheça apenas os métodos mais convencionais e utilizados nas organizações, mas existem vários que podem nos ajudar.
E ai o que você achou deste tema? Já utiliza no seu dia a dia? Me conta aqui nos comentários.
Se preferir outro lugar, você consegue falar comigo também pelo Instagram ou pelo LinkedIn.