26
- ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

- ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Embed Size (px)

Citation preview

Page 1: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

- ENGENHARIA REVERSA- REENGENHARIA

André BudziakEdnilson MiuraHenrico GonçalvesPriscila ScharneskiRafael Mezzadri

Page 2: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

INTRODUÇÃO

A manutenção é uma das fases mais dispendiosas do ciclo de vida, e um dos principais fatores que ocasiona esse dispêndio é a inexistência, a não completitude e/ou desatualização da documentação de software. Com a falta do programador responsável, acaba sobrando muitas vezes somente o código fonte sem a documentação.

Uma das soluções para amenizar esse esforço da manutenção é a aplicação de Engenharia Reversa para recuperação de informações

Page 3: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

O que é Engenharia Reversa? O termo “Engenharia Reversa” tem sua origem

na análise de hardware, pois é comum a prática de decifrar projetos de produtos finalizados com intuito de duplicá-los.

O conceito de Engenharia Reversa é similar:“Processo de exame e compreensão do software existente, para recapturar ou recriar o projeto e decifrar os requisitos atualmente implementados pelo sistema, apresentando-os em um nível ou grau mais alto de abstração.”

Page 4: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Progressiva X 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 para um alto nível de abstração.

Page 5: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Por meio da engenharia reversa um software pode ser visualizado em diferentes níveis de abstração. Cada visualização abstrai características próprias da fase do ciclo de vida correspondente à abstração.

Nível de Abstração: Quanto maior for o nível de abstração, a generalidade das informações é maior, e mais compreensível o sistema fica. O objetivo da ER é atingir um alto grau de abstração partindo de um baixo grau.

Abstração

Page 6: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Abstração

Page 7: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Documentação Necessária

Quais os documentos utilizados para realizar engenharia reversa ? - código fonte - informações de usuários e/ou analista - documentação existente (manual de

usuário, manual de sistema, DFDs, fluxogramas, etc.)

Page 8: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Categorias de ER

São definidas duas categorias de Engenharia Reversa : a Visualização de Código e o Entendimento do Programa.

Visualização de Código: é a forma mais simples e mais antiga da Engenharia Reversa. A intenção é recuperar a documentação que já existiu, ou que deveria ter existido, sobre o sistema. A ênfase é a criação de visões adicionais, especialmente visões gráficas, que não foram criadas durante o processo original de Engenharia Progressiva.

Entendimento do Programa: é o conhecimento do domínio das informações externas. As deduções são adicionadas às observações feitas sobre o sistema através do exame do mesmo de modo a obter informações com nível mais alto de abstrações.

Page 9: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Visualização de Código

Também denominada Redocumentação. É a criação ou revisão de representações semanticamente equivalentes num mesmo nível de abstração.

O processo de Visualização de Código cria as representações a partir de informações obtidas apenas da análise do código fonte, embora a apresentaçãodessas informações possa se diversificar. As formas das representações são consideradas visões alternativas, cujo o objetivo é melhorar a compreensibilidade dosistema global.

Page 10: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Visualização de Código

As ferramentas usam o código fonte do software como entrada, analisam e extraem a arquitetura do programa, a estrutura de controle, o fluxo lógico, a estrutura de dados, o fluxo de dados e o fluxo de controle. Algumas ferramentas dessa categoria aplicam técnicas como: Fatiamento de Programa, Análise de Dependência.

Esse nível de entendimento não transcende a visão em nível-estrutural e não atribui significados para o sistema analisado. Recuperações mais ambiciosas tais como afunção, os propósitos ou a essência do sistema, exigem um nível de entendimento maior e são definidas como Entendimento de Programa.

Page 11: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Entendimento de Programa

Entendimento de Programa recria abstrações do projeto a partir de uma combinação de código, documentação existente do projeto (se disponível), experiências pessoais, e conhecimentos gerais sobre o problema e o domínio de aplicação.

Sintetizando, Entendimento de Programa deve produzir todas as informações necessárias para se entender completamente o que o sistema faz, como, e por que o sistema faz.

Page 12: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Entendimento de Programa

Muitas das ferramentas de Entendimento de Programa possuem alguma forma de base de conhecimento que une padrões de programação aconceitos funcionais: Reconhecimento de Padrões, Análise Baseada na Intenção, ...

Entendimento de Programa é a forma mais crítica de engenharia reversa porque tenta imitar o raciocínio humano na busca do entendimento.

Page 13: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Entendimento X Visualização As ferramentas de Entendimento de Programa

distinguem-se das ferramentas de Visualização de Código porque objetivam entender o sistema, em vez de simplesmente fornecer visões alternativas para auxiliar o usuário a entender o sistema.

Esse entendimento vai além do conhecimento em nível implementacional e estrutural, buscando obter o conhecimento em nível-funcional e até mesmo em nível de domínio (ambiente de operação do sistema).

Page 14: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Ferramentas

Linguagens Produto Referência

AD/Advantage

Aplicativos de banco de dadosInterface:McCabe & Associates Inc., e Centerline Software Inc., e Code Center

-Diagramas dos relacionamentos lógicos e de dados

CincomSystems Inc.

ENSEMBLE C, C++, FortranPrincipais Plataformas:UNIX, e PCs

-Diagramas de fluxo de dados - Análise de dependência de dados-Dicionário de dados-Especificações de módulos-Métricas de complexidade

CadreTechnolog Inc.

HINDSIGHT C, C++, Fortran - Gráficos de estruturas e diagramas parageração de relatórios

AdvancedSoftwareAutomationInc.

Ferramentas Visualização de Código

Page 15: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Ferramenta

Linguagens

Produto Referência

SEELA C, COBOL,Ada,Pascal, Fortran,Mainframes

- Linguagem de projeto de programa a partir do código fonte, com edição gráficae documentação da estrutura do código com: listagens top down e sequenciais,diretórios de blocos e índices de definição de módulos

TuvalSoftwareIndustries

STP -SoftwareThrough Pictures

- - Diagramas gráficos do código com descrição dos principais elementos do banco de dados, funções ou sub-rotinas que chamam, que são chamadas,variáveis usadas e escopo

InteractiveDevelopmentEnvironmentInc.

Ferramentas Visualização de Código

Page 16: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Ferramenta

Linguagem Produto Referência

RIGI COBOL, C, Unix

Redocumentação estrutural automática, produzindo grafos de fluxo de recursos eReconhecimento de padrões etécnicas de composição desistema para geração deabstrações de alto nível

University of Victoria

DESIRE

DesignInformationRecoveryEnvironment

Protótipo

CModelo de Domínio(base deconhecimentos)

Pattern Matching;Abstrações conceituais, que sãoinformações formais e informaisconhecidas, transformadas emidiomas usados para localizarpadrões na implementação

MCCMicroelectronics andComputer TechnologieCorporation

Ferramentas Entendimento de Programa

Page 17: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

A Reengenharia de Software poderia ser conceituada da seguinte forma:

“É o exame de um sistema para reconstituí-lo em uma forma nova e a implementação subsequente dessa nova forma.“

A Reengenharia em si não se restringe somente ao software:

“Pode ser aplicada numa empresa como um todo com o intuito de enxergá-la como uma grande rede de processos interconectados, onde cada processo seria entendido e reestruturado de forma a ser executado da melhor forma possível. A forma considerada ideal é adotada substituindo o processo atual.”

O que é Reengenharia?

Page 18: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Passos da Reengenharia

A reengenharia resume-se aos seguintes passos:

o Documentar os softwares atuaiso Melhorar a leitura do códigoo Redesenhar as bases de dadoso Alterar a plataforma de hardwareo Converter linguagenso Adicionar novas funcionalidades e/ou capacidadeso Facilitar os processos de manutenção

Page 19: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Benefícios da Reengenharia:

o Redução de custoso Melhora no desempenho dos processoso Aproveitamento dos recentes avanços, usando-os como elemento

diferenciador, de forma a obter uma vantagem competitiva

Benefícios da Reengenharia?

Page 20: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Porque fazer Reengenharia?

Porque devemos Reengenhar um Software?o Manutenção: Softwares de difícil manutenção não são um

problema novo. A ênfase da Reengenharia de Software tem sido nesses softwares, cuja facilidade manutenção tem sido posta em segundo plano por décadas.

o Controle das Informações: A Reengenharia de Software procura modificar o software com o objetivo de que ele se enquadre num novo ambiente processual, tendo o seu valor expandido ou mesmo extrapolado. O software passa de mero coadjuvante nas atividades cotidianas para ser um dos atores do processo.

Page 21: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Modelo de Reengenharia

Reengenharia de processos:o Análise de inventário: é o levantamento do inventário de todas

as informações sobre as aplicações, não importando o meio onde estejam. Deve fornecer uma descrição detalhada sobre cada aplicação ativa, classificando as informações colhidas de acordo com a sua importância.

o Reestruturação de Documentação: documentação escassa é uma característica que muitos sistemas em funcionamento possuem há muito tempo.

o Engenharia Reversa: Reverter um produto às suas definições mais abstratas de desenvolvimento, com o objetivo de facilitar nossa compreensão do que é o sistema, como funciona e como não funciona

Page 22: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Modelo de Reengenharia

o Reestruturação de código: Violações da programação devem ser anotadas e então reestruturadas de forma a facilitar o seu entendimento e teste.

o Reestruturação de dados: Dissecar o sistema e implementar outros modelos de dados se necessário, a fim de aprimorar a arquitetura do sistema.

o Forward Engineering: é também chamada de renovação. Não apenas recupera as informações do software existente mas o altera e o reconstitui num esforço para aprimorar sua qualidade. O software reengenheirado implementa funções do sistema existente e também adiciona e/ou melhora a sua performance nas funções que já existiam e que foram mantidas.

Page 23: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Modelo de Reengenharia

Page 24: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Passos da Reengenharia

Engenharia Reversa Estudo das possiblidades existentes Reengenharia:

o Sem mudança de funcionalidade: (código legado é recuperado, usando mesmo modelo lógico, é reimplementado na linguagem escolhida)

o Mudança parcial de funcionalidade: parte do sistema continua com sua funcionalidade e uma parte será alterada (necessária integração entre as 2 partes)

o Mudança total de funcionalidade: total reescrita, com aplicação de forward engineering

Page 25: - ENGENHARIA REVERSA - REENGENHARIA André Budziak Ednilson Miura Henrico Gonçalves Priscila Scharneski Rafael Mezzadri

Conclusões

Em relação a tudo que foi explicitado sobre a Engenharia Reversa, é deixado de forma clara a noção de que ela não ocorre isoladamente e sim dentro de um processo de Reengenharia.

Tendo a Tecnologia de Informação como seu principal elemento alavancador, a Reengenharia de Software torna-se essencial dentro desse contexto pois é extremamente necessário entender de forma completa todos os sistemas da empresa.

Logo, dentro do contexto de Reengenharia de Software, a Engenharia Reversa passa a ter papel fundamental pois gera documentação suficiente para o entendimento dos sistemas e para uma possível reconstrução dos mesmos baseados em novos paradigmas e conceitos mais atualizados.