Prévia do material em texto
ENGENHARIA DE SOFTWARE DESENVOLVIMENTO ÁGIL · O desenvolvimento e a entrega rápida do software são frequentemente os requisitos mais críticos para os sistemas de software · CARACTERÍSTICAS GERAIS · Os processos de especificação, projeto e implementação são intercalados >> DESENVOLVIMENTO INCREMENTAL · Um sistema é desenvolvido em uma série de versões com os stakeholders envolvidos na avaliação da versão e feedback · Muitas vezes, as interfaces de usuário são desenvolvidas usando um sistema de desenvolvimento interativo e permitindo o desenvolvimento GUI rápido, através de um IDE · MÉTODOS ÁGEIS · Surgiu devido à insatisfação com os overheads envolvidos nos métodos de desenvolvimento tradicionais · OBJETIVOS · Foco sobre o software em si, ao invés do projeto e documentação · Baseia-se em uma abordagem iterativa para o desenvolvimento de software · Procura entregar rapidamente um software de trabalho e que possa evoluir para atender a novos requisitos, em iterações posteriores · Redução da burocracia, evitando trabalho desnecessário e sobrecarga · Procura reduzir os overheads no processo de software e ser capaz de responder rapidamente às mudanças nos requisitos sem trabalho excessivo · DESENVOLVIMENTO ORIENTADO A PLANO x DESENVOLVIMENTO ÁGIL · Especificação, projeto, implementação e testes são intercalados e as saídas do desenvolvimento são decididas através de uma negociação durante o processo de desenvolvimento de software · Recomendado para casos em que o software deve ser entregue rapidamente para os clientes e se obtêm feedbacks a partir deles · Mais eficazes quando o sistema pode ser desenvolvido com uma equipe pequena cujos membros podem se comunicar informalmente · Plan-driven · Baseado em estágios de desenvolvimento separados, com os produtos a serem produzidos em cada uma dessas etapas, planejados com antecedência · Não precisa ser, necessariamente, o modelo em cascata · É possível aplicar o desenvolvimento incremental >> A ITERAÇÃO OCORRE DENTRO DAS ATIVIDADES · Recomendado para casos em que é necessário ter uma especificação e um projeto detalhado antes de iniciar a implementação · EXTREME PROGRAMMING (XP) · Método ágil mais conhecido e utilizado · Novas versões podem ser construídas várias vezes por dia · Os incrementos são entregues aos clientes a cada 2 semanas · Todos os testes devem ser executados para cada código novo, que só será aceito se os testes forem executados com sucesso · CENÁRIO – CARTÃO DE HISTÓRIAS · Expressa os requisitos do usuário · A equipe de desenvolvimento é responsável por descrevê-lo em tarefas (>> CONSTITUEM AS BASES DAS ESTIMATIVAS DE PRAZO E CUSTO) para implementação · O cliente escolhe as histórias para inclusão na próxima versão com base em suas prioridades e as estimativas do cronograma · Considera inútil gastar tempo e esforço na antecipação de mudanças futuras, propondo a melhoria constante do código (>> REFACTORING) · REFATORAÇÃO · A equipe verifica as possíveis melhorias no software e as realiza, mesmo que não haja uma necessidade imediata para isso · Melhora a capacidade de compreensão do software e assim reduz a necessidade de documentação · Mudanças são mais fáceis de serem realizadas porque o código é mais bem estruturado e claro · ATENÇÃO!! Mudanças que requerem refatoração da arquitetura são mais onerosas · EXEMPLOS · Reorganizar hierarquias de classe para remover código duplicado · Organizar e renomear atributos e métodos para torná-los mais fáceis de entender · Substituir linhas de código com chamadas para métodos que foram incluídos em uma biblioteca de programas · TESTES · DESENVOLVIMENTO TEST-FIRST · Primeiro o teste · Desenvolvimento incremental de teste a partir de cenários · Envolvimento do usuário no desenvolvimento e validação de testes · Ferramentas de teste automatizadas para testes de componentes · Escrever testes antes do código facilita o entendimento dos requisitos a serem implementados · Os testes são escritos como componentes executáveis, de modo que possam ser executados automaticamente · O teste deve ser independente, deve simular o envio da entrada a ser testada e verificar se o resultado atende à especificação de saída · Todos os testes são executados automaticamente quando uma nova funcionalidade é adicionada · PROGRAMAÇÃO EM PARES · Ajuda no desenvolvimento da propriedade coletiva de código e difunde conhecimento por toda a equipe · Serve como um processo de revisão informal à medida que cada linha de código é vista por mais de 1 pessoa · Incentiva a refatoração, uma vez que toda a equipe irá se beneficiar com essa prática · GERENCIAMENTO DE PROJETO ÁGIL · A principal responsabilidade do gerenciamento de projetos de software é garantir que o software seja entregue no prazo e dentro do orçamento previsto · PLAN-DRIVEN · Abordagem padrão · Os gerentes determinam o que deve ser entregue, quando deve ser entregue e quem irá trabalhar nos produtos a serem entregues · Requer uma abordagem que se adapte ao desenvolvimento incremental e aos pontos fortes dos métodos ágeis · SCRUM · Foca no gerenciamento do desenvolvimento iterativo · FASES · PLANEJAMENTO: Estabelece os objetivos gerais para o projeto e a arquitetura do software · SPRINT / DESENVOLVIMENTO · Série de “ciclos de sprint”, onde cada ciclo produz um incremento do sistema · Possui duração fixa de 2 a 4 semanas · Corresponde ao desenvolvimento de um novo sistema de liberação · BACKLOG DO PRODUTO · Ponto de partida de cada sprint · Lista de trabalho a ser feita no projeto · A equipe do projeto trabalha com o cliente para selecionar as características (estáveis) e funcionalidades para serem desenvolvidas durante o sprint · No final do sprint, o trabalho de desenvolvimento é revisto e apresentado às partes interessadas · SCRUM MASTER · Líder de equipe · Canaliza todas as comunicações equipe – cliente · Facilitador, que organiza as reuniões diárias, acompanha o backlog, registra as decisões, mede o progresso e faz a comunicação com os clientes e gerentes · ENCERRAMENTO · Preparação para a entrega do produto · ATIVIDADES · Teste · Documentação do usuário · Treinamento · Avaliação das lições aprendidas com o projeto · VANTAGENS · O produto é dividido em um conjunto de partes gerenciáveis e compreensíveis · Em teoria, requisitos instáveis não dificultam o progresso · Toda a equipe tem visibilidade de tudo, o que melhora a comunicação · Os clientes veem regularmente a entrega de incrementos no prazo e aprendem sobre o funcionamento do produto · Estabelece uma confiança entre clientes e desenvolvedores e cria uma cultura positiva onde todos contribuem para o êxito do projeto image7.png image8.png image9.png image10.png image11.png image12.png image2.png image3.png image4.png image5.png image6.png