O que é? eXtreme Programming (XP) A metodologia ágil para desenvolvimento de software mais conhecida atualmente (Kent (Kent Beck) Beck) Promete: (Sec 17.2 - Sommerville) UNIVERSIDADE FEDERAL DE ALAGOAS Curso de Ciência da Computação Engenharia de Software I Prof. Rômulo Nunes de Oliveira ...isso tudo graç graças a um ajuste harmônico e coeso entre cliente e equipe de desenvolvedores. desenvolvedores. A Quem se Destina XP? E o que tem de diferente? A XP foge do padrão tradicional de desenvolvimento da Engenharia de Software. Na verdade, pode ser vista como um desenvolvimento evolucioná evolucionário e incremental São pequenas etapas por vez. O cliente acompanha cada incremento (tempo curto) Cada pequena etapa é planejada de forma simples Os testes são planejados antes da programaç programação Somente quando a etapa está está funcionando que é incluí incluída no software. Ser mais econômica Melhor qualidade Baixo índice de insatisfaç insatisfação do cliente Menos estresse no desenvolvimento Deixar o programador livre Grupos de 2 a 10 programadores Equipes onde existam programadores experientes Projetos de 1 a 36 meses (calendá (calendário) De 1000 a 250 000 linhas de có código Papé Papéis: Programadores (foco central)(sem hierarquia) “Treinador” Treinador” ou “Técnico” cnico” (coach) coach) “Acompanhador” Acompanhador” (tracker) tracker) Cliente 1 As 12 Práticas de XP As 12 Práticas de XP 1 - Jogo de Planejamento (Planning Game): 1. 2. 3. 4. 5. 6. 7. Planejamento Fases Pequenas Metáfora Design Simples Testes Refatoramento Programação Pareada 8. 9. 10. 11. Propriedade Coletiva Integração Contínua Ritmo Sustentável Desenvolvimento orientado a testes 12. Padronização do código As 12 Práticas de XP 2 - Pequenas Versões (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 chegam a ser ainda menores que as produzidas por outras metodologias incrementais, como o RUP. • • • • O desenvolvimento é feito em iterações semanais. No início da semana, desenvolvedores e cliente reúnem-se para priorizar as funcionalidades. O cliente é essencial neste processo e assim ele fica sabendo o que está acontecendo e o que vai acontecer no projeto. Ao final de cada semana, o cliente recebe novas funcionalidades, completamente testadas e prontas para serem postas em produção. As 12 Práticas de XP 3 - Metáfora (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 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. 2 As 12 Práticas de XP 4 - Projeto Simples (Simple Design): • 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 dos programadores de código simples e código fácil. • Código fácil deve ser identificado e substituído por código simples. As 12 Práticas de XP 7 - Programação em Pares (Pair Programming): • É a programação em par/dupla num único computador. • Geralmente a dupla é formada por um iniciante na liguagem 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 erros (bugs). • Com isto busca-se sempre a evolução da equipe, melhorando a qualidade do código fonte gerado. As 12 Práticas de XP 5 - Testes de Aceitação (Customer Tests): • São testes construídos pelo cliente e conjunto de analistas e testadores, para aceitar um determinado requisito do sistema. 6 - Refatoração (Refactoring): • É um processo que permite a melhoria continua da programação, com o mínimo de introdução de erros e mantendo a compatibilidade com o código já existente. • Refabricar 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; • Rodar os testes sempre!!! As 12 Práticas de XP 8 - Posse Coletiva (Collective Ownership): • O código fonte não tem dono e ninguém precisa solicitar permissão para poder modificar o mesmo. • O objetivo com isto é fazer a equipe conhecer todas as partes do sistema. 9 - Integração Contínua (Continuous Integration): • 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. 3 As 12 Práticas de XP 10 - Ritmo Sustentável (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. As 12 Práticas de XP 12 - Padrões de Codificação (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. As 12 Práticas de XP 11 - Desenvolvimento Orientado a Testes (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. Só que os testes unitários são essenciais para que a qualidade do projeto seja mantida. Valores que guiam o desenvolvimento XP 1 feedback – Troca da informações relacionadas ao que é produzido e consumido durante o projeto, entre o cliente e a equipe de desenvolvimento 2 comunicação – aproximação da equipe de desenvolvimento. Também refere-se ao contato intenso com o cliente. Aqui também cabe a escrita da documentação descritiva. 3 simplicidade – Projetos simples. Implementar apenas aquilo que é suficiente para as necessidades atuais do cliente. Adiar decisões. 4 Valores que guiam o desenvolvimento XP O início de um projeto XP Fase de Exploraç Exploração 4 Coragem – Lidar com o medo na solução de problemas. Tomar medidas de segurança. 5 Respeito – Todas as pessoas são igualmente importantes. Todos são tratados da mesma forma. É um valor social bem visto na maioria nos ambientes de trabalho. Histórias X casos de uso Caso de uso: Autenticaç Autenticação caixa automá automático Ator: Cliente Descriç Após inserir o cartão o sistema solicita a senha. O Descrição: Apó sistema verifica se o cartão é válido e se a senha confere. Se não o usuá usuário tem mais três chances... Várias historinhas O sistema mostra telas de boas vindas O sistema verifica se o cartão é válido Implementar sistema de leitura de senha Verificaç Verificação de senha Releitura de senha se a mesma não confere ... duraç duração: até até 20% do tempo total. termina quando a primeira versão do software é enviada ao cliente. clientes escrevem “historias” historias” (story cards). cards). programadores interagem com clientes e discutem tecnologias. Não só só discutem, experimentam diferentes tecnologias e arquiteturas para o sistema. Planejamento: 1 a 2 dias. Um Dia na Vida de um Programador XP Escolhe uma histó história do cliente. Procura um par livre. Escolhe um computador para programaç programação pareada (pair (pair programming). programming). Seleciona uma tarefa claramente relacionada a uma caracterí característica (feature (feature)) desejada pelo cliente. 5 Um Dia na Vida de um Programador XP Discute modificaç modificações recentes no sistema Discute histó história do cliente Um Dia na Vida de um Programador XP Atos constantes no desenvolvimento: Testes Implementaç Implementação Desenho Integraç Integração Testes Fundamento mais importante de XP. É o que dá dá seguranç segurança e coragem ao grupo. Testes de unidades (Unit tests) tests) escritos pelos programadores para testar cada elemento do sistema (e.g., cada mé método em cada caso). Testes de funcionalidades (Functional tests) tests) escritos pelos clientes para testar a funcionalidade do sistema. Executa testes antigos. Busca oportunidades para simplificaç simplificação. Modifica desenho e implementaç implementação incrementalmente baseado na funcionalidade exigida no momento. Escreve novos testes. Enquanto todos os testes não rodam a 100%, o trabalho não está está terminado. Integra novo có código ao repositó repositório. Testes Testes das unidades do sistema Tem que estar sempre funcionando a 100%. São executados vá várias vezes por dia. Executados à noite automaticamente. Testes das funcionalidades Vão crescendo de 0% a 100%. Quando chegam a 100% acabou o projeto. 6 O Código Padrões de estilo adotados pelo grupo inteiro. O mais claro possí possível. XP não se baseia em documentaç documentações detalhadas e extensas (perde(perde-se sincronia). Comentá Comentários sempre que necessá necessários. Comentá Comentários padronizados. Programaç Programação Pareada ajuda muito! Programação Pareada Erro de um detectado imediatamente pelo outro (grande economia de tempo). Maior diversidade de idé idéias, té técnicas, algoritmos. Enquanto um escreve, o outro pensa em contracontraexemplos, problemas de eficiência, etc. Vergonha de escrever có código feio (gambiarras (gambiarras)) na frente do seu par. Pareamento de acordo com especialidades. • Ex.: Sistema Multimí Multimídia Orientado a Objetos Cliente Responsá Responsável por escrever “histó histórias” rias”. Muitas vezes é um programador ou é representado por um programador do grupo. Trabalha no mesmo espaç espaço fí físico do grupo. Novas versões são enviadas para produç produção todo mês (ou toda semana). Feedback do cliente é essencial. Requisitos mudam (e isso não é mau). Coach (treinador) Em geral, o mais experiente do grupo. Identifica quem é bom no que. Lembra a todos as regras do jogo (XP). Eventualmente faz programaç programação pareada. Não desenha arquitetura, apenas chama a atenç atenção para oportunidades de melhorias. Seu papel diminui à medida em que o time fica mais maduro. 7 Quando XP Não Deve Ser Experimentada? Tracker (Acompanhador) A “consciência” consciência” do time. Coleta estatí estatísticas sobre o andamento do projeto. Alguns exemplos: • • • • Número de histó histórias definidas e implementadas. Número de unit tests. tests. Número de testes funcionais definidos e funcionando. Número de classes, mé métodos, linhas de có código Manté Mantém histó histórico do progresso. Faz estimativas para o futuro. Quando o cliente não aceita as regras do jogo. Quando o cliente quer uma especificaç especificação detalhada do sistema antes de começ começar. Quando os programadores não estão dispostos a seguir (todas) as regras. Se (quase) todos os programadores do time são medí medíocres. Quando XP Não Deve Ser Experimentada? Grupos grandes (>10 programadores). Quando feedback rápido não é possí possível: sistema demora 6h para compilar. testes demoram 12h para rodar. exigência de certificaç certificação que demora meses. Quando o custo de mudanç mudanças é essencialmente exponencial. Quando não é possí possível realizar testes (muito raro). Características Comuns dos Métodos Ágeis Coloca o foco Na entrega freqü freqüente de subsub-versões do software funcionando para o cliente. Nos seres humanos que desenvolvem o software. Retira o foco de Processos rí rígidos e burocratizados. Documentaç Documentações e contratos detalhados. Ferramentas que são usadas pelos seres humanos. 8 Bibliografia Complementar Métodos Ágeis e Programaç Programação eXtrema (Fabio Kon e Alfredo Goldman), USP, 2003. Desenvolvimento ágil com programaç programação extrema eficá eficácia e disciplina extrema no desenvolvimento orientado a objetos de software (Viní (Vinícius A. Castro), UFS, 2006. 9