Conteúdo Métodos Ágeis de Desenvolvimento de Software Engenharia de Software Profa. Elisa Yumi Nakagawa 2. Semestre 2005 Material inicialmente elaborado por André Figueiredo e mantido por pesquisadores e colaboradores do Labes. Como tentamos resolver esse problema? Porque criar software é uma atividade complexa? Alto índice de incerteza volátil (tecnologia) Objetivo incerto (escopo) Tarefa envolvendo criatividade Dificuldade inerente era, originalmente, uma atividade solitária e “simples” (gerenciável por uma única pessoa) Capacidade individual de trabalho em grupo Existem dois tipos básicos de processos [Schwaber] Processos Definidos Dado um conjunto de entradas, pode-se definir as saídas com razoável precisão Controle feito com base no acompanhamento de um planejamento inicial Processos Empíricos ... Para o monumental (anos 70, 80 e 90) ... Crise do software Aplicação de métodos, técnicas, ferramentas e processos de engenharia para o desenvolvimento de software ... Para o ágil (hoje) Necessidade de entrega rápida e flexibilidade No Silver Bullet Tipos de Processo Totalmente dependente de pessoas Capacidade Do nada (anos 50 e 60) ... Desenvolvimento Ferramenta Porque o desenvolvimento de software é uma atividade altamente complexa? Como resolver esse problema? Porque os processos atuais, algumas vezes, falham? O que são os métodos ágeis? The Manifesto For Agile Software Development Principais métodos Características comuns Domínio de aplicação de métodos ágeis Considera a mudança e a incerteza como inevitável Controle é feito por acompanhamento freqüente e pequenos ajustes métodos atuais usam processos do tipo Definido, que não se aplicam “bem” ao desenvolvimento de todo tipo de software. O que são Métodos Ágeis? Nova safra de métodos baseados em processos Empíricos. Resultam de aproximadamente 10 anos de “pesquisa de campo” de seus principais mentores e líderes. Formalização com a publicação do “Manifesto for agile development”, em fevereiro de 2001 1 Manifesto for agile development Índice de sucesso We are uncovering better ways of developing software by doing it and helping others do it. Through this work, we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan Gráfico complexidade X índice de sucesso (Scrum) Reação flexível diante da mudança aumenta a probabilidade de sucesso. 0,9 That is, while there is value in the items on the right, we value the items on the left more. métodos ágeis métodos tradicionais 0,1 http://www.agilemanifesto.org baixa intermediária alta Complexidade Principais métodos, processos ou abordagens Extreme Programming (XP) Feature Driven Development (FDD) Scrum Crystal Methods Open Source Development Process Adaptive Software Development (ASD) Dynamic System Development Method (DSDM) Agile Modeling (AM) Lean Development (LD) Extreme Programming - XP Princípios e valores Extreme Programming - XP Práticas Jogo do planejamento Releases pequenos e integração contínua Metáforas Design simples Refactorings Test first programming Programação em pares Posse coletiva do código 40 horas por semana Cliente é parte da equipe Padrões de código (Coding Standard) Extreme Programming - XP Principais líderes Comunicação Kent Simplicidade Ward Beck Cunninghan Martin Fowler Ron Jeffries Feedback Coragem Qualidade Contribuições Mais popular e que mais despertou interesse estável para domínios específicos (times pequenos e alocados no cliente) Mais 2 Feature Driven Development FDD Feature Driven Development FDD Conceitos & Práticas Cinco processos básicos Construa um modelo global Crie um lista de características/funcionalidades (features) Planeje por características/funcionalidades Modele por características/funcionalidades Implemente por características/funcionalidades Feature Driven Development FDD Principais líderes Scrum Conceitos & Práticas Peter Jeff Coad DeLuca Contribuições Processo definido e repetível explícito em modelagem (global e por características/funcionalidade) Escalabilidade Foco Scrum Conceitos & Práticas Abordagem usada para gerenciar o processo de desenvolvimento de software em um ambiente volátil Abordagem empírica baseada na flexibilidade, adaptabilidade e produtividade Os desenvolvedores definem as práticas, métodos e técnicas a serem usadas no processo de implementação Envolve freqüentes atividades de gerenciamento que têm por objetivo identificar qualquer deficiência ou impedimento no processo de desenvolvimento ou nas práticas usadas. Scrum Principais líderes Jeff Sutherland Schwaber Mike Beedle Ken Contribuições Reuniões diárias para coordenação e colaboração Auxilia a focar nas principais atividades de gerenciamento 3 Crystal Methods Principais líderes Alistair Crystal Methods Cockburn Crystal sugere que se escolha a cor do método de acordo com o tamanho e criticalidade do projeto Projetos grandes precisam de mais coordenação e métodos mais duros do que projetos pequenos Os métodos da família Crystal podem ser usados com qualquer prática de desenvolvimento, ferramenta, ou produto de trabalho Contribuições Família que inclui diferentes métodos, dos quais se deve selecionar o mais adequado para cada projeto Além dos métodos, a abordagem Crystal inclui princípios para amarrar esse métodos de forma a sintonizá-los para um determinado projeto Cada método tem uma cor indicando a “dureza” do método Características Comuns Orientados a funcionalidades Método evolutivo e iterativo Foco na geração de código Arquitetura/Modelo evolutível Ciclos rápidos Priorização por valor de negócio Testes unitários e revisão de código “Equipes poderosas” Cliente altamente participativo Autonomia para decisão e auto-organização Iniciativas de uso dos métodos ágeis com outros processos A Rapid Development Process with UML – Armano, G.; Marchesi, M.A., ACM SIGAPP Applied Computing Review, New York, v.8, pp4-11, 2000 Making RUP Agile – Hirsch, M., in OOPSLA2002, pp1-8 Applying Agile Methods in Rapidly Changing Environments – Kutschera, P.; Scäfer, S., jeckstein.com/papers/ Agile%20Methods%20%20Steffen%20Schaefer%20&%20Peter%20Kutschera. pdf ….. Contribuições Domínio de aplicação de métodos ágeis De maneira geral, os métodos ágeis são melhor aplicados em projetos com uma ou mais das seguintes características: Alta complexidade Prazos apertados Requisitos voláteis ou pouco conhecidos Objetivos de negócio instáveis Preferencialmente equipes pequenas e médias Bibliografia Livros Ambler, Scott; Agile Modeling: Efective practices for Extreme Programming and the Unified Process; 2002 Beck, Kent; Extreme Programming Explained: Embrace change; 2000; Addison-wesley Beck, Kent and Martin Fowler; Planing XP; 2001; Addison-wesley Coad, Peter and Eric Lefebvre and Jeff DeLuca; Java modeling in color with UML; 1999; Prentice Hall Scwaber, Ken and Mike Beedle; Agile Software Development with scrum; 2002; Prentice Hall 4 Bibliografia Livros Fowler, Martin; Refactoring; Dez/2000; Software Development Fowler, Martin; Refactoring; Dez/2000; Software Development Highsmith, Jim; Agile Software Development Ecosystems; 2002; Addison-Wesley Cockburn, Alistair; Agile Software Development; 2002; Addison-Wesley Cockburn, Alistair; Surviving OO projects; 2000; Addison-Wesley Bibliografia Artigos Raymond, Eric Steven; The cathedral and the bazaar; 1997; Linux Congress Fowler, Martin; Put your process on a Diet; Dez/2000; Software Development Brooks, Frederick; No Silver Bullet; 1986; Computer Schwaber, Ken; The Agile Alliance Revolution; Maio/2001 Bibliografia URL´s www.controlcaos.com www.dsdm.org www.martinfowler.com www.crystalmethodologies.org www.agilemanifesto.org www.xprogramming.com www.xispe.com.br/index.html www.agilemodeling.com 5