Reengenhariade Software
APRESENTAÇÃOParticipantesDaniele OrtizMaurícioSpolavoriPeterson BassoRafael Berto
REENGENHARIAConceitoA Reengenharia consiste em repensar e redesenhar radicalmente os processos de negócio com o objetivo de conseguir grandes melhoras de desempenho, seja nos custos, na qualidade, no serviço ou no tempo."Encarar o amanhã pensando em usar métodos de ontem é ver a vida estagnada"James Bell
REENGENHARIAOrigemO conceito de reengenharia surgiu no início da década de 1990 em um artigo escrito por Michael Hammer para a Harvard Business Review." Está na hora de parar de seguir as trilhas das vacas. Em vez de acrescentar processos ultrapassados em hardware e software, devemos rejeitá-los e começar de novo. Devemos fazer uma "reengenharia" em nossos negócios. "Michael Hammer
REENGENHARIAMotivaçõesO sistema não atende mais as necessidades (requisitos)Sistema sem documentaçãoModernização de sistemas legadosCusto muito alto para manter o sistema legadoCódigo muito bagunçado e com muitos errosProcessos de negócio ultrapassados
REENGENHARIAIntroduçãoA Reengenharia ocorre em dois níveis: Reengenharia de processo de negócio, concentra-se nos processos de negócio para melhorar a competitividade em alguma área.Reengenharia de Software, examina os sistemas de informação com a finalidade de reestruturá-los para que tenham uma melhor qualidade.
A reengenharia de processos de negócio (BPR) muitas vezes resulta em nova funcionalidade de software, enquanto a reengenharia de software trabalha para substituir funcionalidades existentes por um software melhor, mais fácil de manter.
REENGENHARIAModelo de BPRAssim como a maioria das atividadesde engenharia, a reengenhariados processos de negócioé iterativa. 
REENGENHARIACicloAbrange uma sériede atividades.
REESTRUTURAÇÃODe DocumentosPouca documentação é a marca registrada de muitos sistemas herdados.O que fazer?Se o sistema funciona, não documenta-se nadaA documentação precisa ser atualizada, mas os recursos são limitados- Documenta-se apenas as partes que estão sofrendo modificaçõesÉ necessário redocumentar por completo- Limita-se a documentação ao mínimo essencial
ENGENHARIA REVERSAConceitoConsiste em analisar o sistema ou a ferramenta para criar uma representação dela. Objetivo é derivar o projeto ou a especificação de um sistema a partir de seu código-fonte; um novo sistema, com manutenção mais fácil. A Engenharia Reversa faz parte do processo de reengenharia, mas não é o mesmo que a Reengenharia visto que esta analisa oprojeto e cria uma representação do mesmo quefuncione exatamente como a primeira, mas quenão seja meramente uma cópia dela.
ENGENHARIA REVERSAPrimórdiosBombardeiro B-29 (Enola Gay)Processador Intel 8080Tupolev TU-4
ENGENHARIA REVERSAPorqueutilizar?Sistema  iniciado a muitos anos, com pouca documentação e sem atualização.Desenvolvedores não fazem mais parte da empresaTrechos de código criados sem nenhum padrão.Sistema implementado numa linguagem antiga (Cobol, Fortran, APL).Quando o suporte de hardware ou software se torna obsoleto.Disponibilizar novas funcionalidades.Correção de bugs.
ENGENHARIA REVERSAElementos1. Nível de Abstração: caracterizado pelo nível de detalhes durante o processo de desenvolvimento do projeto. Nível de abstração e grau de abstração são grandezas distintas. O nível de abstração diferencia os estágios do projeto e o grau de abstração está intrínseco no projeto. Quanto mais detalhado o projeto (baixo grau de abstração) e quanto mais sucinto (alto grau de abstração). 2. Completeza: refere-se ao nível de detalhes que é fornecido em cada nível de abstração e indica o quão abrangente é o processo de engenharia reversa. Quanto mais abrangente ele for, mais difícil será manter um nível de abstração alto, pois isso demandará muito trabalho.
ENGENHARIA REVERSAElementos3. 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.  4. Direcionalidade: sentido único, informação extraída do código fonte é usada durante as atividades de manutenção. Sentido duplo, a informação é usada para "alimentar" uma ferramenta de reengenharia que tentará regenerar o programa antigo.
CódigofontesujoCódigoreestruturadoProcessamentoCódigofontelimpoExtração de abstraçõesInterfaceEspecificação FinalBase de dadosRefinar e simplificarEspecificação Final
ENGENHARIA REVERSAEntendimentoDeterminar quais são os componentes básicos do sistema, como arquivos, rotinas, variáveis, diretório de determinado arquivo, onde se encontram determinadas variáveis, etc.Qual arquivo depende de outro, qual rotina depende de outra, etc.Realizar uma análise dinâmica, que consiste em executar o programa e monitorar os valores das variáveis, quais funções são chamadas, etc.Realizar análise estática para saber quais funções uma função pode chamar. Mas para saber quais ela realmente chama, precisamos da análise dinâmica, etc. 
ENGENHARIA REVERSAAplicaçõesSambaPermite que sistemas que não estão rodando o Microsoft Windows compartilhem arquivos com sistemas que estão utilizando esta plataforma.WinePermite executar aplicativos desenvolvidos para Windows no GNU/Linux. OpenOffice.orgÉ um conjunto de aplicativos OpenSource. Disponível para diferentes plataformas: incluindo Microsoft Windows, Unix, Solaris, Linux e Mac OS. Compatível com o Microsoft Office.
ENGENHARIA REVERSAAspectosLegaisNos Estados Unidos, a lei “Digital Millenium Copyright Act” aprovada em 1998, protege os direitos autorais na informática e faz restrições em relação à engenharia reversa. Só é permitido analisar para fins de compatibilidade com outros softwares e/ou hardware. Na União Européia, o “EU Copyright Directive”, de 2001, é similar ao “Digital Millenium Copyright Acts”. Não é tão restritiva.No Brasil, não existe uma lei específica sobre Engenharia Reversa, mas quando ocorre verifica-se se o objetivo. Constatado crime, a Lei de Software e de Direitos Autorais protege seus autores.
REESTRUTURAÇÃOConceitoA reestruturação de software modifica o código-fonte e/ou dados com o objetivo de torná-los mais amenos a futuras modificações. Tende a se focar nos detalhes de projeto de módulos individuais e nas estruturas de dados locais definidas nesses módulos. Se a reestruturação abrange a arquitetura de software, a reestruturação se transforma em Engenharia Avante.Etapas de Reestruturação:Reestruturação do CódigoReestruturação dos Dados
REESTRUTURAÇÃODe CódigoÉ realizada para executar um projeto que produz a mesma função que o programa original, porém com mais qualidade.Benefícios:Aumento da qualidade, devido ao código construído seguir boas práticas de design. Deixa o código mais “limpo”, facilitando o entendimento deste.Facilita as manutenções no código.Apesar de poderaliviarproblemasimediatos, relacionados com depuraçãooupequenasmodificações, nãoconstituireengenharia.
REESTRUTURAÇÃODe DadosAntes de ser realizada a reestruturação de dados é feita a análise do código-fonte, também chamada de análise de dados.Quando a estrutura de dados é fraca, os dados passam por reengenharia, começa então o reprojeto dos dados.As modificaçõesnos dados resultarãotantoemmodificaçõesarquiteturaisquanto de código.
REESTRUTURAÇÃOFormas de Reprojeto Padronização de registro de dadosEsclarece definições de dados para obter consistência entre os nomes dos itens de dados, ou entre os formatos de registro físico dentro da estrutura de dados existentes. Racionalização dos nomes dos dadosGarante que todas as convenções de denominação de dados atendam aos padrões locais e que os sinônimos sejam eliminados a medida que os dados fluam através do sistema.
REESTRUTURAÇÃOFerramentasDMS Software ReengineeringToolkitReestruturação para COBOL,C/C++, Java, FORTRAN 90 e VHDL.FORESYSReestruturação para FORTRAN.FunctionEncapsulationToolReestruturação de programas antigos em C para C++. plusFORTReestruturação para FORTRAN e de FORTRAN para C.
ENGENHARIA AVANTEMelhoriasComo acomodar alterações exigidas pelo usuário com milhares de linhas de código fonte sem nenhuma documentação?Podemos batalhar modificação por modificaçãoPodemos tentar entender o funcionamento interno paratornar as modificações mais eficazesPodemos reprojetar, recodificar e testar a funcionalidadeque exige modificaçãoPodemos reprojetar, recodificar e testar o softwareinteiro, afim de facilitar melhorias futurasNormalmente é usada a primeira opção, mas isso não querdizer que seja a melhor opção.
ENGENHARIA AVANTEManter x RedesenvolverDevemos considerar os seguintes pontos:Custo para manter o código-fonte atual é de 20 a 40 vezes do que desenvolver um novo códigoReprojetar a arquitetura do software pode facilitar manutenções futurasO fato de existir um protótipo do software, pode aumentar a produtividade do desenvolvimentoUsuário tem mais experiência, e pode sugerir melhorias em funcionalidadesFerramentas automatizadas podem facilitar o processoDocumentação passará a existir
ENGENHARIA AVANTEO que é issoafinal?O processo de engenharia avante aplica conceitos e métodos de engenharia de software para recriar uma aplicação existente. Na maioria dos casos, a engenharia avante não cria simplesmente um equivalente moderno de um programa antigo.A idéia principal é que o programa redesenvolvido amplie a capacidade da aplicação antiga.
ENGENHARIA AVANTEPara…ArquiteturaCliente / ServidorArquiteturaOrientada a ObjetosInterface com o Usuário
ENGENHARIA AVANTEArquiteturaCliente / ServidorÉ importante notar que a migração de um computador de grande porte para cliente/servidor exige reengenharia, tanto do negócio quanto de software.Em alguns casos, a migração para uma arquitetura cliente/servidor deve ser abordada não como reengenharia, mas como um esforço de desenvolvimento novo. A reengenharia entra em cena apenas quando a funcionalidade específica do sistema antigo precisa ser integrada na nova arquitetura.Passos da engenharia para arquiteturas Cliente/Servidor:Engenharia reversaPreparação/Adaptação da infra-estruturaMigração do Banco de Dados para o servidorAdaptação do software para rodar no cliente
ENGENHARIA AVANTEArquiteturaOrientada a ObjetosPodemos afirmar que é uma das arquiteturas mais utilizadas atualmente.Na maioria dos casos, migrar para essa arquitetura ocasiona a reescrita de  muito código, quando não todo.Passos da engenharia para arquiteturas Orientadas a Objetos:Engenharia reversaCriação de modelos de dados, funcionais e comportamentaisCriação de casos de usoModelagem de Classes
ENGENHARIA AVANTEInterfaces com o UsuárioPassos da engenharia para Interfaces com o Usuário:Entender as tarefas realizadas e os dados importantes apresentadosRemodelar o comportamento, sem ser radicalAplicar melhorias
ENGENHARIA AVANTECustox BenefícioAnálise custo/benefício por Sneed:P1 = custo de manutenção anual corrente de uma aplicaçãoP2 = custo de operação anual corrente para uma aplicaçãoP3 = valor de negócio anual corrente de uma aplicaçãoP4 = custo de manutenção anual previsto após reengenhariaP5 = custo de operação anual previsto após reengenhariaP6 = valor de negócio anual previsto após reengenhariaP7 = custo estimado de reengenhariaP8 = período estimado para reengenhariaP9 = fator de risco de reengenharia ( P9 = 1,0 é nominal)L = esperança de vida do sistema
ENGENHARIA AVANTECustox BenefícioCusto com aplicação atual:Cmanut = [P3 – (P1 + P2)]xLCusto com reengenharia:Creeng = [P6 – (P4 + P5)X(L – P8) – (P7 x P9)] Custo/Benefício = Creeng - Cmanut
REENGENHARIAReferênciasEngenharia de Software 6ª Edição – Roger S Pressmanhttp://isosoftware.blogspot.com/2009/10/engenharia-reversa-de-software.html Engenharia Reversa – www.youtube.com.brEngenharia Reversa - Proj. Assis. por Comp.  - www.youtube.com.brhttp://dinamico.orgfree.com/softwares/desafios.htmlhttp://www.dcc.ufrj.br/~schneide/es/2001/1/g18/Engenharia%20Reversa.htmhttp://www.slideshare.net/adorepump/engenharia-reversa-e-reengenharia-software-presentationhttp://www.dcc.ufrj.br/~schneide/es/2002/1/g13/trabalho.htmhttp://www.dcc.ufrj.br/~schneide/es/2001/1/g19/atividades.htmlhttp://projetos.inf.ufsc.br/arquivos_projetos/projeto_218/TCC-PauloCesarAllebrandt.pdf

Reengenharia de Software

  • 1.
  • 2.
  • 3.
    REENGENHARIAConceitoA Reengenharia consisteem repensar e redesenhar radicalmente os processos de negócio com o objetivo de conseguir grandes melhoras de desempenho, seja nos custos, na qualidade, no serviço ou no tempo."Encarar o amanhã pensando em usar métodos de ontem é ver a vida estagnada"James Bell
  • 4.
    REENGENHARIAOrigemO conceito dereengenharia surgiu no início da década de 1990 em um artigo escrito por Michael Hammer para a Harvard Business Review." Está na hora de parar de seguir as trilhas das vacas. Em vez de acrescentar processos ultrapassados em hardware e software, devemos rejeitá-los e começar de novo. Devemos fazer uma "reengenharia" em nossos negócios. "Michael Hammer
  • 5.
    REENGENHARIAMotivaçõesO sistema nãoatende mais as necessidades (requisitos)Sistema sem documentaçãoModernização de sistemas legadosCusto muito alto para manter o sistema legadoCódigo muito bagunçado e com muitos errosProcessos de negócio ultrapassados
  • 6.
    REENGENHARIAIntroduçãoA Reengenharia ocorreem dois níveis: Reengenharia de processo de negócio, concentra-se nos processos de negócio para melhorar a competitividade em alguma área.Reengenharia de Software, examina os sistemas de informação com a finalidade de reestruturá-los para que tenham uma melhor qualidade.
  • 7.
    A reengenharia deprocessos de negócio (BPR) muitas vezes resulta em nova funcionalidade de software, enquanto a reengenharia de software trabalha para substituir funcionalidades existentes por um software melhor, mais fácil de manter.
  • 8.
    REENGENHARIAModelo de BPRAssimcomo a maioria das atividadesde engenharia, a reengenhariados processos de negócioé iterativa. 
  • 9.
  • 10.
    REESTRUTURAÇÃODe DocumentosPouca documentaçãoé a marca registrada de muitos sistemas herdados.O que fazer?Se o sistema funciona, não documenta-se nadaA documentação precisa ser atualizada, mas os recursos são limitados- Documenta-se apenas as partes que estão sofrendo modificaçõesÉ necessário redocumentar por completo- Limita-se a documentação ao mínimo essencial
  • 11.
    ENGENHARIA REVERSAConceitoConsiste emanalisar o sistema ou a ferramenta para criar uma representação dela. Objetivo é derivar o projeto ou a especificação de um sistema a partir de seu código-fonte; um novo sistema, com manutenção mais fácil. A Engenharia Reversa faz parte do processo de reengenharia, mas não é o mesmo que a Reengenharia visto que esta analisa oprojeto e cria uma representação do mesmo quefuncione exatamente como a primeira, mas quenão seja meramente uma cópia dela.
  • 13.
    ENGENHARIA REVERSAPrimórdiosBombardeiro B-29(Enola Gay)Processador Intel 8080Tupolev TU-4
  • 14.
    ENGENHARIA REVERSAPorqueutilizar?Sistema  iniciadoa muitos anos, com pouca documentação e sem atualização.Desenvolvedores não fazem mais parte da empresaTrechos de código criados sem nenhum padrão.Sistema implementado numa linguagem antiga (Cobol, Fortran, APL).Quando o suporte de hardware ou software se torna obsoleto.Disponibilizar novas funcionalidades.Correção de bugs.
  • 15.
    ENGENHARIA REVERSAElementos1. Nívelde Abstração: caracterizado pelo nível de detalhes durante o processo de desenvolvimento do projeto. Nível de abstração e grau de abstração são grandezas distintas. O nível de abstração diferencia os estágios do projeto e o grau de abstração está intrínseco no projeto. Quanto mais detalhado o projeto (baixo grau de abstração) e quanto mais sucinto (alto grau de abstração). 2. Completeza: refere-se ao nível de detalhes que é fornecido em cada nível de abstração e indica o quão abrangente é o processo de engenharia reversa. Quanto mais abrangente ele for, mais difícil será manter um nível de abstração alto, pois isso demandará muito trabalho.
  • 16.
    ENGENHARIA REVERSAElementos3. Interatividade: refere-se aograu 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.  4. Direcionalidade: sentido único, informação extraída do código fonte é usada durante as atividades de manutenção. Sentido duplo, a informação é usada para "alimentar" uma ferramenta de reengenharia que tentará regenerar o programa antigo.
  • 17.
  • 18.
    ENGENHARIA REVERSAEntendimentoDeterminar quaissão os componentes básicos do sistema, como arquivos, rotinas, variáveis, diretório de determinado arquivo, onde se encontram determinadas variáveis, etc.Qual arquivo depende de outro, qual rotina depende de outra, etc.Realizar uma análise dinâmica, que consiste em executar o programa e monitorar os valores das variáveis, quais funções são chamadas, etc.Realizar análise estática para saber quais funções uma função pode chamar. Mas para saber quais ela realmente chama, precisamos da análise dinâmica, etc. 
  • 19.
    ENGENHARIA REVERSAAplicaçõesSambaPermite quesistemas que não estão rodando o Microsoft Windows compartilhem arquivos com sistemas que estão utilizando esta plataforma.WinePermite executar aplicativos desenvolvidos para Windows no GNU/Linux. OpenOffice.orgÉ um conjunto de aplicativos OpenSource. Disponível para diferentes plataformas: incluindo Microsoft Windows, Unix, Solaris, Linux e Mac OS. Compatível com o Microsoft Office.
  • 20.
    ENGENHARIA REVERSAAspectosLegaisNos EstadosUnidos, a lei “Digital Millenium Copyright Act” aprovada em 1998, protege os direitos autorais na informática e faz restrições em relação à engenharia reversa. Só é permitido analisar para fins de compatibilidade com outros softwares e/ou hardware. Na União Européia, o “EU Copyright Directive”, de 2001, é similar ao “Digital Millenium Copyright Acts”. Não é tão restritiva.No Brasil, não existe uma lei específica sobre Engenharia Reversa, mas quando ocorre verifica-se se o objetivo. Constatado crime, a Lei de Software e de Direitos Autorais protege seus autores.
  • 21.
    REESTRUTURAÇÃOConceitoA reestruturação desoftware modifica o código-fonte e/ou dados com o objetivo de torná-los mais amenos a futuras modificações. Tende a se focar nos detalhes de projeto de módulos individuais e nas estruturas de dados locais definidas nesses módulos. Se a reestruturação abrange a arquitetura de software, a reestruturação se transforma em Engenharia Avante.Etapas de Reestruturação:Reestruturação do CódigoReestruturação dos Dados
  • 22.
    REESTRUTURAÇÃODe CódigoÉ realizadapara executar um projeto que produz a mesma função que o programa original, porém com mais qualidade.Benefícios:Aumento da qualidade, devido ao código construído seguir boas práticas de design. Deixa o código mais “limpo”, facilitando o entendimento deste.Facilita as manutenções no código.Apesar de poderaliviarproblemasimediatos, relacionados com depuraçãooupequenasmodificações, nãoconstituireengenharia.
  • 24.
    REESTRUTURAÇÃODe DadosAntes deser realizada a reestruturação de dados é feita a análise do código-fonte, também chamada de análise de dados.Quando a estrutura de dados é fraca, os dados passam por reengenharia, começa então o reprojeto dos dados.As modificaçõesnos dados resultarãotantoemmodificaçõesarquiteturaisquanto de código.
  • 25.
    REESTRUTURAÇÃOFormas de ReprojetoPadronização de registro de dadosEsclarece definições de dados para obter consistência entre os nomes dos itens de dados, ou entre os formatos de registro físico dentro da estrutura de dados existentes. Racionalização dos nomes dos dadosGarante que todas as convenções de denominação de dados atendam aos padrões locais e que os sinônimos sejam eliminados a medida que os dados fluam através do sistema.
  • 26.
    REESTRUTURAÇÃOFerramentasDMS Software ReengineeringToolkitReestruturaçãopara COBOL,C/C++, Java, FORTRAN 90 e VHDL.FORESYSReestruturação para FORTRAN.FunctionEncapsulationToolReestruturação de programas antigos em C para C++. plusFORTReestruturação para FORTRAN e de FORTRAN para C.
  • 27.
    ENGENHARIA AVANTEMelhoriasComo acomodaralterações exigidas pelo usuário com milhares de linhas de código fonte sem nenhuma documentação?Podemos batalhar modificação por modificaçãoPodemos tentar entender o funcionamento interno paratornar as modificações mais eficazesPodemos reprojetar, recodificar e testar a funcionalidadeque exige modificaçãoPodemos reprojetar, recodificar e testar o softwareinteiro, afim de facilitar melhorias futurasNormalmente é usada a primeira opção, mas isso não querdizer que seja a melhor opção.
  • 29.
    ENGENHARIA AVANTEManter xRedesenvolverDevemos considerar os seguintes pontos:Custo para manter o código-fonte atual é de 20 a 40 vezes do que desenvolver um novo códigoReprojetar a arquitetura do software pode facilitar manutenções futurasO fato de existir um protótipo do software, pode aumentar a produtividade do desenvolvimentoUsuário tem mais experiência, e pode sugerir melhorias em funcionalidadesFerramentas automatizadas podem facilitar o processoDocumentação passará a existir
  • 30.
    ENGENHARIA AVANTEO queé issoafinal?O processo de engenharia avante aplica conceitos e métodos de engenharia de software para recriar uma aplicação existente. Na maioria dos casos, a engenharia avante não cria simplesmente um equivalente moderno de um programa antigo.A idéia principal é que o programa redesenvolvido amplie a capacidade da aplicação antiga.
  • 31.
    ENGENHARIA AVANTEPara…ArquiteturaCliente /ServidorArquiteturaOrientada a ObjetosInterface com o Usuário
  • 32.
    ENGENHARIA AVANTEArquiteturaCliente /ServidorÉ importante notar que a migração de um computador de grande porte para cliente/servidor exige reengenharia, tanto do negócio quanto de software.Em alguns casos, a migração para uma arquitetura cliente/servidor deve ser abordada não como reengenharia, mas como um esforço de desenvolvimento novo. A reengenharia entra em cena apenas quando a funcionalidade específica do sistema antigo precisa ser integrada na nova arquitetura.Passos da engenharia para arquiteturas Cliente/Servidor:Engenharia reversaPreparação/Adaptação da infra-estruturaMigração do Banco de Dados para o servidorAdaptação do software para rodar no cliente
  • 33.
    ENGENHARIA AVANTEArquiteturaOrientada aObjetosPodemos afirmar que é uma das arquiteturas mais utilizadas atualmente.Na maioria dos casos, migrar para essa arquitetura ocasiona a reescrita de muito código, quando não todo.Passos da engenharia para arquiteturas Orientadas a Objetos:Engenharia reversaCriação de modelos de dados, funcionais e comportamentaisCriação de casos de usoModelagem de Classes
  • 34.
    ENGENHARIA AVANTEInterfaces como UsuárioPassos da engenharia para Interfaces com o Usuário:Entender as tarefas realizadas e os dados importantes apresentadosRemodelar o comportamento, sem ser radicalAplicar melhorias
  • 36.
    ENGENHARIA AVANTECustox BenefícioAnálisecusto/benefício por Sneed:P1 = custo de manutenção anual corrente de uma aplicaçãoP2 = custo de operação anual corrente para uma aplicaçãoP3 = valor de negócio anual corrente de uma aplicaçãoP4 = custo de manutenção anual previsto após reengenhariaP5 = custo de operação anual previsto após reengenhariaP6 = valor de negócio anual previsto após reengenhariaP7 = custo estimado de reengenhariaP8 = período estimado para reengenhariaP9 = fator de risco de reengenharia ( P9 = 1,0 é nominal)L = esperança de vida do sistema
  • 37.
    ENGENHARIA AVANTECustox BenefícioCustocom aplicação atual:Cmanut = [P3 – (P1 + P2)]xLCusto com reengenharia:Creeng = [P6 – (P4 + P5)X(L – P8) – (P7 x P9)] Custo/Benefício = Creeng - Cmanut
  • 39.
    REENGENHARIAReferênciasEngenharia de Software6ª Edição – Roger S Pressmanhttp://isosoftware.blogspot.com/2009/10/engenharia-reversa-de-software.html Engenharia Reversa – www.youtube.com.brEngenharia Reversa - Proj. Assis. por Comp.  - www.youtube.com.brhttp://dinamico.orgfree.com/softwares/desafios.htmlhttp://www.dcc.ufrj.br/~schneide/es/2001/1/g18/Engenharia%20Reversa.htmhttp://www.slideshare.net/adorepump/engenharia-reversa-e-reengenharia-software-presentationhttp://www.dcc.ufrj.br/~schneide/es/2002/1/g13/trabalho.htmhttp://www.dcc.ufrj.br/~schneide/es/2001/1/g19/atividades.htmlhttp://projetos.inf.ufsc.br/arquivos_projetos/projeto_218/TCC-PauloCesarAllebrandt.pdf