SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Engenharia Reversa e
Reengenharia
Engenharia de Software
Profa. Dra. Elisa Yumi Nakagawa
1º semestre de 2016
Fases	Genéricas	do	Ciclo	de	Vida	
Engenharia
Sistemas
Requisitos Desenvolvimento
Sistema
Codificação Manutenção
Análise Projeto Testes
• Sistema porque?
• Requisitos o que?
• Desenvolvimento como?
•  Abstração: Habilidade de ignorar os aspectos de assuntos não relevantes para
o propósito em questão
•  Nível de Abstração: Cada passo no processo de desenvolvimento de software
é um refinamento do nível de abstração do software. Nos estágios iniciais do
ciclo de vida as informações possuem alto nível de abstração e nos estágios
finais baixo nível de abstração
•  Grau de Abstração: Relacionado a uma mesma atividade no ciclo de vida do
software. Informações em uma forma mais global possuem alto grau de
abstração, em uma forma mais detalhada possuem baixo grau de abstração
Sistema Requisitos Desenvolvimento
alto
alto
baixo
baixo
Grau de
Abstração
Nível de Abstração
Engenharia Progressiva x Engenharia 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.
Eng.
Progressiva
Eng.
Progressiva
Eng. Reversa
Eng. Reversa
alto baixo
Nível de Abstração
alto
baixo
Grau de
Abstração
Sistema Requisitos Desenvolvimento
Análise - o quê o sistema deve fazer.
Documento de Especificação
Documento de Arquitetura e de Projeto
Implementação - Utiliza uma linguagem de
programação
Código fonte
Projeto - Utiliza o documento de especificação
e define como o comportamento especificado
será obtido
Software Produzido
•  Código duplicado
•  Sistemas sem documentação
•  Dificuldade de manutenção
•  Erros gerando outros erros
Mas nem sempre funciona assim
• Quem poderá me ajudar ?
• O que fazer ???
• Cadê o programador ????
• O que será que ele quis
fazer aqui?????
Necessidade de Manutenção no Software
Engenharia Reversa
Reengenharia
Possível cura ....
e
Será possível ????
Na construção civil??
Sim...
E em sistemas
de software?
Engenharia Reversa
Reengenharia
Requisitos
(restrições,
objetivos,
regras do negócio)
Projeto
Implementação
Engenharia
Avante
Engenharia
Avante
Engenharia
Reversa
Engenharia
Reversa
Projeto
Recuperado
Projeto
Recuperado
Reengenharia
(Renovação)
Reestruturação
Reestruturação Reestruturação
Reengenharia
(Renovação)
Relacionamento entre os termos
Engenharia Reversa
•  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.
•  Conceito de Engenharia Reversa de Software é
similar. Porém, tradicionalmente o objetivo dessa
engenharia reversa é obter apenas um entendimento
do sistema.
Engenharia Reversa
•  Definiçã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.
Quais os documentos utilizados para realizar
engenharia reversa?
- documentação existente (manual de usuário,
manual de sistema, modelos, fluxogramas, etc.)
- código fonte
- informações de usuários e/ou analista
Engenharia	Reversa
O que fazer com essas informações?
• só para manutenção
• mesmo paradigma e mudança de linguagem
• mudança de paradigma (só modelo lógico)
• mudança de paradigma e de linguagem
Reengenharia
Como começa a engenharia reversa?
Engenharia	Reversa	X	Manutenção	
•  Atividades	de	manutenção	fornecem	a	motivação	
para	a	condução	da	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.
•  Manutenções	 adaptativas	 (adequar	 o	 software	 a	
novo	 ambiente)	 e	 perfectiva	 (adicionar	 novas	
funcionalidades	 ao	 software),	 as	 técnicas	 de	
engenharia	reversa	são	usadas	indiretamente.	
•  Engenharia	 Reversa	 fornece	 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.	
	
Engenharia	Reversa	X	Manutenção
•  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.		
Engenharia	Reversa	X	Manutenção
•  Manutenções	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.		
	
Engenharia	Reversa	X	Manutenção
•  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.	
Engenharia	Reversa	X	Manutenção
Engenharia	Reversa	X	Reúso	
•  Reúso	é	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	 reúso	 é	 descrito	 por	 meio	 das	
atividades:	 Reconhecimento,	 Decomposição,	
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.
(1) Melhore o entendimento do software
(2) Prepare ou melhore o software em si, aumentando sua
manutenção, seu reúso e sua extensão
Chikofsky e Cross definem reengenharia:
“O exame e a alteração de um sistema para reconstituí-lo
de uma nova forma, seguida pela sua implementação “
Sinônimos de Reengenharia: melhoramento, renovação,
modernização, engenharia de re-desenvolvimento,
engenharia de reúso
Reengenharia de Software é qualquer atividade que:
Processo	de	Reengenharia	de	Software	
Engenharia
avante
Reestruturação
dos dados
Reestruturação
do código
Engenharia
reversa
Análise do
inventário
Reestruturação
de documentos
Conhecimento
doUsuário
Eng. de
Software
Documentação?
Re-
Documentação
Engenharia
Reversa
SistemaLegado
(códigofonte)
+ Recuperaçãodo
Projeto
=
Reengenharia
Processo	de	Reengenharia
Passos para se realizar reengenharia
Reengenharia:
•  sem mudança de funcionalidade
•  mudança parcial de funcionalidade
•  mudança total de funcionalidade
Engenharia Reversa
Estudo das possibilidades existentes
Reengenharia:
Sem mudança de funcionalidade
Mesmo paradigma
Mudança de linguagem de programação
Sistema Existente
Modelo Lógico
Recuperado do código
fonte legado
Linguagem
Escolhida
Parte do sistema continua com a sua funcionalidade
e uma parte será alterada, mas o mesmo paradigma
será utilizado.
O que é necessário nesse caso?
Integração entre as partes.
Reengenharia:
Com mudança parcial de funcionalidade
Mudança de Paradigma em parte do sistema
Obter o modelo do sistema atual de acordo
com a nova abordagem
Integrar as duas partes.
Deve-se escolher linguagens compatíveis
Pode ocorrer que parte do sistema continue operando
na abordagem antiga e novas funções sejam inseridas
de acordo com a nova abordagem
Reengenharia:
Com mudança parcial de funcionalidade
Engenharia Avante
Métodos de
Desenvolvimento
escolha o seu!
Reengenharia:
Com mudança total de funcionalidade
Questões Econômicas de Engenharia
Reversa	
•  Benefício	fundamental	da	Engenharia	Reversa	é:	
•  aumento	 do	 entendimento	 de	 um	 sistema	 o	 que	 facilita	 a	
atividade	 de	 manutenção	 e,	 consequentemente,	 causa	 o	
aumento	da	produtividade	(vantagens	financeiras).	
•  Engenharia	Reversa	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.
Ferramental	
•  Dificuldade	de	executar	reengenharia	e	engenharia	reversa	
manualmente	
•  Existem	diversas	ferramentas	de	apoio:	
•  Engenharia	Reversa:	criação	de	diagramas	a	partir	do	código,	
reconhecimento	de	padrões	
•  Exemplos???	
•  Reengenharia:	geradores	baseados	em	transformações	
•  Exemplos???

Mais conteúdo relacionado

Semelhante a Reengenharia Reversa

Aula 1 introdução à engenharia de software1 (1)
Aula 1   introdução à engenharia de software1 (1)Aula 1   introdução à engenharia de software1 (1)
Aula 1 introdução à engenharia de software1 (1)
Tiago Vizoto
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
eros.viggiano
 
Engenharia de Software - Wikipedia
Engenharia de Software - WikipediaEngenharia de Software - Wikipedia
Engenharia de Software - Wikipedia
Robson Silva Espig
 

Semelhante a Reengenharia Reversa (20)

Fundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptxFundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptx
 
Tees Final
Tees FinalTees Final
Tees Final
 
Reuso v16 0
Reuso v16 0Reuso v16 0
Reuso v16 0
 
Qualidade de Software, Conceitos Modelos e Situação Atual
Qualidade de Software, Conceitos Modelos e Situação AtualQualidade de Software, Conceitos Modelos e Situação Atual
Qualidade de Software, Conceitos Modelos e Situação Atual
 
Aula 01 e 02 - Engenharia de Software.pdf
Aula 01 e 02 - Engenharia de Software.pdfAula 01 e 02 - Engenharia de Software.pdf
Aula 01 e 02 - Engenharia de Software.pdf
 
Aula processo de reuso de software
Aula processo de reuso de softwareAula processo de reuso de software
Aula processo de reuso de software
 
Introducao swebok
Introducao swebokIntroducao swebok
Introducao swebok
 
Rejuvenescimento Software
Rejuvenescimento SoftwareRejuvenescimento Software
Rejuvenescimento Software
 
Aula1 introducao engsw
Aula1 introducao engswAula1 introducao engsw
Aula1 introducao engsw
 
Aula 1 introdução à engenharia de software1 (1)
Aula 1   introdução à engenharia de software1 (1)Aula 1   introdução à engenharia de software1 (1)
Aula 1 introdução à engenharia de software1 (1)
 
38484931 questionario-es
38484931 questionario-es38484931 questionario-es
38484931 questionario-es
 
Aula2 processos sw
Aula2 processos swAula2 processos sw
Aula2 processos sw
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
 
Processo de Software
Processo de SoftwareProcesso de Software
Processo de Software
 
Aula1 eng software
Aula1 eng softwareAula1 eng software
Aula1 eng software
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Engenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - IntroEngenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - Intro
 
Engenharia de Software - Wikipedia
Engenharia de Software - WikipediaEngenharia de Software - Wikipedia
Engenharia de Software - Wikipedia
 
Es capítulo 2 - processos de software
Es   capítulo 2  - processos de softwareEs   capítulo 2  - processos de software
Es capítulo 2 - processos de software
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

Reengenharia Reversa

  • 1. Engenharia Reversa e Reengenharia Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2016
  • 2. Fases Genéricas do Ciclo de Vida Engenharia Sistemas Requisitos Desenvolvimento Sistema Codificação Manutenção Análise Projeto Testes • Sistema porque? • Requisitos o que? • Desenvolvimento como?
  • 3. •  Abstração: Habilidade de ignorar os aspectos de assuntos não relevantes para o propósito em questão •  Nível de Abstração: Cada passo no processo de desenvolvimento de software é um refinamento do nível de abstração do software. Nos estágios iniciais do ciclo de vida as informações possuem alto nível de abstração e nos estágios finais baixo nível de abstração •  Grau de Abstração: Relacionado a uma mesma atividade no ciclo de vida do software. Informações em uma forma mais global possuem alto grau de abstração, em uma forma mais detalhada possuem baixo grau de abstração Sistema Requisitos Desenvolvimento alto alto baixo baixo Grau de Abstração Nível de Abstração
  • 4. Engenharia Progressiva x Engenharia 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. Eng. Progressiva Eng. Progressiva Eng. Reversa Eng. Reversa alto baixo Nível de Abstração alto baixo Grau de Abstração Sistema Requisitos Desenvolvimento
  • 5. Análise - o quê o sistema deve fazer. Documento de Especificação Documento de Arquitetura e de Projeto Implementação - Utiliza uma linguagem de programação Código fonte Projeto - Utiliza o documento de especificação e define como o comportamento especificado será obtido Software Produzido
  • 6. •  Código duplicado •  Sistemas sem documentação •  Dificuldade de manutenção •  Erros gerando outros erros Mas nem sempre funciona assim
  • 7. • Quem poderá me ajudar ? • O que fazer ??? • Cadê o programador ???? • O que será que ele quis fazer aqui????? Necessidade de Manutenção no Software
  • 9. Será possível ???? Na construção civil?? Sim... E em sistemas de software?
  • 12. Engenharia Reversa •  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. •  Conceito de Engenharia Reversa de Software é similar. Porém, tradicionalmente o objetivo dessa engenharia reversa é obter apenas um entendimento do sistema.
  • 13. Engenharia Reversa •  Definiçã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.
  • 14. Quais os documentos utilizados para realizar engenharia reversa? - documentação existente (manual de usuário, manual de sistema, modelos, fluxogramas, etc.) - código fonte - informações de usuários e/ou analista Engenharia Reversa
  • 15. O que fazer com essas informações? • só para manutenção • mesmo paradigma e mudança de linguagem • mudança de paradigma (só modelo lógico) • mudança de paradigma e de linguagem Reengenharia Como começa a engenharia reversa?
  • 16. Engenharia Reversa X Manutenção •  Atividades de manutenção fornecem a motivação para a condução da 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.
  • 17. •  Manutenções adaptativas (adequar o software a novo ambiente) e perfectiva (adicionar novas funcionalidades ao software), as técnicas de engenharia reversa são usadas indiretamente. •  Engenharia Reversa fornece 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. Engenharia Reversa X Manutenção
  • 18. •  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. Engenharia Reversa X Manutenção
  • 19. •  Manutenções 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. Engenharia Reversa X Manutenção
  • 20. •  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. Engenharia Reversa X Manutenção
  • 21. Engenharia Reversa X Reúso •  Reúso é 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 reúso é descrito por meio das atividades: Reconhecimento, Decomposição, 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.
  • 22. (1) Melhore o entendimento do software (2) Prepare ou melhore o software em si, aumentando sua manutenção, seu reúso e sua extensão Chikofsky e Cross definem reengenharia: “O exame e a alteração de um sistema para reconstituí-lo de uma nova forma, seguida pela sua implementação “ Sinônimos de Reengenharia: melhoramento, renovação, modernização, engenharia de re-desenvolvimento, engenharia de reúso Reengenharia de Software é qualquer atividade que:
  • 25. Passos para se realizar reengenharia Reengenharia: •  sem mudança de funcionalidade •  mudança parcial de funcionalidade •  mudança total de funcionalidade Engenharia Reversa Estudo das possibilidades existentes
  • 26. Reengenharia: Sem mudança de funcionalidade Mesmo paradigma Mudança de linguagem de programação Sistema Existente Modelo Lógico Recuperado do código fonte legado Linguagem Escolhida
  • 27. Parte do sistema continua com a sua funcionalidade e uma parte será alterada, mas o mesmo paradigma será utilizado. O que é necessário nesse caso? Integração entre as partes. Reengenharia: Com mudança parcial de funcionalidade
  • 28. Mudança de Paradigma em parte do sistema Obter o modelo do sistema atual de acordo com a nova abordagem Integrar as duas partes. Deve-se escolher linguagens compatíveis Pode ocorrer que parte do sistema continue operando na abordagem antiga e novas funções sejam inseridas de acordo com a nova abordagem Reengenharia: Com mudança parcial de funcionalidade
  • 29. Engenharia Avante Métodos de Desenvolvimento escolha o seu! Reengenharia: Com mudança total de funcionalidade
  • 30. Questões Econômicas de Engenharia Reversa •  Benefício fundamental da Engenharia Reversa é: •  aumento do entendimento de um sistema o que facilita a atividade de manutenção e, consequentemente, causa o aumento da produtividade (vantagens financeiras). •  Engenharia Reversa 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.
  • 31. Ferramental •  Dificuldade de executar reengenharia e engenharia reversa manualmente •  Existem diversas ferramentas de apoio: •  Engenharia Reversa: criação de diagramas a partir do código, reconhecimento de padrões •  Exemplos??? •  Reengenharia: geradores baseados em transformações •  Exemplos???