Baixe o app para aproveitar ainda mais
Prévia do material em texto
* * * Tema da Aula Processos de Software Modelo Ágil * * * Conceitos Processos de Software Processos de Software: Modelos de Ciclo de Vida do Produto de Software Clássico (cascata ou linear) Outros Modelos: Incremental Evolutivo Prototipação Espiral RAD Outros Processo Unificado (RUP - Unified Process) Modelo Ágil Métodos Formais E outros Engenharia de Software Desenvolvimento ágil Em fevereiro de 2001, um grupo de 17 desenvolvedores experientes, consultores e empresários da área de software reuniram-se em Utah (USA) para discutir idéias e procurar alternativas às abordagens tradicionais para processo de desenvolvimento e de gestão de projetos em software. Dessa reunião surgiu o “Manifesto Ágil de Software” que destaca as principais diferenças entre as abordagens tradicionais e os métodos ágeis. Engenharia de Software Manifesto Ágil Manifesto para o Desenvolvimento Ágil de Software “Nós estamos descobrindo melhores maneiras de desenvolver software, fazendo dessa forma e ajudando os outros a fazerem. Por meio desse trabalho nós chegamos aos seguintes valores: Indivíduos e Iterações acima de Processos e Ferramentas Trabalhar o Software acima de Documentação Abrangente Colaboração do Cliente acima de Negociação de Contrato Responder às Modificações acima de Seguir um Plano Ou seja: enquanto os valores estão nos itens à direita, nós valorizamos os itens à esquerda”. Kent Beck et al. fev/2001 http://agilemanifesto.org/ Engenharia de Software Processo Clássico x Processo Ágil Engenharia de Software Desenvolvimento Ágil “Agilidade tornou-se atualmente uma palavra mágica quando se descreve um processo moderno de software. Tudo é ágil. Uma equipe ágil é uma equipe esperta, capaz de responder adequadamente as modificações. Modificação é aquilo para o qual o desenvolvimento de software está principalmente focado. Modificações no software que está sendo construído, modificações nos componentes da equipe, modificações por causa de novas tecnologias, modificações de todas as espécies que podem ter impacto no produto que eles constroem ou no projeto que cria o produto. (segue) Engenharia de Software . . . “O apoio para modificações deveria ser incorporado em tudo que fazemos em software, algo que se adota porque está no coração e na alma do software. Uma equipe ágil reconhece que o software é desenvolvido por indivíduos trabalhando em equipes e que as especialidades dessas pessoas e sua capacidade de colaborar estão no âmago do sucesso do projeto”. Desenvolvimento Ágil Engenharia de Software “A história da engenharia de software está congestionada com dúzias de descrições e metodologias obsoletas de processo, métodos de modelagem e notações, ferramentas e tecnologias. Cada uma delas ganhou notoriedade e depois foi eclipsada por algo mais novo e (pretensamente) melhor. Com a introdução de uma ampla gama de modelos ágeis de processo – cada qual lutando por aceitação na comunidade de desenvolvimento de software – o movimento ágil está seguindo o mesmo caminho histórico”. Pressman Desenvolvimento Ágil Engenharia de Software Desenvolvimento Ágil “A agilidade é dinâmica, específica em conteúdo, agressiva no acolhimento de modificações e orientada ao crescimento” Steve Goldman et al., apud Pressman A agilidade é mais que resposta efetiva à modificação.... Engloba também a filosofia contida no manifesto ágil. Encoraja estruturas e atitudes de equipe que tornam a comunicação mais fácil. Enfatiza a rápida entrega de software operacional ao cliente Dá menos importância aos produtos de trabalho (artefatos) intermediários do processo (que nem sempre é uma boa coisa) Adota o cliente como parte da equipe e trabalha para eliminar as velhas atitudes “nós x eles” Reconhece que planejamento em um mundo incerto tem seus limites e que o plano de um projeto deve ser flexível. Engenharia de Software Doze princípios da Aliança Ágil Nossa maior prioridade é satisfazer ao cliente desde o início, por meio de entrega contínua de software valioso. Modificações de requisitos são bem vindas, mesmo que tardias no desenvolvimento. Os processos ágeis aproveitam as modificações como vantagens para a competitividade do cliente. Entrega de software funcionando, a cada duas semanas até dois meses, de preferência no menor espaço de tempo. O pessoal de negócios e os desenvolvedores devem trabalhar juntos diariamente durante todo o projeto. Engenharia de Software Construção de projetos em torno de indivíduos motivados. Forneça-lhes o ambiente e apoio que precisam e confie que eles farão o trabalho. O método mais eficiente e efetivo de levar informação para e dentro de uma equipe de desenvolvimento é a conversa face a face. Software funcionando é a principal medida de progresso. Processos ágeis promovem desenvolvimento sustentável. Os patrocinadores, desenvolvedores e usuários devem ser capazes de manter um ritmo constante, indefinidamente. Doze princípios da Aliança Ágil Engenharia de Software Atenção contínua à excelência técnica e ao bom projeto facilitam a agilidade. Simplicidade – a arte de maximizar a quantidade de trabalho não efetuado - é essencial. As melhores arquiteturas, requisitos e projetos surgem de equipes auto-organizadas. Em intervalos regulares, a equipe reflete sobre como se tornar mais efetiva, então sincroniza e ajusta adequadamente seu comportamento. Doze princípios da Aliança Ágil Engenharia de Software Desenvolvimento Ágil Características da “Agilidade”: Rápida resposta às solicitações de mudanças Efetiva comunicação entre desenvolvedores e stakeholders Desenvolvimento conjunto (cliente junto da equipe) Entrega do produto de forma incremental Engenharia de Software Desenvolvimento Ágil “Processo Ágil”: Dirigido por descrições do cliente (história, cenário, metáforas etc. Planos de curta duração Desenvolvimento iterativo com grande ênfase nas atividades de construção Liberar incrementos ao fim de cada iteração Adaptar-se à medida em que as mudanças ocorrem Engenharia de Software Desenvolvimento Ágil Tamanho versus tempo de uma iteração Cascata: uma iteração (b) Espiral: iterações médias (c) XP: iterações curtas (a) Cascata (b) Espiral (c) XP Engenharia de Software O que é um “Processo Ágil”? Define-se em três as suposições-chave que caracterizam a maioria dos processos ágeis: É difícil prever, antecipadamente, quais requisitos persistirão e quais mudarão. É igualmente difícil prever como as prioridades do cliente mudarão á medida em que o projeto prossegue. Para muitos tipos de software, o projeto e a construção devem ser executadas juntas de modo que os modelos de projeto sejam comprovados á medida que são criados. É difícil prever quanto de projeto é necessário antes que a construção seja usada para comprovar o projeto. Engenharia de Software O que é um “Processo Ágil”? Análise, projeto, construção e testes não são tão previsíveis (do ponto de vista do planejamento) como gostaríamos. Como criar um processo que possa gerenciar a imprevisibilidade? - Adaptabilidade do processo. Um processo ágil deve ser adaptável. AGIL = rapidamente adaptável Engenharia de Software Modelos Ágeis de Processos Família CRYSTAL (Alistair Cockburn): abordagens diferentes são necessárias para equipes de tamanho. diferentes. Permanece em comum as entregas frequentes, reflexão e comunicação e habitabilidade (o mínimo de processo necessário para que a equipe consiga ter sucesso). FDD-Feature Driven Development (Peter Coad e Jeff de Luca): duas fases compostas por cinco processos bem definidos e integrados. Fase 1- Concepção e Planejamento: a) desenvolver um modelo abrangente; b) construir uma lista de funcionalidades; e c)Planejar por funcionalidade. Engenharia de Software O debate sobre Desenvolvimento Ágil Jim Highsmtih descreve (jocosamente) os extremos ao caracterizar os sentimentos “pró-agilidade” e os “pró-engenharia de software tradicional”. Frase que exprime o sentimento dos Agilistas: “Os metodologistas tradicionais são um punhado de bitolados que preferem produzir documentação perfeita a um sistema funcionando que satisfaça às necessidades do negócio”. Frase que exprime o sentimento dos tradicionalistas: “Os metodologistas levianos, que dizer ‘ageis’, são um punhado de gloriosos hachers que terão uma grande surpresa quando tiverem que ampliar seus brinquedos para chegar a um software que abranja toda a empresa” Engenharia de Software O debate sobre Desenvolvimento Ágil Esse debate está arriscado á polarização, ou seja, virar um embate “quase religioso”, tais como muito que já vimos.... (Mac vs. PC, Windows vs. Linux, etc..) Se a polarização se estabelecer, este embate levará uma guerra “quase religiosa”, na qual o pensamento racional será deixado de lado em detrimento a uma posição, e “crenças” começarão a aparecer. A Tomada de decisão orientada por crenças ao invés de fatos, que certamente será desastroso. Fato: Ninguém é contra a agilidade. A verdadeira questão é: Qual é o melhor modo de alcançá-la? Engenharia de Software O debate sobre Desenvolvimento Ágil Não existem respostas absolutas para as questões aí colocadas. Na “escola ágil” há muitos modelos de processo propostos (XP, Scrum, etc..), cada qual como abordagens sutilmente diferentes para agilidade. Em cada modelo há um conjunto de idéias que procuram se afstar da engenharia de software tradicional. Porém, muitos destes conceitos ágeis nada mais são do que adaptações de bons conceitos de engenharia de software. Conclusão: Há muito a se ganhar com o melhor de cada escola e quase tudo a se perder se houver polarização que vise a manchar a imagem das abordagens. Engenharia de Software Fatores Humanos p/ Desenvolvimento Ágil “Desenvolvimento ágil enfoca os talentos e habilidades dos indivíduos moldando os processos a pessoas e equipes específicas” Esta afirmação ressalta que o processo deve se moldar às necessidades das pessoas e da equipe, e não o contrário. “o que é considerado meramente suficiente por uma equipe é suficiente ou insuficiente demais para outra equipe” Alistari Cokburn, apud. Presmann, pág 62 Se os membros de uma equipe tiverem que estabelecer as características do processo que será aplicado, como preconiza o desenvolvimento ágil, uma série de características são mandatórias para as pessoas da equipe e para a equipe em si. Engenharia de Software Fatores Humanos p/ Desenvolvimento Ágil Características mandatórias para pessoas e para a equipe em si, nos métodos ágeis. Competência: Inclui talento inato, habilidades específicas relacionadas a software e conhecimento global do processo que a equipe decidiu aplicar Foco Comum: Mesmo que membros de uma mesma equipe realizem tarefas diferentes e tragam diferentes habilidades e competências ao projeto, todos devem estar focados no mesmo objetivo, ou seja, entregar um incremento do software no prazo e custo prometidos ao cliente. Engenharia de Software Fatores Humanos p/ Desenvolvimento Ágil Colaboração: Para realizar as tarefas da engenharia de software, seja qual for o processo, uma equipe deve manter espírito de colaboração em alta, quer seja entre si ou com os clientes, gerentes e usuários. Capacidade de Tomada de Decisão: Uma equipe deve ter controle sobre seus destinos, ou seja, independência para tomar suas decisões técnicas Habilidade para resolver problemas abstratos: Ter capacidade e lidar continuamente com mudanças e ambigüidades, aceitando que problemas solucionados hoje serão diferentes dos de amanhã e que as lições aprendidas sempre são úteis para a solução de quaisquer outros problemas que venha a ser enfrentado. Engenharia de Software Fatores Humanos p/ Desenvolvimento Ágil Respeito e Confiança mútua: Uma equipe ágil deve ser tornar coesa, ou seja, consolidada a ponto de o todo sempre ser maior que a soma das partes (sinergia) Auto-organização: No contexto ágil, implica que a equipe deve preocupar-se com três coisas: Organizar-se para o trabalho a ser feito Organizar o processo para melhor se adaptar ao ambiente local do desenvolvimento Organizar o trabalho com vistas a garantir a melhor entrega de incremento de software “A equipe seleciona quanto trabalho acredita que pode realizar dentro de uma iteração e se compromete com isso. Nada desmotiva tanto uma equipe como uma pessoa de fora assumir compromisso por ela. Nada motiva tanto como a aceitação da responsabilidade com compromissos que a ela própria estabeleceu”. Ken Scwaber, apud Presmman, pag 62 Engenharia de Software Modelos Ágeis de Processos FDD-Feature Driven Development Fase 2- Construção iterativa: d) detalhar por funcionalidade; e e) construir por funcionalidade. ASD-Adaptative Software Development (Jim Highsmith): baseado na natureza adaptativa e as incertezas no desenvolvimento de software (sistemas adaptativos complexos) propõe três fases não lineares e provavelmente sobrepostas: a) especulação (planejamento empírico); b) colaboração; e c) aprendizado. Por meio de iterações curtas a equipe desenvolve o conhecimento cometendo pequenas falhas causadas por premissas falsas, que são corrigidas paulatinamente (aprendizado). Engenharia de Software Modelos Ágeis de Processos DSDM-Dynamic System Development Method: (UK-1994) baseado nas idéias do RAD, desenvolvimento iterativo e incremental. Estudo de viabilidade (DSDM é apropriado?) Estudo de negócios (entender necessidades de negócios, definir requisitos e uma arquitetura). Desenvolver protótipos funcionais e documentação de análise inicial Iteração de design Construção do sistema Implementação para entrega e implantação do produto Engenharia de Software Modelos Ágeis de Processos XP-Extreme Programing: (Kent Beck e Ward Cunningham-1999). Desenvolvimento de software baseado em comunicação constante, feedback, simplicidade, coragem e respeito, práticas comprovadas e técnicas para implementar os valores em práticas. Engenharia de Software Modelos Ágeis de Processos SCRUM: (Jeff Sutherland e equipe – década de 90). Pequenas equipes para maximizar a comunicação e compartilhamento de conhecimento e minimizar a supervisão. Processo adaptável tanto a mudanças técnicas quanto de negócios (garantir o melhor produto). O processo produz frequentes incrementos no produto. Testes e documentação são realizados à medida que o produto é construído. Engenharia de Software “Coisas simples devem continuar simples. Coisas complexas devem ser possíveis”. Allan Kay apud Pressman, 2006 p.103 “A agilidade é dinâmica, específica em conteúdo, agressiva no acolhimento de modificações e orientada ao crescimento” Steve Goldman et al., apud Pressman, 2006 p.60 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Compartilhar