Problemas na manutenção de Software
Código fonte e documentação mal elaborada.
Falta de compreensão do sistema e suas funcionalidades.
Muitas vezes a tecnologia se tornou obsoleta.
Métodos e Técnicas de construção de software tem seu paradigma modificado para melhorar o processo de engenharia de sofwtare.
O que é Reengenharia de Software
Consideremos três conceitos dependentes:
a existência de um processo de desenvolvimento de
software
a presença de um sistema a ser analisado
e a identificação de níveis de abstração.
Engenharias
Construção Projeto Análise
Engenharia Reversa
Planejamento Projeto
Engenharia Tradicional
Análise Projeto
Engenharia Reversa
É o processo inverso à engenharia
progressiva, caracterizado pelas atividades
retroativas do ciclo de vida, que partem de
um baixo nível de abstração para um alto
nível de abstração, é conhecido como
engenharia reversa.
Engenharia Reversa
Código Fonte
Arquitetura do
Sistema
Especificação
Fisica
Engenharia Tradicional
Ferramenta
CASE
Especificação
Lógica
Engenharia Reversa
Entradas
Código-Fonte
Dicionário de dados
DDL
Saídas
Desenho do banco de
dados
Estrutura física dos dados
Diagrama Entidade-
Relacionamento
Modelo de dados
normalizado
Especificação do projeto
Visões do Software
Software visualizado de diferentes maneiras
Visão a nível implementacional: caracteristicas da linguagem;
Visão a nível estrutural: detalhes da linguagem
Visão a nível funcional: função de um componente
Visão a nível domínio: contexto de operação do sistema
A representação extraída do código pode diferir de uma representação similar
Categorias
As categorias são divididas em:
Visualização do código Fase de redocumentação
Representação a partir do código fonte
Intenção de recuperar documentação
Visualização do código, não transcende a visão em nível estrutural
Entendimento do programa Recuperação do projeto:
a partir da combinação entre:
Código
Documentação existente
Experiências pessoais e Conhecimentos gerais sobre o problema e o domínio de aplicação
Entendimento do Programa
Um completo entendimento de programa busca
reconstruir não somente a função do sistema, mas
também o processo pelo qual o sistema foi desenvolvido.
A categoria de entendimento de programa é a forma
mais crítica de engenharia reversa, pois tenta aproximar-
se do raciocínio humano na busca do entendimento.
Reengenharia – Outras definições
Definições:
Chiskofsky (1990) – alteração de um sistema de software;
Wander (1992) – melhoramento do sistema, sem alterações de suas funções;
Premerlani e Blaha (1994) – reduzir custos de manutenção e melhoria na flexibilidade do software;
Pressman (1995) – reconstrução do sistema preservando as funções existentes, ao mesmo tempo que se adiciona novas funções;
Objetivo
Construir um sistema novo com maior facilidade de
manutenção e a engenharia reversa é usada como parte do
processo re reengenharia, pois fornece o atendimento do
sistema a ser reconstruído.
Categorias
Reengenharia de Processos Administrativos
Reengenharia de Processos Produtivos
Reengenharia de Sistemas de Software ou Produtos
O Porque da Reengenharia
Necessidade de melhoria nos serviços e produtos oferecidos;
Compressão na margem de lucro;
Redução do clico de vida dos produtos;
Explosão tecnológica;
Desgaste de Software.
Software Legado
Software antigos, onde nenhuma pessoa que participou da sua elaboração está mais na equipe
Falta Documentação
Desestruturação e dificuldade de entendimento do código, muitas vezes porque o software foi desenvolvido antes da introdução dos métodos de programação estruturada;
Software Legado
Programadores que não participaram do desenvolvimento de um produto de software sentem dificuldade em entender e mapear a funcionalidade para o código fonte;
Documentação desatualizada, não auxiliando em nada a equipe de manutenção;
Dificuldade de predizer as consequências de efeitos colaterais;
Dificuldade de administrar múltiplas alterações concorrentes.
Emprego da Reengenharia
Migrar software de plataformas centralizadas para ambientes distribuído.
Mudança de paradigma: A programação orientada a objetos tem muitas vantagens sobre a rogramação procedimental. Os sistemas são flexíveis, adaptáveis e extensíveis. Possui uma coleção rica de mecanismos composicionais para formação de classes, instanciação de objetos, propriedades de herança, polimorfismo e ocultamento de informações.
Consome tempo e dinheiro. Pode-se tornar uma atividade que dura meses ou alguns anos.
Constituído de duas fases distintas
/“Desmontado” - visando seu entendimento
/Reconstruído - na forma desejada
Reengenharia = Engenharia Reversa + D Engenharia Progressiva
D pode ser de dois tipos:
- Alterações parciais de funcionalidade
- Alterações de implementação
Como Realizar a Reengenharia
Processo de Reengenharia
Realizar a engenharia reversa e identificar os
componentes do sistema
Decidir sobre alterações na funcionalidade
Reprojetar o sistema progressiva reimplementando o
sistema
-
-;
.
Considerações num processo de
reengenharia
Executado se existir um argumento aceitável de
custo/benefício
Implica melhoria através de reprojeto
Remover projetos ruins, e manter projetos bons e
simples
Problemas, os quais necessitam ser identificados;
Ferramentas adequadas aos processos de
reengenharia e não os processos adequados às
ferramentas
Desire / Decode / Art / Docket / Macs / Newcomb
Aplicações da Reengenharia de Software
documentar os softwares atuais;
melhorar a leitura do código ;
redesenhar as bases de dados ;
alterar a plataforma de hardware ;
converter linguagens ;
adicionar novas funcionalidades e/ou capacidades;
facilitar os processos de manutenção;
evoluir os softwares num ambiente CASE.
Algumas ferramentas: