2 - Engenharia de Reversa.pptx

28
Engenharia de Software Leitura de Software Engenharia Reversa Prof. Alessandro Cruvinel Machado de Araújo [email protected]

Transcript of 2 - Engenharia de Reversa.pptx

Page 1: 2 - Engenharia de Reversa.pptx

Engenharia de Software

Leitura de SoftwareEngenharia Reversa

Prof. Alessandro Cruvinel Machado de Araú[email protected]

Page 2: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 2

Desenvolvimento de Software

• O desenvolvimento de software acontece através da execução de um conjunto de etapas em determinada ordem.

• Durante o processo de construção uma série de artefatos são produzidos.

• Os principais são: ...,...,...

Page 3: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 3

Leitura de Software• Para iniciarmos a leitura de um software

existente precisamos identificar os artefatos que foram construídos durante o seu desenvolvimento.

• Uma software com documentação ruim provavelmente terá somente o código fonte disponível.

Page 4: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 4

Software com documentação ruim• Neste caso precisaremos aplicar a técnica de

engenharia reversa.

Page 5: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 5

Engenharia e Engenharia Reversa• Engenharia é a profissão envolvida na concepção,

fabricação, construção e manutenção de produtos, sistemas e estruturas.

• Em um nível superior, existem dois tipos de engenharia: engenharia progressiva e engenharia reversa.

• Engenharia progressiva é o processo tradicional de se mover de abstrações de alto nível e projetos lógicos para a implementação física de um sistema.

• Engenharia reversa é o processo de duplicação de um componente existente, subconjunto, ou produto, sem a ajuda de desenhos, documentação ou de modelos.

Page 6: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 6

Engenharia Reversa• A engenharia reversa pode ser vista como o processo de

análise de um sistema para: – Identificar no sistema seus componentes e suas inter-relações – Criar representações do sistema em outro formulário ou um nível

maior de abstração – Criar a representação física do sistema

Page 7: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 7

Engenharia Reversa• A engenharia reversa é muito comum em campos tão

diversos como a engenharia de software, entretenimento, automotivo, produtos de consumo, microchips, produtos químicos, eletrônicos e desenhos mecânicos. – Por exemplo, quando uma nova máquina chega ao mercado,

os fabricantes concorrentes podem comprar uma máquina e desmontá-la para saber como ela foi construída e como ela funciona.

– Na engenharia civil, pontes e projetos de construção são copiados de outras obras de sucesso no passado, por isso haverá menor chance de falha catastrófica.

– Em engenharia de software, um bom código fonte é, frequentemente, uma variação do código-fonte anterior.

Page 8: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 8

Exemplos de Engenharia Reversa• IBM-PC compatível: A IBM abriu mão da patente de sua

plataforma, deixando o caminho livre para qualquer um produzir uma maquina que fosse compatível com o IBM-PC. Assim surgiram vários clones do IBM-PC

• Tupolev Tu-4: Em 1945, durante a segunda guerra mundial, três bombardeiros americanos modelo B-29 foram forçados a aterrissar em território russo. Os soviéticos os desmontaram e estudaram. Usaram a engenharia reversa para copiar o bombardeiro nos mínimos detalhes. O resultado foi o bombardeiro Tupolev Tu-4 que voou pela primeira vez em 19 de maio de 1947.

Page 9: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 9

Engenharia Reversa• Outra razão para utilizar a engenharia reversa é a

compressão do tempo de desenvolvimento do produto. – No mercado global altamente competitivo, os fabricantes

estão constantemente buscando novas maneiras de reduzir os tempos de entrega de um novo produto ao mercado.

– Usando engenharia reversa, um produto tridimensional ou modelo pode ser rapidamente capturado em formato digital, remodelado, e exportado para prototipagem rápida e/ou fabricação de ferramental rápido.

Page 10: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 10

Engenharia Reversa• Seguem-se razões para a engenharia reversa em uma peça ou produto:

– O fabricante original do produto já não produz o produto; – Não existe documentação adequada do projeto original; – O fabricante original não existe mais, mas o cliente precisa do produto; – A documentação do projeto original foi perdida ou nunca existiu; – Algumas más características de um produto precisa ser (re)projetado para melhorias.

Por exemplo, o desgaste excessivo pode indicar onde o produto deve ser melhorado; – Para reforçar as boas características de um produto com base no uso em longo prazo

do produto; – Para analisar as características boas e ruins de produtos concorrentes; – Para explorar novas vias para melhorar o desempenho e características do produto; – Para ganhar competitividade por meio de métodos de avaliação comparativa para

compreender os produtos dos concorrentes e desenvolver produtos melhores que a concorrência;

– Os fabricantes de equipamentos originais estão pouco dispostos ou incapazes de fornecer peças de reposição, ou a demanda esta sujeita a custos inflacionados para peças de fonte única;

Page 11: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 11

Engenharia Reversa de Software• É o 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

• 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.

Page 12: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 12

Elementos da Engenharia Reversa• Nível de abstração– conforme o nível de abstração aumenta, mais

compreensíveis se tornam as informações.• Completitude do processo– refere-se ao nível de detalhes que é fornecido em cada

nível de abstração.• Interatividade– refere-se ao grau de participação do ser humano no

processo de engenharia reversa. – conforme o nível de abstração aumenta, a interatividade

deve aumentar ou a completitude será prejudicada

Page 13: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 13

Elementos da Engenharia Reversa• Direcionalidade– se a direcionalidade tem sentido único, toda

informação extraída a partir do código fonte é usada durante as atividades de manutenção.

– se a direcionalidade tem sentido duplo, a informação é usada para "alimentar" uma ferramenta de reengenharia.

Page 14: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 14

Engenharia Reversa

Page 15: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 15

Visões da Engenharia Reversa• Visão em nível-implementacional– Abstrai características da linguagem de programação e

características específicas da implementação. • Exemplos de visões em nível implementacional são informações a

respeito da sintaxe e da semântica da linguagem e informações da implementação.

• Visão em nível-estrutural– Abstrai detalhes da linguagem de programação para revelar

sua estrutura a partir de diferentes perspectivas. O resultado é uma representação explícita das dependências entre os componentes do sistema.• Exemplo: o projeto arquitetural expresso através de gráficos de

estruturas.

Page 16: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 16

Visões da Engenharia Reversa• Visão em nível-funcional• Abstrai a função de um componente, isto é, o que o

componente faz. Essa visão relaciona partes do programa às suas funções procurando revelar as relações lógicas entre elas (diferentemente das relações sintáticas ou da estruturais). – Exemplos de visões em nível funcional podem ser diagramas

de fluxo de dados e diagramas de fluxo de controle.• Visão em nível-de-domínio– Abstrai o contexto em que o sistema está operando, ou seja

o porquê do sistema ter sido desenvolvido.

Page 17: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 17

Engenharia Reversa• 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, diagramas, fluxogramas, etc.)

Page 18: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 18

Técnicas de Engenharia Reversa• Extração de informações– O primeiro trabalho que se deve fazer é coletar

informações sobre o sistema a ser estudado. As atividades da engenharia reversa se fazem sobre essas informações extraídas, mais do que sobre o próprio sistema.

– As informações podem ser extraídas de várias fontes: o código fonte, a execução, os dados (por exemplo, em banco de dados), a “documentação”, ou outras fontes.

• Análise estática do código– Ferramentas para fazer essa análise são chamadas de

“parser”.

Page 19: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 19

Técnicas de Engenharia Reversa• Trace de execução (análise dinâmica)– A análise estática pode extrair muitas informações

de um programa, mas nem todas. – A análise dinâmica consiste em executar o

programa e monitorar os valores das variáveis, quais funções são chamadas, etc.

• Dados – Os bancos de dados podem ser usados como fonte

de informação para ajudar na engenharia reversa de um sistema.

Page 20: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 20

Técnicas de Engenharia Reversa• Documentação – Chamamos de documentação tudo o que não está

sendo usado pelo computador para fazer funcionar o sistema, mas se destina aos engenheiros que usam o código: relatórios, comentários no código, diagramas da análise ou do projeto, etc.

– Como ela se destina aos seres humanos ela é de difícil de analisar automaticamente

• Reconhecimento de Clichés – Um “clichê” é um padrão que descreve uma maneira

geral de implementar um conceito de programação.

Page 21: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 21

Por que fazer Engenharia Reversa• Só para manutenção mesmo.

• Para mudança de paradigma e/ou linguagem de programação Reengenharia

Page 22: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 22

Engenharia Reversa X Manutenção• As atividades de manutenção fornecem a motivação para muitas

ferramentas de engenharia reversa. • Essa motivação é proveniente da elevada proporção de tempo e custos

despendida no entendimento e exame do software a ser mantido.• É estimado que mantenedores gastam entre 42 a 67% de seu tempo

tentando entender o software.• Nas manutenções adaptativas (adequar o software a novo ambiente) e

evolutivas (adicionar novas funcionalidades ao software), as técnicas de engenharia reversa são usadas indiretamente, através do fornecimento de visões do software, para:– localizar os componentes onde serão realizadas as mudanças e adições

necessárias, – e para auxiliar no controle da estrutura global do sistema modificado,

através da produção de documentação.

Page 23: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 23

Engenharia Reversa X Manutenção• Nas manutenções corretivas (correção de erros), as técnicas de

engenharia reversa não servem para detectar, remover ou corrigir erros, porém auxiliam indiretamente o programador na localização do componente defeituoso, através de melhorias da compreensibilidade do software.

• Para mudanças preventivas (redução de esforços em futuras mudanças), ferramentas de engenharia reversa podem fornecer um discernimento de onde e como realizar mudanças apropriadas, através da produção de visões do software.

• Os maiores benefícios de engenharia reversa serão mais reconhecidos quando manutenções futuras tiverem como apoio a documentação produzida numa manutenção anterior.

Page 24: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 24

Engenharia Reversa X Reuso• Reuso é uma atividade que se destina a identificar software reutilizável. • Envolve também a correta importação, reconfiguração e adaptação

deste software para uma nova aplicação em um sistema de computação.• O processo de reuso é descrito por meio das atividades:

Reconhecimento, Decomposição, Classificação (para povoar as bibliotecas de reuso); Seleção, Adaptação e Composição

• Técnicas de engenharia reversa disputam o papel principal no apoio a esses passos, contudo, o foco principal é nos três primeiros passos.

• Componentes candidatos a reuso podem ser mais facilmente reconhecidos, se forem convertidos para uma notação ou forma “padrão’. Mesmo que as técnicas de engenharia reversa não sejam focalizadas na identificação e composição de componentes a partir de partes reutilizáveis, ela pode ser proveitosa em completar a documentação dos novos sistemas compostos.

Page 25: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 25

Engenharia Reversa e Reengenharia

Page 26: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 26

Benefícios da Engenharia Reversa• O benefício fundamental da tecnologia de ER é

o aumento do entendimento de um sistema o que facilita a atividade de manutenção e consequentemente causa o aumento da produtividade (vantagens financeiras)

• A ER pode facilitar novos desenvolvimentos pelo exame de como sistemas similares foram construídos e assim as equipes de projetistas podem obter mais informações para as decisões a serem tomadas nos novos projetos

Page 27: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 27

Benefícios da Engenharia Reversa• Aplicar ER infringe a lei de propriedade

intelectual?– ER do próprio software é correta e legal– Quando o software envolvido é de propriedade

alheia?• 1) direito exclusivo do proprietário• 2) cópia para estudo é legal

Page 28: 2 - Engenharia de Reversa.pptx

Prof. Alessandro Cruvinel Machado de Araújo 28

Atividade• Elaborar checklist para a identificação dos

artefatos disponíveis em um software existente. – Vale consultar os checklists do capítulo 3 do livro

Code Complete.• Aplicar o checklist sobre o projeto.• Iniciar a engenharia reversa do projeto.