2 - Engenharia de Reversa.pptx
-
Upload
erivan-nascimento -
Category
Documents
-
view
224 -
download
0
Transcript of 2 - Engenharia de Reversa.pptx
Engenharia de Software
Leitura de SoftwareEngenharia Reversa
Prof. Alessandro Cruvinel Machado de Araú[email protected]
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: ...,...,...
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.
Prof. Alessandro Cruvinel Machado de Araújo 4
Software com documentação ruim• Neste caso precisaremos aplicar a técnica de
engenharia reversa.
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.
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
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.
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.
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.
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;
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.
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
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.
Prof. Alessandro Cruvinel Machado de Araújo 14
Engenharia Reversa
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.
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.
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.)
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”.
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.
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.
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
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.
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.
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.
Prof. Alessandro Cruvinel Machado de Araújo 25
Engenharia Reversa e Reengenharia
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
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
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.