Princípios do Manifesto Ágil
- Indivíduos e interações – mais importantes que processos e ferramentas.
- Software funcionando – mais importante do que documentação completa e detalhada.
- Colaboração com o cliente – mais importante do que negociação de contratos.
- Adaptação a mudanças – mais importante do que seguir o plano inicial.
Evento ocorrido em 2001
WebSite: http://www.agilemanifesto.org
Extreme Protramming (XP)
Extreme Programming (XP) é uma metodologia de desenvolvimento de software, nascida nos Estados Unidos ao final da década de 90. Vem fazendo sucesso em diversos países, por ajudar a criar sistemas de melhor qualidade, que são produzidos em menos tempo e de forma mais econômica que o habitual. Tais objetivos são alcançados através de um pequeno conjunto de valores, princípios e práticas, que diferem substancialmente da forma tradicional de se desenvolver software.
Valores
- Comunicação – Reuniões presencias.
- Coragem – Não limitar as mudanças e confiar nos mecanismos, como desenvolvimento orientado a testes, programação em par e integração contínua.
- Feedback – Trabalhar mais perto do cliente, detecção e correção precoce de falhas.
- Respeito – Sinergia entre a equipe, saber respeitar as opiniões.
- Simplicidade – Primeiramente fazer apenas o necessário.
Princípios
- Auto-semelhança – Reaproveitamento de soluções, códigos e métodos, mesmo em escalas menores.
- Benefício Mútuo – Benefícios como programação em par, e minimo de erros no funcionamento do programa beneficiam a todos.
- Diversidade – Opiniões de profissionais de diferentes áreas contribuem para uma solução rica.
- Economia – Implementar primeiro funcionalidades que puderem gerar maior retorno financeiro.
- Falha – Testar ambas as falhas de idéias conflitantes para resolver o mesmo problema, botar em prática.
- Fluidez – Estabelecer um fluxo contínuo estabelecendo etapas bem definidas, repetindo cada uma gradualmente.
- Humanismo – Respeitar a natureza dos desenvolvedores, explorar melhor de maneiras diferentes.
- Melhoria – Melhoria contínua, enquanto mais aprendemos mais mais somos capazes de melhorar.
- Oportunidade – Enxergar problemas como oportunidades de aprendizado e mudanças proveitosas.
- Passos de Bebê – Desenvolver o sistema em pequenas partes.
- Qualidade – Aumentar a qualidade resulta em entregas mais rápidas.
- Redundância – Fazer testes redundantes somente quando os mesmos forem úteis.
- Reflexão – Pausas informais em conjunto provem reflexões das ações.
- Responsabilidade Aceita – Responsabilidade não pode ser atribuída, ela só pode ser aceita.
Papéis
- Analistas de Teste – Ajudam clientes e desenvolvedores a escrever testes para as histórias, antes mesmo que elas sejam implementadas.
- Arquitetos – Ajudam os desenvolvedores no dia-a-dia através da programação em par, refatoração e a arquitetura do ambiente.
- Designers de Interação – Trabalham próximo aos clientes, os ajudam a escrever histórias e escolher metáforas consistentes para o projeto.
- Executivos – Ajudam na definição do escopo do projeto, asseguram que as histórias estejam alinhadas.
- Gerentes de Projeto – Agem como facilitadores no fluxo de comunicação do projeto, motivam a equipe e removem obstáculos.
- Gerentes de Produto – Procuram definir histórias que ajudem o produto a tomar um corpo coerente e harmônico, reduzir o escopo quando a equipe está atrasada.
- Programadores – Trabalham em pares implementando histórias, são responsáveis por criar testes automatizados e da refatoração.
- Recursos Humanos – Selecionam indivíduos que saibam interagir socialmente com naturalidade.
- Redatores Técnicos – Asseguram que a documentação evolua de forma iterativa.
- Usuários – Ajudam a escrever e selecionar histórias e tomam decisões relativas ao domínio do negócio durante o desenvolvimento.
Práticas Primárias
- Ambiente Informativo – O ambiente deve conter todos os elementos que ajutem a equipe a relembrar suas tarefas, como quadro branco, flip chart, gráficos, etc.
- Build de Dez Minutos – Usar testes automatizados.
- Ciclo Semanal – Reunião semanal que recebe o nome de Jogo do Planejamento, aonde clientes e desenvolvedores decidem as funcionalidades e prioridades.
- Ciclo Trimestral – A cada trimestre a equipe se reúne com o cliente para definir as próximas etapas e refletir sobre as passadas.
- Desenvolvimento Orientado a Testes – Antecipa a identificação e correção de falhas durante o desenvolvimento.
- Design Incremental – Criar soluções simples e por demanda, de acordo com as nescessidades do cliente.
- Equipe Integral – Cliente com maior disponibilidades, conversas presenciais melhoram o feedback.
- Folga – Ajuda a equipe a acomodar imprevistos, aumentando a motivação para cumprir promessas.
- Histórias – São contadas pelos clientes aos desenvolvedores, servem de resumo e delegam prioridades.
- Integração Contínua – Isar um repositório para o projeto mantendo a base de código consistente.
- Programação em Par – Dois programadores por micro, diminuem os erros, aumenta o rendimento e códigos mais elaborados.
- Sentar-se Junto – Mesmo ambiente para todos os desenvolvedores mantendo um contato presencial.
- Trabalho Energizado – Trabalhar de forma inteligente, respeitando o desgaste do desenvolvedor.
Práticas Corolárias
- Análise da Raiz do Problema – Forçar o teste nos defeitos e não apenas os casos de sucesso.
- Base de Código Unificada – Reduzir ramificações de versões, colocando as diferenças como configurações.
- Código Coletivo – Com a rotatividade dos programadores ocorre um refatoramento com mais qualidade.
- Código e Testes – Quanto melhor o design incremental menos decisões precisam ser tomadas com antecedência.
- Continuidade da Equipe – Manter equipes inegradas melhorando os valores dos relacionamentos.
- Contrato de Escopo Negociável – Contratos de curta duração, podendo ser renovados ou cancelados em qualquer etapa.
- Envolvimento do Cliente Real – Trazer usuários para testar o sistema em desenvolvimento.
- Equipes que Encolhem – Trabalhar para que a equipe diminua, sempre deixar um elemento com menos trabalho.
- Implantação Diária – Atualizar o sistema com mais frequencia, remover barreiras que impeçam estas atualizações.
- Implantação Incremental – Fazer mudanças gradualmente e manter ao mesmo tempo o sistema antigo e o novo.
- Pagar Por Uso – Cobrar do cliente por releases menores e mais frequentes, com o maximo de funcionalidades.
Outras Práticas
- Reunião em Pé – Reuniões diarias em pé, aonde todos os desenvolvedores contam o que fizeram e irão fazer.
- Refatoração – Alterações constantes, limpeza , clareza e aprimoramento do código.
- Metáfora – São elementos do cotidiano que são inseridos nos sistemas.
Referências
Resumo do site www.improveit.com.br/xp/
Projeto C3 (Chrysler) – Kent Beck, Ward Cunningham and Ron Jeffries (1996) www.xprogramming.org
