Você está na página 1de 28

Engenharia de Software

Leitura de Software
Engenharia Reversa
Prof. Alessandro Cruvinel Machado de
Arajo
alessandro@inf.ufg.br

Desenvolvimento de
Software

O desenvolvimento de software acontece


atravs da execuo de um conjunto de etapas
em determinada ordem.
Durante o processo de construo uma srie de
artefatos so produzidos.
Os principais so: ...,...,...
Prof. Alessandro Cruvinel Machado de Arajo

Leitura de Software
Para iniciarmos a leitura de um
software existente precisamos
identificar os artefatos que foram
construdos durante o seu
desenvolvimento.
Uma software com documentao
ruim provavelmente ter somente o
cdigo fonte disponvel.

Prof. Alessandro Cruvinel Machado de Arajo

Software com
documentao ruim
Neste caso precisaremos aplicar a
tcnica de engenharia reversa.

Prof. Alessandro Cruvinel Machado de Arajo

Engenharia e Engenharia
Reversa
Engenharia a profisso envolvida na concepo,
fabricao, construo e manuteno de produtos,
sistemas e estruturas.
Em um nvel superior, existem dois tipos de
engenharia: engenharia progressiva e engenharia
reversa.
Engenharia progressiva o processo tradicional de
se mover de abstraes de alto nvel e projetos
lgicos para a implementao fsica de um sistema.
Engenharia reversa o processo de duplicao de
um componente existente, subconjunto, ou produto,
sem a ajuda de desenhos, documentao ou de
modelos.
Prof. Alessandro Cruvinel Machado de Arajo

Engenharia Reversa
A engenharia reversa pode ser vista como o processo de
anlise de um sistema para:
Identificar no sistema seus componentes e suas inter-relaes
Criar representaes do sistema em outro formulrio ou um
nvel maior de abstrao
Criar a representao fsica do sistema

Prof. Alessandro Cruvinel Machado de Arajo

Engenharia Reversa
A engenharia reversa muito comum em campos
to diversos como a engenharia de software,
entretenimento, automotivo, produtos de consumo,
microchips, produtos qumicos, eletrnicos e
desenhos mecnicos.
Por exemplo, quando uma nova mquina chega ao
mercado, os fabricantes concorrentes podem comprar
uma mquina e desmont-la para saber como ela foi
construda e como ela funciona.
Na engenharia civil, pontes e projetos de construo so
copiados de outras obras de sucesso no passado, por
isso haver menor chance de falha catastrfica.
Em engenharia de software, um bom cdigo fonte ,
frequentemente, uma variao do cdigo-fonte anterior.
Prof. Alessandro Cruvinel Machado de Arajo

Exemplos de Engenharia
Reversa
IBM-PC compatvel: A IBM abriu mo da patente de
sua plataforma, deixando o caminho livre para
qualquer um produzir uma maquina que fosse
compatvel com o IBM-PC. Assim surgiram vrios
clones do IBM-PC
Tupolev Tu-4: Em 1945, durante a segunda guerra
mundial, trs bombardeiros americanos modelo B29 foram forados a aterrissar em territrio russo.
Os soviticos os desmontaram e estudaram.
Usaram a engenharia reversa para copiar o
bombardeiro nos mnimos 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 Arajo

Engenharia Reversa
Outra razo para utilizar a engenharia
reversa a compresso do tempo de
desenvolvimento do produto.
No mercado global altamente competitivo, os
fabricantes esto 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
rpida e/ou fabricao de ferramental rpido.
Prof. Alessandro Cruvinel Machado de Arajo

Engenharia Reversa
Seguem-se razes para a engenharia reversa em uma pea ou produto:
O fabricante original do produto j no produz o produto;
No existe documentao adequada do projeto original;
O fabricante original no existe mais, mas o cliente precisa do produto;
A documentao do projeto original foi perdida ou nunca existiu;
Algumas ms caractersticas de um produto precisa ser (re)projetado para
melhorias. Por exemplo, o desgaste excessivo pode indicar onde o produto deve
ser melhorado;
Para reforar as boas caractersticas de um produto com base no uso em longo
prazo do produto;
Para analisar as caractersticas boas e ruins de produtos concorrentes;
Para explorar novas vias para melhorar o desempenho e caractersticas do
produto;
Para ganhar competitividade por meio de mtodos de avaliao comparativa
para compreender os produtos dos concorrentes e desenvolver produtos
melhores que a concorrncia;
Os fabricantes de equipamentos originais esto pouco dispostos ou incapazes de
fornecer peas de reposio, ou a demanda esta sujeita a custos inflacionados
para peas de fonte nica;
Prof. Alessandro Cruvinel Machado de Arajo

10

Engenharia Reversa de
Software
o processo de exame e compreenso do
software existente, para recapturar ou
recriar o projeto e decifrar os requisitos
atualmente implementados pelo sistema,
apresentando-os em um nvel ou grau mais
alto de abstrao
Por meio da engenharia reversa um software
pode ser visualizado em diferentes nveis de
abstrao.
Cada VISUALIZAO abstrai caractersticas
prprias da fase do ciclo de vida correspondente
abstrao.
Prof. Alessandro Cruvinel Machado de Arajo

11

Elementos da Engenharia
Reversa
Nvel de abstrao
conforme o nvel de abstrao aumenta, mais
compreensveis se tornam as informaes.

Completitude do processo
refere-se ao nvel de detalhes que fornecido
em cada nvel de abstrao.

Interatividade
refere-se ao grau de participao do ser humano
no processo de engenharia reversa.
conforme o nvel de abstrao aumenta, a
interatividade deve aumentar ou a completitude
ser prejudicada
Prof. Alessandro Cruvinel Machado de Arajo

12

Elementos da Engenharia
Reversa
Direcionalidade
se a direcionalidade tem sentido nico,
toda informao extrada a partir do
cdigo fonte usada durante as
atividades de manuteno.
se a direcionalidade tem sentido duplo,
a informao usada para "alimentar"
uma ferramenta de reengenharia.

Prof. Alessandro Cruvinel Machado de Arajo

13

Engenharia Reversa

Prof. Alessandro Cruvinel Machado de Arajo

14

Vises da Engenharia
Reversa
Viso em nvel-implementacional
Abstrai caractersticas da linguagem de programao
e caractersticas especficas da implementao.
Exemplos de vises em nvel implementacional so
informaes a respeito da sintaxe e da semntica da
linguagem e informaes da implementao.

Viso em nvel-estrutural
Abstrai detalhes da linguagem de programao para
revelar sua estrutura a partir de diferentes
perspectivas. O resultado uma representao
explcita das dependncias entre os componentes do
sistema.
Exemplo: o projeto arquitetural expresso atravs de grficos
de estruturas.
Prof. Alessandro Cruvinel Machado de Arajo

15

Vises da Engenharia
Reversa
Viso em nvel-funcional
Abstrai a funo de um componente, isto , o
que o componente faz. Essa viso relaciona
partes do programa s suas funes procurando
revelar as relaes lgicas entre elas
(diferentemente das relaes sintticas ou da
estruturais).
Exemplos de vises em nvel funcional podem ser
diagramas de fluxo de dados e diagramas de fluxo de
controle.

Viso em nvel-de-domnio
Abstrai o contexto em que o sistema est operando,
ou seja o porqu do sistema ter sido desenvolvido.
Prof. Alessandro Cruvinel Machado de Arajo

16

Engenharia Reversa
Quais os documentos utilizados para
realizar engenharia reversa ?
cdigo fonte
informaes de usurios e/ou analista
documentao existente (manual de
usurio, manual de sistema, diagramas,
fluxogramas, etc.)

Prof. Alessandro Cruvinel Machado de Arajo

17

Tcnicas de Engenharia
Reversa
Extrao de informaes
O primeiro trabalho que se deve fazer coletar
informaes sobre o sistema a ser estudado. As
atividades da engenharia reversa se fazem sobre
essas informaes extradas, mais do que sobre o
prprio sistema.
As informaes podem ser extradas de vrias
fontes: o cdigo fonte, a execuo, os dados (por
exemplo, em banco de dados), a documentao,
ou outras fontes.

Anlise esttica do cdigo


Ferramentas para fazer essa anlise so chamadas
de parser.
Prof. Alessandro Cruvinel Machado de Arajo

18

Tcnicas de Engenharia
Reversa
Trace de execuo (anlise dinmica)
A anlise esttica pode extrair muitas
informaes de um programa, mas nem
todas.
A anlise dinmica consiste em executar o
programa e monitorar os valores das
variveis, quais funes so chamadas, etc.

Dados
Os bancos de dados podem ser usados
como fonte de informao para ajudar na
engenharia reversa de um sistema.
Prof. Alessandro Cruvinel Machado de Arajo

19

Tcnicas de Engenharia
Reversa
Documentao
Chamamos de documentao tudo o que no est
sendo usado pelo computador para fazer funcionar
o sistema, mas se destina aos engenheiros que
usam o cdigo: relatrios, comentrios no cdigo,
diagramas da anlise ou do projeto, etc.
Como ela se destina aos seres humanos ela de
difcil de analisar automaticamente

Reconhecimento de Clichs
Um clich um padro que descreve uma
maneira geral de implementar um conceito de
programao.
Prof. Alessandro Cruvinel Machado de Arajo

20

Por que fazer Engenharia


Reversa
S para manuteno mesmo.
Para mudana de paradigma e/ou
linguagem de programao

Reengenharia

Prof. Alessandro Cruvinel Machado de Arajo

21

Engenharia Reversa X
Manuteno
As atividades de manuteno fornecem a motivao para
muitas ferramentas de engenharia reversa.
Essa motivao proveniente da elevada proporo 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 manutenes adaptativas (adequar o software a novo
ambiente) e evolutivas (adicionar novas funcionalidades ao
software), as tcnicas de engenharia reversa so usadas
indiretamente, atravs do fornecimento de vises do software,
para:
localizar os componentes onde sero realizadas as mudanas e
adies necessrias,
e para auxiliar no controle da estrutura global do sistema modificado,
atravs da produo de documentao.
Prof. Alessandro Cruvinel Machado de Arajo

22

Engenharia Reversa X
Manuteno
Nas manutenes corretivas (correo de erros), as
tcnicas de engenharia reversa no servem para detectar,
remover ou corrigir erros, porm auxiliam indiretamente o
programador na localizao do componente defeituoso,
atravs de melhorias da compreensibilidade do software.
Para mudanas preventivas (reduo de esforos em
futuras mudanas), ferramentas de engenharia reversa
podem fornecer um discernimento de onde e como
realizar mudanas apropriadas, atravs da produo de
vises do software.
Os maiores benefcios de engenharia reversa sero mais
reconhecidos quando manutenes futuras tiverem como
apoio a documentao produzida numa manuteno
anterior.
Prof. Alessandro Cruvinel Machado de Arajo

23

Engenharia Reversa X
Reuso
Reuso uma atividade que se destina a identificar software
reutilizvel.
Envolve tambm a correta importao, reconfigurao e adaptao
deste software para uma nova aplicao em um sistema de
computao.
O processo de reuso descrito por meio das atividades:
Reconhecimento, Decomposio, Classificao (para povoar as
bibliotecas de reuso); Seleo, Adaptao e Composio
Tcnicas de engenharia reversa disputam o papel principal no apoio
a esses passos, contudo, o foco principal nos trs primeiros
passos.
Componentes candidatos a reuso podem ser mais facilmente
reconhecidos, se forem convertidos para uma notao ou forma
padro. Mesmo que as tcnicas de engenharia reversa no sejam
focalizadas na identificao e composio de componentes a partir
de partes reutilizveis, ela pode ser proveitosa em completar a
documentao dos novos sistemas compostos.
Prof. Alessandro Cruvinel Machado de Arajo

24

Engenharia Reversa e Reengenharia

Prof. Alessandro Cruvinel Machado de Arajo

25

Benefcios da Engenharia
Reversa
O benefcio fundamental da tecnologia de ER
o aumento do entendimento de um sistema
o que facilita a atividade de manuteno e
consequentemente causa o aumento da
produtividade (vantagens financeiras)
A ER pode facilitar novos desenvolvimentos
pelo exame de como sistemas similares
foram construdos e assim as equipes de
projetistas podem obter mais informaes
para as decises a serem tomadas nos novos
projetos
Prof. Alessandro Cruvinel Machado de Arajo

26

Benefcios da Engenharia
Reversa
Aplicar ER infringe a lei de
propriedade intelectual?
ER do prprio software correta e legal
Quando o software envolvido de
propriedade alheia?
1) direito exclusivo do proprietrio
2) cpia para estudo legal

Prof. Alessandro Cruvinel Machado de Arajo

27

Atividade
Elaborar checklist para a
identificao dos artefatos
disponveis em um software
existente.
Vale consultar os checklists do captulo
3 do livro Code Complete.

Aplicar o checklist sobre o projeto.


Iniciar a engenharia reversa do
projeto.
Prof. Alessandro Cruvinel Machado de Arajo

28