610 likes | 732 Views
Extreme Programming. Manifesto do Desenvolvimento Ágil. www.agilealliance.org Aplicar os ideais do desenvolvimento ágil ao nosso processo particular poderia nos ajudar a ser mais ágeis, mesmo que não pudéssemos adotar XP. Indivíduos e interações mais que processos e ferramentas.
E N D
Manifesto do Desenvolvimento Ágil www.agilealliance.org Aplicar os ideais do desenvolvimento ágil ao nosso processo particular poderia nos ajudar a ser mais ágeis, mesmo que não pudéssemos adotar XP. Indivíduos e interaçõesmais que processos e ferramentas. Trabalhar no softwaremais que documentação abrangente. Colaboração do clientemais que negociação contratual. Responder às mudançasmais que seguir um plano.
O que é XP? • Processo de desenvolvimento de software • Projetos com requisitos muito voláteis • Equipes pequenas (até ~10 pessoas) • Desenvolvimento incremental
O que é um projeto de sucesso? • Cumpre o orçamento • Cumpre o prazo • Cliente fica feliz • Equipe fica feliz
Premissas do desenvolvimento • Cliente é capaz de especificar um software antes de iniciar o desenvolvimento • Equipe de desenvolvimento é capaz de quantificar o esforço • Equipe é capaz de criar o software imaginado pelo cliente • Cliente ficará feliz
Resumo • Divisão nítida entre “produção” e “consumo” • Cliente produz uma especificação que é consumida pela equipe de desenvolvimento • Equipe de desenvolvimento produz o software que é consumido pelo cliente
Custo Tempo de Projeto $ 1 Requisitos $ 10 Análise $ 100 Design $ 1.000 Implem. $ 10.000 Testes Motivação: custo de uma alteração
Premissas Básicas do Modelo Tradicional • É necessário fazer uma análise de requisitos profunda e detalhada antes de projetar a arquitetura do sistema. • É necessário fazer um estudo minucioso e elaborar uma descrição detalhada da arquitetura antes de começar a implementá-la. • É necessário testar o sistema completamente antes de mandar a versão final para o cliente.
Problemas desta premissa • Premissa é irreal em vários casos • O cliente não é capaz de especificar o software previamente • Grande problema: DETALHE
Premissa do desenvolvimento ágil • APRENDIZADO • FEEDBACK • DESENVOLVIMENTO ITERATIVO
Aprendizado • O cliente aprende durante o desenvolvimento • Descobre novas possibilidades • Muda as prioridades
Trabalho intelectual • Retrabalho é uma característica do trabalho intelectual • ExperimentaçãoCriaçãoRevisãoExperimentação ...
Custo Tempo de Projeto Premissa: custo de uma alteração
E se essa fosse a realidade? • A atitude dos desenvolvedores de software seria completamente diferente: • Tomaríamos as grandes decisões o mais tarde possível. • Implementaríamos agora somente o que precisamos agora. • Não implementaríamos flexibilidade desnecessária (não anteciparíamos necessidades).
E essa é a nova realidade !(pelo menos em muitos casos) • Orientação a Objetos • facilita e cria oportunidades para mudanças • Técnicas de Refatoramento • possibilita melhorar continuamente a implementação aumentando constantemente a qualidade do código produzido • Testes automatizados • nos dão segurança quando fazemos mudanças • Prática / cultura de mudanças • aprendemos técnicas e adquirimos experiência em lidar com código mutante
As 4 Variáveis do Desenvolvimento de Software • Tempo • Custo • Qualidade • Escopo (foco principal de XP)
Valores • Feedback • Comunicação • Simplicidade • Coragem
User Stories • Funcionalidades são informadas através de user stories • Estórias devem ser simples • Desenvolvedores estimam tempo
Planejamento • De posse das estimativas, é possível priorizar • Cliente entrega as estórias priorizadas para serem implementadas • Desenvolvedores respeitam as prioridades dos clientes • Projeto é dividido em partes: releases e iterações
Priorização • Cliente deve priorizar as estórias • Para obter o máximo de valor rapidamente • Se baseia nas suas necessidades e nas estimativas dos desenvolvedores
Release e Iteração Projeto: 8 meses = 32 semanas 8 Sem. R1 R2 R3 R4 2 Sem. I2 I3 I4 I1 1 Sem. S1 S2
8 Sem. R1 R2 R3 R4 Release Planning • Cliente recebe um “orçamento” dos desenvolvedores • Seleciona as estórias prioritárias que possam ser implementadas dentro do orçamento • Pode trocar estórias durante o release
2 Sem. I2 I3 I4 I1 Iteration Planning • Cliente recebe um “orçamento” • Não pode haver troca de funcionalidades durante uma iteração • Velocidade: quantidade de estórias que a equipe consegue implementar em uma iteração
Stand-up meeting • Reunião rápida • Diária • Usada para atualização da equipe
Desenvolvimento: orientação a objetos • Sistema é composto por pequenas peças • Peças têm objetivos específicos • Facilita construção • Facilita evolução
Buscando bugs • Sistemas podem ter defeitos • É difícil descobrir qual é a peça defeituosa • É mais fácil se o problema for detectado logo após a adoção da peça
Test Driven Design • No XP, primeiro se especifica o teste • Depois se constrói a peça
Unit Test • Nome dado à verificação feita sobre cada peça • Cada peça possui um unit test associado a ela • Testes são automatizados • Quando uma nova peça entra no sistema, todos os testes são executados
Acceptance Test • Cliente deve especificar testes de aceitação para cada funcionalidade de uma iteração • Sistema deve passar nestes testes ao término da iteração
Pair Programming • Todo código é escrito em par • Duas pessoas trabalham em um único computador • Uma digita, enquanto a outra revisa, corrige e sugere
Collective code ownership • Todos são responsáveis por todas as partes do sistema • Código tem que estar sempre “limpo” • Todos são capazes de modificá-lo
Refactoring • Uma [pequena] modificação no sistema que não altera o seu comportamento funcional • mas que melhora alguma qualidade não-funcional: • simplicidade • flexibilidade • clareza • desempenho
Exemplos de Refactoring • Mudança do nome de variáveis • Mudanças nas interfaces dos objetos • Pequenas mudanças arquiteturais • Encapsular código repetido em um novo método • Generalização de métodos • raizQuadrada(float x)raiz(float x, int n)
Desenvolvimento em equipe • Como conciliar diversos desenvolvedores? • Estrutura de diretórios • Atualização do código por várias pessoas diferentes
CVS – Repositório de fontes • Check out • Add • Commit • Update • Conflict • Remove
40 hour week • Desenvolvimento de software é um trabalho intelectual intenso • Não é produtivo trabalhar além do limite
Customer onsite • Fator mais importante no XP: • Comunicação • Feedback • Viabiliza a simplicidade da metodologia • War room c / quadro branco
Feedback constante • Permite que pequenas mudanças sejam feitas • Evita a necessidade de mudanças bruscas • Mantém o projeto em curso
Integração contínua • Máquina destacada para a integração • Integração ocorre diversas vezes ao dia • Os testes são executados em cada integração • Correções são feitas imediatamente
Ambientes para deployment • Como lidar com diferentes ambientes? • Exemplo: • Desenvolvimento • Aceitação • Produção
Produção Aceitação Desenvolvimento Ambientes para deployment
Problemas de ter vários ambientes • Possíveis erros devido a tarefas manuais repetitivas • Gasto de tempo
Automatização do deployment • Agiliza as integrações • Evita erros
Exemplo simples <project name="projeto" default="desenvolvimento"> <target name="desenvolvimento"> <mkdir dir="build"/> <javac srcdir="src" destdir="build"/> <junit> <test name="test.SystemTester"/> </junit> </target> </project> tasks target
Ambiente de Desenvolvimento • Desejável que tenha: • Code completion • Validação on-line • Suporte à depuração • Suporte a Refactoring • Integração com jUnit • Integração com CVS • Integração com Ant