23
Engenharia Reversa e Reengenharia Software 13/05/2015

Engenharia Reversa e Reengenharia Software · Problemas na manutenção de Software Código fonte e documentação mal elaborada. Falta de compreensão do sistema e suas funcionalidades

Embed Size (px)

Citation preview

Engenharia Reversa e

Reengenharia Software

13/05/2015

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.

Figura 1-1 Relacionamentos no Ciclo de Desenvolvimento de Software.

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

Visões do Software

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.

Entendimento do Programa

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: