Entendendo a Manutenção Qual a origem maior do trabalho de manutenção? Quais são as maiores dificuldades na realização da manutenção? O que torna um software acessível ou difícil de manter? Manutenção de Software Definições de Manutenção “Qualquer trabalho no software feito depois que ele se torna operacional ou passa para a produção” - Parikh Correção de Erros; Revisão dos Requisitos Originais; Aumento de função e performance. Manutenção de Software Definições de Manutenção Modificação de um software com objetivo de corrigir falhas, aperfeiçoar ou adaptar o software; Mecanismo de combate à deterioração do software que pode tornar o software desestruturado, precário e resistente à alterações; Modificação de um programa existente para refletir novas obrigações ou características adicionais; Adaptação do software para constante modificação às necessidades de trabalho; Ação de fazer com que o software que foi liberado seja mantido em funcionamento de uma maneira satisfatória. Manutenção de Software Sinônimos de Manutenção Modificação; Acréscimos; Refinamentos; Remoção de defeitos; Adições no sistema; Remendos e correções; Suporte; Evoluções; Manutenção de Software Ajustes; Extensão; Expansão; Revisão; Atualização; Re-programação; Re-desenvolvimento; Melhorias; Alterações. Tipos de Manutenção (Causa) Corretiva: Deficiência; Adaptativa: Mudança de Ambiente; Aperfeiçoadora: Requisição de manutenção do usuário. Manutenção de Software Manutenção Preventiva Prevenir futuras manutenções (3 tipos) Melhorar a capacidade de manutenção manutenibilidade Manutenção de Software Estudos sobre Manutenção Lieth e Swanson: Dinardo: 1980 1988 487 Empresas 25 empresas c/ Mainframe IBM Corretiva: 20% Adaptativa: 25% Aperfeiçoadora: 55% Manutenção de Software Corretiva: 17% Adaptativa: 70% Aperfeiçoadora: 13% Fatores que afetam o trabalho de manutenção Tamanho do Sistema; Idade do Sistema; Experiência e Conhecimento dos Mantenedores. Manutenção de Software Atividades Típicas do Mantenedor Estudar especificações e projetos do sistema; Interagir com os usuários; Examinar programas e sua documentação; Descobrir erros e deficiências nos programas fontes; Projetar uma alteração em programa; Modificar um programa; Revalidar um programa; Atualizar a documentação do programa. Manutenção de Software Funções Básicas na Alteração de Software a) Entender o software e a mudança a ser feita (50%); b) Modificar o software para incorporar a mudança (25%); c) Revalidar o software (25%). Manutenção de Software Custos do Software Desenvolvimento ................ 30 - 40 % Manutenção ........................ 70 - 60 % Manutenção de Software Alternativas para Reduzir a Manutenção de Software Não fazer nada. Apenas continuar como está; Adicionar mais pessoal para o desenvolvimento e manutenção para reduzir BackLog; Planejar a manutenção de software focalizando novas tecnologias para construir sistemas mais fáceis de se manter e gradativamente substituir os atuais; Adotar um plano agressivo para reescrever sistemas atuais o quanto possível; Adotar ferramentas automatizadas para melhorar a manutenção e tecnologia dos sistemas atuais. Manutenção de Software Modelo de Manutenção CONTROLE DAS REQUISIÇÕES CONTROLE DAS MUDANÇAS CONTROLE DE VERSÕES Manutenção de Software Controle das Requisições Coletar informações sobre cada requisição; Definir mecanismos para categorização das requisições; Utilizar análise de impacto para avaliar requisições em termos de custos X benefícios; Determinar grau de prioridade para cada requisição. Manutenção de Software Controle das Mudanças Selecionar uma atividade de mudança necessária da lista de prioridades; Reproduzir o problema; Analisar a especificação e o código-fonte; Projetar as mudanças e testes; Realizar atividades de garantia de qualidade (revisões e inspeções). Manutenção de Software Controle de Versões Determinação da Versão; Construção de uma nova versão (gerência de configuração) Testes completos; Distribuição do programa; Teste de Aceitação. Manutenção de Software Indicadores de Manutenção Tempo utilizado para resolver uma mudança; Programas mais afetados; Requisições atendidas e em aberto; Usuários mais atendidos; Estimativa de tempo e complexidade da manutenção (FPA). Manutenção de Software Exercício 1 Quais as principais dificuldades na realização das atividades de manutenção de software? Apresente um conjunto de ações para amenizar estas dificuldades. Que outros indicadores poderiam ser utilizados para monitorar a manutenção? Manutenção de Software Premissas da Reengenharia Sistemas existentes são uma vantagem valiosa da qual a corporação depende e portanto deveriam ser apropriadamente gerenciados; A manutenção de software poderá ser mais efetiva e eficientemente realizada com ajuda de ferramentas poderosas; É uma manutenção automatizada; Fundamentos da Reengenharia Premissas da Reengenharia Envolve a melhoria dos processos de manutenção de software e melhoria dos sistemas atuais pela aplicação de novas tecnologias e ferramentas para a manutenção de software; Sugere um estratégia de manutenção a longo prazo ao invés de simplesmente procurar por uma imediata mudança na manutenção de Software; Oferece uma maneira de organizar o software e mantê-lo organizado. Fundamentos da Reengenharia Conceito “Reengenharia é o processo de examinar software existente e/ou modificá-lo com ajuda de ferramentas automatizadas para: Melhorar sua futura manutenção; Atualizar sua tecnologia; Estender sua expectativa de vida; Aumentar a produtividade da manutenção. Fundamentos da Reengenharia Outros Conceitos “É o estudo e alteração de um determinado sistema para reconstruí-lo numa nova forma e subseqüente implementação dessa nova forma”; “Modificação em código e estrutura de dados existentes usando os princípios de engenharia de software atuais para aumentar a capacidade de manutenção e capacidade de adaptação do sistema”. “Combinação de técnicas e ferramentas que facilitam a análise, melhoria, redesenho e reutilização de sistemas existentes para suportar as necessidades de informação”; Fundamentos da Reengenharia Outros Conceitos “Meio para melhorar sistemas existentes sem causar impactos na sua funcionalidade atual, plataforma ou arquitetura técnica”; “Conjunto de técnicas e ferramentas orientadas à avaliação, reposicionamento e transformação de sistemas existentes, com o objetivo de estender-lhes a vida útil e ao mesmo tempo, proporcionar-lhes uma melhor qualidade técnica e funcionalidade” (Furlan); Fundamentos da Reengenharia Objetivos da Reengenharia Criar um inventário dos sistemas existentes; Fornecer assistência automatizada para a manutenção; Reduzir custos e erros de manutenção; Tornar o sistema mais fácil de compreender, modificar e testar. Fundamentos da Reengenharia Objetivos da Reengenharia Facilitar a conversão e migração do sistema; Reforçar a aderência a padrões; Melhorar a resposta às solicitações de manutenção; Melhorar o ânimo do pessoal de manutenção; Proteger e estender a vida do sistema; Utilizar CASE para suportar sistemas atuais; Reutilizar componentes de sistemas existentes. Fundamentos da Reengenharia Razões para Reengenharia Freqüentes falhas de produção; Problemas de desempenho; Tecnologia obsoleta; Problemas de integração de sistemas; Qualidade técnica ruim; Dificuldades para testar e caro para manter; Problemas crescentes no sistema. Fundamentos da Reengenharia Razões para se refazer o sistema (Engenharia) Não confiável; Algoritmos ruins ou incorretos; Não atende as necessidades dos usuários. Fundamentos da Reengenharia Sistemas Candidatos à Reengenharia São de importância crítica da empresa; São alvo de manutenção freqüente e requerem um grande percentual de recursos de manutenção; São compreensíveis e podem seguramente ser modificados por poucos membros da equipe de software; Contém erros que ninguém pode encontrar; Requerem uma melhoria considerável. Fundamentos da Reengenharia Exercício 2 Que sistemas poderiam ser alvo de reengenharia? Justifique. Quais as principais razões para Reengenharia ou Engenharia? Manutenção de Software Áreas de Atuação da Reengenharia Análise; Reestruturação; Engenharia Reversa; Migração; Reutilização. Fundamentos da Reengenharia Análise É o processo de examinar os sistemas atuais a fim de compreender os componentes do sistema e como seus programas funcionam. O propósito principal é identificar programas prioritários para Reengenharia e medir sua qualidade. Fundamentos da Reengenharia ReestruturaçãoÉ o processo de alterar a forma do software (Ex: definição e nomes de dados e código do programa) sem alterar sua funcionalidade. O propósito principal é tornar o programa mais fácil de ser compreendido. Fundamentos da Reengenharia Engenharia Reversa É o processo de analisar o software para reconstruir uma descrição de seus componentes e seus relacionamentos. Uma descrição de alto nível do programa é obtida a partir do programa físico. O propósito é redocumentar o sistema e descobrir informações do projeto com o auxílio na melhoria da compreensão do programa. Fundamentos da Reengenharia Migração É o processo de converter um software de uma linguagem para outra, mover de um ambiente operacional para outro ou atualizar sua tecnologia. O propósito principal é amenizar o impacto de adoção de novos ambientes e tecnologias. Fundamentos da Reengenharia Reutilização É o processo de sistematicamente reaproveitar os diversos elementos criados durante o desenvolvimento de software (código, projeto, especificações, documentação). O propósito principal é acelerar o desenvolvimento de novos sistemas e melhorar sua qualidade. Fundamentos da Reengenharia Exercício 3 Que experiências de reengenharia você conhece? Classifique-as. Quais as principais dificuldades enfrentadas nestas experiências ?