Engenharia de Software III
5º. Semestre
ADS
Manutenção e Reengenharia de
Software
Profa. Dra. Ana Paula Gonçalves Serra
Agenda
Sistema Legado
Evolução de Software
Manutenção de Software
Modernização
Substituição
Profa. Dra. Ana Paula G. Serra - p. 3 Engenharia de Software III – Fatec Ipiranga
Isso é Real?
Vídeo EDS:
Building a Dream.mpa
Isso é Real!
Explosão do foguete Arianne V (1996) em 40 segundo após decolagem que
possuía na sua codificação uma rotina do Ariane IV, que não deveria ser
utilizada. A rotina convertia valor flutuante em inteiro e que recebeu como
entrada um valor que estava fora da faixa permitida e fez com que os
computadores principais e de backup dessem “shut-down” ao mesmo tempo.
Projeto da Agência Espacial Européia que
custou:
10 anos
U$ 8 Bilhões
Profa. Dra. Ana Paula G. Serra - p. 5 Engenharia de Software III – Fatec Ipiranga
Exercício
Em uma empresa fornecedora de equipamentos telefônicos existe um sistema
legado de suporte técnico em mainframe em funcionamento nos últimos 20
anos. Esse sistema (tela verde) é utilizado diariamente em média por 20
usuários (atendentes) simultaneamente no horário das 7:00 h. às 22:00 h.
Atualmente o custo de manutenção desse sistema é altíssimo, o código está
deteriorado (macarrônico) e ninguém mais consegue dar manutenção, qualquer
melhoria no software gera dezenas de erros. Além de problemas de
desempenho, em determinados momentos o acesso aos dados é muito lento e a
transação que está sendo realizada muitas vezes é abortada.
Com tudo isso, pretende-se realizar a reengenharia desse software e criar uma
integração com um software de mercado (COTS) de base de conhecimento.
Esse software de base de conhecimentos tem como objetivo buscar solução de
problemas que já foram selecionadas, ajudando os atendentes a tomarem
decisões na solução do chamado.
Você foi contratado para fazer uma proposta de reengenharia para o
sistema descrito. Para isso, você deve descrever a estratégia de
reengenharia
de
software.
Essa
estratégia
deve
abordar
atividade(s)/técnica(s) de reengenharia que serão utilizadas e arquitetura
proposta.
5
Conceitos Importantes...
Antes de começarmos o conceito de Reengenharia de
Software, alguns conceitos devem ser definidos e
discutidos, como:
Sistemas Legados
Profa. Dra. Ana Paula G. Serra - p. 7 Engenharia de Software III – Fatec Ipiranga
Sistema Legado
Algumas definições...
Um frase utilizada por Seacord, et al. no livro Modernizing Legancy Systems é “ Um sistema
legado é um sistema que foi escrito ontem”.
Outras definições como a de Sommerville são mais formais, onde sistemas legados são
“sistemas sociotécnicos* baseado em computadores e que foram desenvolvidos no
passado, frequentemente usando tecnologias mais antigas ou obsoletas. Esses sistemas
incluem não apenas hardware e software, mas também processos e procedimentos
legados... As mudanças em uma parte do sistema envolvem inevitavelmente mudanças em
outros componentes”.
* Sociotécnicos incluem mais que sistemas sob o ponto de vista técnico, mas também pessoas, políticas e regras da empresa, leis, normas, etc.
Sistema Legado
Por
que
alguns
sistemas
ainda
utilizam
software
desenvolvidos nas décadas de 60, 70, 80?
Profa. Dra. Ana Paula G. Serra - p. 9 Engenharia de Software III – Fatec Ipiranga
Componentes de Sistema Legado
Políticas e
regras de
Negócio
Software de
aplicação
Software de
Apoio
Processos de
Negócio
Hardware do
Sistema
Dados de
Aplicação
Executado em Executado em Usa UsaSoftware de
aplicação
Incorpora conhecimento de Restringe UsaModelos em Camadas do Sistema Legado
Hardware
Software de Apoio
Software de Aplicação
Profa. Dra. Ana Paula G. Serra - p. 11 Engenharia de Software III – Fatec Ipiranga
Evolução do Software
Qual é a diferença de um
software que está sendo
desenvolvido utilizando um modelo de processo incremental ou
espiral e um software legado que deve ser alterado?
Os dois não utilizam o conceito de evolução de software?
Evolução do Software
Implantação
Desenvolvimento - Novo Software
Profa. Dra. Ana Paula G. Serra - p. 13 Engenharia de Software III – Fatec Ipiranga
Sistema Legado
Sistema
Legado
Leis e Normas
Sistema Modificado
(Evolução do Software)
Integração de Sistemas
Necessidade do Mercado
Mudança ou inclusão de
novas tecnologias
Políticas, Regras e
Procedimentos da Empresa
Novos Requisitos
Funcionais e Não-Funcionais
..
.
O processo de Evolução do Software, depende:
Software a ser mantido;
Processo de desenvolvimento utilizado;
Pessoas envolvidas no processo.
14
Profa. Dra. Ana Paula G. Serra - p. 15 Engenharia de Software III – Fatec Ipiranga
Exemplo de um Processo Formal de
Evolução de Software
Solicitação
de Mudança
Análise de
Impacto/Risco
Planejamento
de Versões
Implementação
de Mudanças
Liberação do
Sistema
Mudança
Propostas
Análise de
Requisitos
Atualização
de Requisitos
Desenvolv.
de Software
Fase Composta
Quais são os passos para um processo de evolução de sistemas?
Considere que o sistema já existe e necessita ser alterado.
Solicitação de
Mudança
Análise
Código Fonte
Modificar
Código Fonte
Entrega de
Sistema
Modificado
Toda evolução de software deve seguir um processo formal?
Exemplo de um Processo Formal de
Evolução de Software
Profa. Dra. Ana Paula G. Serra - p. 17 Engenharia de Software III – Fatec Ipiranga
Evolução do Software
Mudança contínua;
Complexidade crescente;
Evolução de sistemas de grande porte;
Crescimento contínuo;
Qualidade em declínio;
....
Quais são os reflexos (hipóteses) práticos da evolução de software?
Categorias da Evolução de Software
Manutenção de Software
Modernização de Software
Substituição de Software
Profa. Dra. Ana Paula G. Serra - p. 19 Engenharia de Software III – Fatec Ipiranga
Categorias da Evolução de Software –
Manutenção de Software
É um processo incremental e repetitivo, onde alterações são feitas no
software. Essas alterações envolvem:
Eliminação de erros
Melhorias funcionais
A manutenção é necessária para suportar a evolução de qualquer
software, mas não deve envolver:
Mudanças estruturais, como por exemplo, adoção de novas
tecnologias para implantação de uma arquitetura distribuída.
Categorias da Evolução de Software –
Manutenção de Software
Categorias de Manutenção de Software
Corretiva: Alterações para corrigir erros no software
Melhoria: Alterações para melhorar o software, como por exemplo: novas
funções, melhoria do desempenho, usabilidade
Adaptativas: Alterações para adaptar o software a novos ambientes, tais
como sistemas operacionais, ferramentas, banco de dados, componentes
Preventivas: Alterações para melhorar a manutenibilidade do software. O
Profa. Dra. Ana Paula G. Serra - p. 21 Engenharia de Software III – Fatec Ipiranga
Categorias da Evolução de Software –
Manutenção de Software
Na década de 80 um estudo estimou:
20% corresponde a manutenção corretiva
50% corresponde a manutenção de melhoria
25% corresponde a manutenção adaptativa
5% corresponde a manutenção preventiva
Hoje em dia observa-se que esses números não alteraram muito.
Categorias da Evolução de Software –
Manutenção de Software
Profa. Dra. Ana Paula G. Serra - p. 23 Engenharia de Software III – Fatec Ipiranga
Alguns dos Problemas –
Manutenção de Software
Complexidade Crescente, o que leva a estrutura deteriorada
Qualidade em declínio
Custo alto de manutenção, pois:
estabilidade
de
equipe,
contrato
de
manutenção,
falta
de
conhecimento do negócio e do software pelos desenvolvedores que
irão fazer a manutenção, estrutura do programa
Instabilidade do sistema de software
...
Categorias da Evolução de Software –
Modernização de Software
É utilizada quando o sistema legado requer mudanças mais extensas e
significativas do que aquelas realizadas pela manutenção;
Preserva porção significativa do negócio do sistema;
A necessidade da modernização ocorre devido a fragilidade e pouca
consistência do sistema legado, da falta de flexibilidade, isolamento e
pouca capacidade de extensão;
Mudanças de modernização incluem: reestruturação do sistema, novas
funcionalidades ou modificações de atributos de software.
Profa. Dra. Ana Paula G. Serra - p. 25 Engenharia de Software III – Fatec Ipiranga
Categorias da Evolução de Software –
Modernização de Software
Técnicas de Compreensão do Sistema Legado
Caixa Branca
Caixa Preta
O que isso significa?
Categorias da Evolução de Software –
Modernização de Software - Caixa Branca
Exige conhecimento sobre o código interno do sistema legado. Este processo
envolve:
Modelagem do domínio do sistema;
Extração de informações do código;
Criação de abstrações que descrevem a estrutura do sistema.
Após a análise e compreensão do código, este tipo de modernização inclui
If (a>b) ... else ...
Profa. Dra. Ana Paula G. Serra - p. 27 Engenharia de Software III – Fatec Ipiranga
Categorias da Evolução de Software –
Modernização de Software - Caixa Preta
Exige conhecimento das interfaces externas do sistema legado. Este
processo envolve:
Examinar as entradas e saídas de um sistema legado.
É uma técnica menos trabalhosa que a técnica de caixa branca;
Muitas vezes é necessário a utilização de técnica de caixa branca
para complementar o entendimento.
Entradas
Saídas
Categorias da Evolução de Software –
Modernização de Software
Segundo uma pesquisa do Standish Group realizada em 2001 muitas
tentativas de modernização de software falham, sendo que:
23% dos projetos são cancelados antes de terminarem
28% terminam no tempo e orçamentos previstos e com o objetivo esperado.
Uma forma de modernização para melhorar a capacidade e manutenibilidade
de um sistema legado, introduzindo tecnologias e práticas modernas, é a
Profa. Dra. Ana Paula G. Serra - p. 29 Engenharia de Software III – Fatec Ipiranga
Categorias da Evolução de Software –
Substituição de Software
Requer a construção do sistema legado desde o início, e é apropriada quando
o sistema legado não consegue mais atender às necessidades do negócio e
quando a modernização não é possível ou não vale a pena em relação aos
custos.
Quais são os riscos de substituição de software?
Profa. Dra. Ana Paula G. Serra - p. 31 Engenharia de Software III – Fatec Ipiranga
Exercício
Analise os casos abaixo e classifique em Manutenção (neste caso classifique em
Corretiva, Melhoria, Adaptativas e Preventivas), Modernização de Software ou
Substituição de Software.
Correção de um erro.
Foi solicitada a criação de uma nova função para o sistema.
Em todos os servidores serão instalados sistemas operacionais e gerenciadores
de banco de dados com versões mais recentes.
Criar uma interface gráfica para Internet com integração com o Mainframe.
Uma empresa de venda de produtos, chegou a conclusão que o sistema atual
não atende mais as regras de negócio da empresa, sendo que muitas vezes
algumas informações deixam de ser registradas e automatizada pelo sistema.
31
Reengenharia
“Já é hora de parar de pavimentar trilhas de gado. Em vez de embutir
processos desatualizados em silício e software, deveríamos
descartá-los e começar de novo. Deveríamos “reengenheirar” os nossos
negócios: usar o poder da moderna tecnologia da informação para
reprojetar radicalmente nossos processos de negócio a fim de
conseguir aperfeiçoamentos drásticos em seu desempenho”
Harvard Business Review
Profa. Dra. Ana Paula G. Serra - p. 33 Engenharia de Software III – Fatec Ipiranga
Reengenharia
Reengenharia de Processo de Negócio
1º. Passo
Reengenharia de Software
2º. Passo
Regras de negócio impactam diretamente no software
A reengenharia de processo de negócios se ocupa de reprojetar processos de
negócio, a fim de reduzir o número de atividades redundantes e melhorar a eficiência
do processo;
Em geral a reengenharia de processo de negócio é apoiada por sistemas de software;
Muitas vezes, a reengenharia de processo de negócio é um fator direcionador da
evolução de software.
Reengenharia de Processo de Negócio
Reengenharia de Processo de Negócio (Business Process
Reengineering - BPR) tem como objetivo apoiar na análise,
na avaliação de processos de negócio e na proposta de um
sistema de negócio.
Profa. Dra. Ana Paula G. Serra - p. 35 Engenharia de Software III – Fatec Ipiranga
Reengenharia de Processo de Negócio
Definição do
Negócio
Refinamento
& Agilização
Prototipação
Identificação
do
Processo
Especificação e
Projeto do
Processo
Avaliação do
Processo
Motivações:
• Redução de custo • Redução de prazo • Aperfeiçoamento da qualidade • Desenvolvimento pessoalSão identificados processos críticos para alcançar as metas definidas do negócio
• Os processos são analisados e
medidos.
• As tarefas do processo são
identificadas
• Os custos e tempo são analisados • Problemas de qualidade são
identificados Com base nas
informações obtidas nas 3 primeiras fases é realizada a especificação para os processos que serão reprojetados. São realizados “testes” do processo de negócio reprojetado antes de ser integrado ao negócio
Com base no “feedback” do protótipo, o processo de negócio é refinado e então instanciado para um sistema de negócio
Um modelo de
BPR
Reengenharia de Software
Uma aplicação de software serviu às necessidades do negócio de
uma empresa po 10 ou 15 anos. Durante esse tempo foi corrigida,
adaptada e aperfeiçoada por muitas vezes. O pessoal abordou esse
trabalho com a melhor das intenções, mas boas práticas de
engenharia
de
software
foram
sempre
deixadas
de
lado
(pressionada por outros aspectos, como por exemplo prazo). Agora
a aplicação está instável. Ainda funciona, mas todas vez que uma
modificação é tentada, efeitos colaterais inesperados e sérios
ocorrem. No entanto a aplicação de software precisa continuar a
evoluir.
Profa. Dra. Ana Paula G. Serra - p. 37 Engenharia de Software III – Fatec Ipiranga
A reengenharia de software oferece uma abordagem disciplinada
para migrar
sistemas legados
em sistemas evolutivos;
O processo de reengenharia de software aplica os princípios da
engenharia de software em um sistema de software já existente para
atender requisitos existente e novos requisitos.
Reengenharia de Software
Algumas definições...
Segundo Pressman... “A reengenharia tem como objetivo principal melhorar a qualidade global da
aplicação, mantendo, em geral, as funções da aplicação existente. Mas, ao mesmo tempo, pode-se
adicionar novas funções e melhorar o desempenho”.
Segundo o SEI (Software Engineering Institute) “reengenharia é uma transformação sistemática
de uma aplicação de software existente para uma nova forma, realizando melhorias na operação,
na funcionalidade, no desempenho, na capacidade de evoluir para um novo sistema com menores
custos, prazos e riscos”.
Profa. Dra. Ana Paula G. Serra - p. 39 Engenharia de Software III – Fatec Ipiranga
Engenharia e Reengenharia de Software
Especificação do
Sistema
Projeto e
Implementação
Sistema
Novo
Sistema Legado
Compreensão e
Transformação
Sistema
Reengenheirado
Engenharia de Software
Reengenharia de Software
Estudo de Caso - Hipotético
Você comprou uma casa em outro Estado. Nunca viu
realmente a propriedade, mas adquiriu por um preço
espantosamente baixo, com a advertência de que talvez ela
tivesse que ser completamente reconstruída. Como você
procederia?
Profa. Dra. Ana Paula G. Serra - p. 41 Engenharia de Software III – Fatec Ipiranga
Alguns procedimentos seriam
importantes...
Inspeção da casa, para realmente verificar se a casa deve ser
reconstruída.
Verifique se tudo deve ser demolido, se a estrutura está fraca ou
algo pode ser reaproveitado.
Antes de começar a reconstrução, entenda como a casa original foi
construída. Verifique fiação, canalização, estrutura interna, mesmo
que seja para descartar tudo o conhecimento adquirido servirá para
iniciar a construção.
Quando começar a construir realize um projeto, e siga todas as
técnicas e normas da construção civil. Também utilize materiais de
boa qualidade, modernos e duradouros. Isto pode custar um pouco
a mais, mas evitará manutenções desnecessárias no futuro.
Atividades da Reengenharia de Software
Existem seis atividades ou técnicas básicas de reengenharia de
software que podem ser consideradas individualmente ou de forma
cíclica.
Análise de Inventário
Reestruturação de
Documentos
Reestruturação
Engenharia
Avante
Profa. Dra. Ana Paula G. Serra - p. 43 Engenharia de Software III – Fatec Ipiranga
Atividade: Análise de Inventário
Toda empresa “deve” ter um inventário de todos os sistemas
de software;
Dados
importantes
do
inventário
são:
tamanho,
idade,
importância para o negócio, tecnologias utilizadas, integração
com outros softwares,...;
Esses
dados
são
importantes
para
analisar
riscos
da
modernização do software.
Atividade: Reestruturação de Documentos
Pouca documentação é a marca registrada de muitos sistemas
legados.
Muitas vezes para iniciar a reestruturação de documentos é
necessário passar pela atividade de engenharia reversa para
entender o que está por “trás” do código fonte.
Profa. Dra. Ana Paula G. Serra - p. 45 Engenharia de Software III – Fatec Ipiranga
Atividade: Engenharia Reversa
Engenharia Progressiva: Processo tradicional de engenharia de software, caracterizado pelas
atividades progressivas do ciclo de vida, que partem de um alto nível de abstração, para um baixo
nível de abstração.
Engenharia Reversa: O processo inverso a Engenharia Progressiva, caracterizado pelas
atividades retroativas do ciclo de vida, que partem de um baixo nível de abstração (código-fonte)
para um alto nível de abstração (modelos).
Engenharia Progressiva
Engenharia Reversa
Requisitos
Projeto
Implementação
Visão Funcional,
Não-Funcional e Domínio Visão Estrutural
Visão de implementação (código)
Atividade: Engenharia Reversa
Muitas pessoas acreditam...
E N G E N H A R I A R E V E R S A
Código fonte desestruturado
e não documentado
Profa. Dra. Ana Paula G. Serra - p. 47 Engenharia de Software III – Fatec Ipiranga
Atividade: Engenharia Reversa
Processo de Engenharia Reversa
Código
Reestruturado
Extração de
Abstrações
Refinar e
Simplificar
Processamento Interface Base de Dados Código FonteCódigo Fonte “limpo”, somente com a estrutura
Modelo Gerado
Modelo Final
Profa. Dra. Ana Paula G. Serra - p. 49 Engenharia de Software III – Fatec Ipiranga
Atividade: Reestruturação do Código
Também chamada de Refactoring ou Refabricação, consiste em um
processo de modificação de módulos de software de tal modo que não altere
o comportamento externo do código, mas aperfeiçoe a estrutura interna. É
um modo disciplinado de “limpar” o código que minimiza a introdução de
defeitos.
Em essência quando ocorre a refabricação o projeto está sendo aperfeiçoado
internamente depois que ele já foi escrito.
Geralmente a arquitetura básica é sólida, mas alguns módulos
precisam de modificações internas.
A refabricação pode ocorrer em uma mesma plataforma de
desenvolvimento ou em uma nova.
Atividade: Reestruturação dos Dados
Consiste na reestruturação dos dados, ou seja, melhoria do projeto
de banco de dados, reorganização dos dados e nomenclatura.
Geralmente existe uma mudança física nas estruturas de dados,
contemplando mudança de formato de arquivos ou mudança de
tecnologia de banco de dados.
Profa. Dra. Ana Paula G. Serra - p. 51 Engenharia de Software III – Fatec Ipiranga
Atividade: Engenharia Avante
Aplica princípios, conceitos e métodos de engenharia de software
para recriar uma aplicação existente, com o objetivo de ampliar a
capacidade da aplicação antiga. Algumas forma de engenharia
avante atuais.
1.
Engenharia Avante para Arquitetura Cliente/Servidor
2.
Engenharia Avante para Arquitetura Orientada a Objetos
3.
Engenharia Avante de Interfaces com o Usuário
Métodos mais comuns de Reengenharia
Migração de sistemas legados para uma nova plataforma
Útil quando há um alto custo de manutenção da plataforma legada.
Alteração da interface humano computador e reestruturação
do código e documentação
Útil quando há necessidade de criação de uma nova interface gráfica
(Wrappers) e de uma revisão no código e documentação, sendo não
Profa. Dra. Ana Paula G. Serra - p. 53 Engenharia de Software III – Fatec Ipiranga