ESW - Manutenção de Software
Prof. Samuel Lemes
(Fesurv – Universidade de Rio Verde)
Qualquer trabalho realizado para alterar o sistema depois que ele já se encontra em operação é considerado manutenção
Ele não pode ser visto da mesma forma que a manutenção de hardware (apenas o conserto ou prevenção de peças quebradas ou impróprias)
Diferentes tipos de sistemas, diferentes tipos de problemas
Formalmente sistemas definidos x sistemas aproximados x mundo real embarcado
Todos os sistemas precisarão de manutenção, independente do processo de desenvolvimento de software, técnicas ou tecnologia utilizado para construí-lo
Quantas mudanças nós podemos esperar para um sistema?
Nós podemos considerar a fase de manutenção como uma fase de evolução?
Modificação;
Acréscimos;
Refinamentos;
Remoção de defeitos;
Adições no sistema;
Remendos e correções;
Suporte;
Evoluções;
SINÓNIMOS DE MANUTENÇÃO
Ajustes;
Extensão;
Expansão;
Revisão;
Atualização;
Re-programação;
Re-desenvolvimento;
Melhorias;
Alterações.
Manutenção do Software
Manutenção Estruturada
Quando o processo de desenvolvimento do software
foi feito de forma estruturada, seguindo os métodos e
técnicas
definidos
pela
engenharia
de
software,
a
manutenção é facilitada e consiste dos seguintes passos:
Manutenção Estruturada
Avaliação da documentação de projeto
Análise da arquitetura do programa
Avaliação do impacto das modificações
Modificação do projeto original
Implementação das mudanças
Testes de regressão (refazer os mesmos testes
feitos anteriormente, verificando se os mesmos
resultados são obtidos)
Porém, se no processo de desenvolvimento não foram utilizadas
técnicas estruturadas e gerados documentos, a manutenção é bem
mais complicada.
Manutenção Estruturada
Se no processo de desenvolvimento não fora utilizadas técnicas estruturadas e gerados documentos, a manutenção é bem mais complicada.
É preciso inicialmente avaliar o código, procurando entender sua estrutura, interface e relacionamento entre módulos.
Não se pode projetar modificações de forma segura, pois não foi feito um projeto.
É difícil prever os impactos das mudanças e se novos erros serão introduzidos.
Não há como fazer teste de regressão, pois não há registros de que testes foram feitos quando o software foi desenvolvido.
Atividade da qual as mudançiciais resultam
Artefatos que requerem mudanças constantes
Análise de Requisitos Especificação de Requisitos (descrição de casos de uso)
Projeto do Sistema Diagramas de Projeto
Especificação do Projeto Arquitetural Especificação do Projeto Técnico Projeto do Programa Diagramas de Projeto
Especificação do projeto do Programa Implementação do
Programa
Código do Programa
Documentação do Programa Teste de Unidade Planos de Testes
Roteiros de Teste Teste do Sistema Planos de Teste
Roteiros de Teste
Entrega do Sistema Documentação do Usuário Guia do sistema
Guia do Programador Aulas de treinamento
Fases da Manutenção do Software
Tempo de Desenvolvimento X Tempo de Manutenção
Pesquisa de opinião recente: 20% do esforço em
desenvolvimento e 80% em manutenção
Evolução X Declínio do sistema
O Custo de manutenção é muito alto? A confiabilidade do sistema é inaceitável?
O sistema não pode mais se adaptar a mudanças adicionais dentro de um período de tempo razoável?
O desempenho do sistema ainda está fora das restrições prescritas? As funções do sistema têm utilidade limitada?
Outros sistemas fazem o mesmo trabalho melhor, mais rápido ou gerando menos custos?
O custo de manutenção do hardware é muito caro, a ponto de justificar sua substituição por um hardware mais novo e mais barato?
Manutenção do Software
Fatores que afetam o esforço da manutenção
Tipo de aplicação Novidade do sistema
Rotatividade e disponibilidade do pessoal de manutenção Duração da vida útil do sistema
Dependência de um ambiente que se modifica Característica de hardware
Qualidade do projeto Qualidade do código
Qualidade da documentação Qualidade dos testes
Manutenção do Software
Produto
Tamanho: afeta o número de pessoas e a organização da equipe de manutenção
Domínio da aplicação (tipo): afeta produtividade Idade tecnologia x produto
Maturidade
Composição: projeto desde o início x reutilização (COTS) Qualidade dos artefatos
Atividade da qual as mudanças iniciais resultam
Artefatos que requerem mudanças constantes
Análise de Requisitos Especificação de Requisitos (descrição de casos de uso) Projeto do Sistema Diagramas de Projeto
Especificação do Projeto Arquitetural Especificação do Projeto Técnico Projeto do Programa Diagramas de Projeto
Especificação do projeto do Programa Implementação do Programa Código do Programa
Documentação do Programa Teste de Unidade Planos de Testes
Roteiros de Teste Teste do Sistema Planos de Teste
Roteiros de Teste
Entrega do Sistema Documentação do Usuário Guia do sistema
Guia do Programador Aulas de treinamento
Manutenção do Software
Manutenção do Software
Terminologia
A existência de divergências no estabelecimento das fronteiras
entre Manutenção Preventiva e Corretiva, é fundamental para o
desenvolvimento do Controle de Manutenção, para que cada
Empresa faça a opção por uma terminologia adequada, de
preferência igual à usada pela maioria das indústrias do mesmo
ramo, que seja divulgada internamente e seja criada
dificuldades a mudanças, a fim de evitar deterioração do
Sistema.
Manutenção do Software
Atividades
Correções:
Corrige um defeito – i.e. uma discrepância entre o comportamento requerido para um produto/aplicação e o comportamento
observado
Melhorias:
Implementam uma mudança para o sistema que modifica seu comportamento ou implementação
Melhorias podem ser:
Troca de requisitos(manutenção Perfectiva)
Adicionando um novo requisito ao sistema (Manutenção Adaptativa) Trocar a implementação mas não o requisito (Manutenção Preventiva)
Manutenção do Software
Como subsídio, relacionamos terminologia recomendada pela
Associação Brasileira de Normas Técnicas - ABNT.
Manutenção, são todas as ações necessárias para que um item seja conservado ou restaurado de modo a poder permanecer de acordo
com uma condição especificada.
Defeito, ocorrência no equipamento que não impede seu funcionamento, todavia pode, a curto ou longo prazo, acarretar sua
indisponibilidade.
Falha, são ocorrências nos equipamentos que impedem seu funcionamento.
Manutenção do Software
•
Manutenção Corretiva,
•
Deficiência
•
Manutenção Preventiva, é aquela responsável pela continuidade
do
serviço
de
um
equipamento,
englobando
inspeções
sistemáticas de acompanhamento de suas condições operativas,
ajustes, conservação e eliminação de defeitos.
•
Manutenção Adaptativa
•
Mudança de Ambiente
•
Manutenção Aperfeiçoadora
Manutenção do Software
•
Prioridade, é o intervalo de tempo que deve decorrer entre a
constatação da necessidade de manutenção e o início dessa
atividade. É um assunto polêmico, sendo seu conceito genérico
“qualidade do que está em primeiro lugar ou do que aparece
primeiro”.
Manutenção do Software
Prioridade 1 - Emergência, manutenção que deve ser feitaimediatamente depois de detectada sua necessidade.
Prioridade 2 - Urgência, manutenção que deve ser feita o mais breve
possível, de preferência sem ultrapassar 24 horas, depois de detectada sua necessidade.
Prioridade 3 - Necessária, manutenção que pode ser adiada por alguns
dias, porém sua execução não deve ultrapassar uma semana.
Prioridade 4 - Desejável, manutenção que pode ser adiada por algumas
semanas, porém não deve ser omitida.
Prioridade 5 - Prorrogável, manutenção que pode deixar de ser
Manutenção do Software
Órgão de OperaçãoPrioridade 1 - Equipamento prioritário fora de serviço com perda de
produção.
Prioridade 2 - Equipamento prioritário em condição deficiente de operação. Prioridade 3 - Equipamento prioritário fora de serviço, sem perda de
produção por período limitado.
Prioridade 4 - Equipamento não prioritário. Órgão de Segurança Industrial
Prioridade 1 - Risco de vida comum. Prioridade 2 - Risco de vida restrita.
Prioridade 3 - Risco de acidente não fatal. Prioridade 4 - Sem risco de acidente.
Manutenção do Software
Como em algumas Empresas surgem impasses entre os
órgãos de Manutenção, Operação e Segurança Industrial pela
divergência de opiniões quanto à caracterização desses
níveis, criou-se a Prioridade Combinada, para justamente
evitar que as discordâncias prejudicassem o desenvolvimento
do trabalho da equipe de execução da manutenção.
Manutenção do Software
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 do Software
Entender o software e a mudança a ser feita (50%);
Modificar o software para incorporar a mudança (25%);
Revalidar o software (25%).
Manutenção do Software
Desenvolvimento ... 30 - 40 %
Manutenção ... 70 - 60 %
Manutenção do 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 do Software
CONTROLE DAS REQUISIÇÕES
CONTROLE DAS MUDANÇAS
CONTROLE DE VERSÕES
Manutenção do Software
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.
Modelo de Manutenção
Manutenção do Software
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).
Modelo de Manutenção
Manutenção do Software
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.
Modelo de Manutenção
Manutenção do Software
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).
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
Manutenção do Software
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
Manutenção do Software
é 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
Manutenção do Software
Reengenharia
“É o estudo e alteração de um determinado sistema para reconstruí-lo numa
nova forma e subsequente 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
Manutenção do Software
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
Frequentes 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 frequente 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
Áreas de Atuação da Reengenharia Análise; Reestruturação; Engenharia Reversa; Migração; Reutilização. Fundamentos da Reengenharia
Manutenção do Software
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