Engenharia Reversa e Reengenharia Software   Engenharia de Software Prof. Rodrigo Manoel Ricardo Vieira Edilson M Bortoletto Gabriel M Guerra Juliano Hideo
A manutenção software está cercada de dificuldades, sendo q as soluções não acompanham essa evolução. O código fonte e documentação mal elaborada, além da falta de compreensão do sistema são problemas constantes. A partir do momento em que um sistema começa a ser utilizado, ele entra em um estado contínuo de mudança. Mesmo que tenha sido construído aplicando as melhores técnicas de projeto e codificação existentes, os sistemas vão se tornando obsoletos em vista das novas tecnologias que são disponibilizadas.  Introdução
O que é Reengenharia de Software   Primeiramente devemos considerar três conceitos dependentes: a existência de um processo de desenvolvimento de software, a presença de um sistema a ser analisado e a identificação de níveis de abstração.
Figura 1‑1 Relacionamentos no Ciclo de Desenvolvimento de Software.
Engenharia Reversa Definições     O processo inverso à 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, é conhecido como engenharia reversa.
Software visualizado de diferentes maneiras Visão a nível implementacional: caracteristicas da linguagem; Visão a nível estrutural: detalhes da linguagem Visão a nível funcional: função de um componente Visão a nível domínio: contexto de operação do sistema Visões do Software
A representação extraída do código pode diferir de uma representação similar Visões do Software
Visões do Software
Visões do Software As vezes é nescessário acrescentar: Informações do código Informações provenientes de conhecimento humano
Categorias As categorias são divididas em: Visualização do código Entendimento do programa
Visualização do código Fase de redocumentação Representação a partir do código fonte Inteção de recuperar documentação Visualização do código, não transcende a visão em nível estrutural
Entendimento do Programa Recuperação do projeto: a partir da compbinação entre: Código Documentação existente  Experiências pessoais Conhecimentos gerais sobre o problema e o domínio de aplicação
Entendimento do Programa Um completo entendimento de programa busca reconstruir não somente a função do sistema, mas também o processo pelo qual o sistema foi desenvolvido.  A categoria de entendimento de programa é a forma mais crítica de engenharia reversa,  pois  tenta aproximar-se do raciocínio humano na busca do entendimento.
Entendimento do Programa
Reengenharia Definições: Chiskofsky (1990) – alteração de um sistema  de software; Wander (1992) – melhoramento do sistema, sem alterações de suas funções; Premerlani e Blaha (1994) – reduzir custos de manutenção e melhoria na flexibilidade do software; Pressman (1995) – reconstrução do sistema preservando as funções existentes, ao mesmo tempo que se adiciona novas funções;
Objetivo Construir um sistema novo com maior facilidade de manutenção e a engenharia reversa é usada como parte do processo re reengenharia, pois fornece o atendimento do sistema a ser reconstruido.
Categorias Reengenharia de Processos Administrativos Reengenharia de Processos Produtivos Reengenharia de Sistemas de Software ou Produtos
O Porque da Reengenharia Necessidade de melhoria nos serviços e produtos oferecidos; Compressão na margem de lucro; Redução do clico de vida dos produtos; Explosão tecnológica; Desgaste de Software
Software Legado Software antigos, onde nenhuma pessoa que participou da sua elaboração esta mais na equipe Falta de Documentação Desestruturação e dificuldade de entendimento do código, muitas vezes porque o software foi desenvolvido antes da introdução dos métodos de programação estruturada; Programadores que não participaram do desenvolvimento de um produto de software sentem dificuldade em entender e mapear a funcionalidade para o código fonte; Documentação desatualizada, não auxiliando em nada a equipe de manutenção; Dificuldade de predizer as conseqüências de efeitos colaterais; Dificuldade de administrar múltiplas alterações concorrentes.
Migrar software de plataformas centralizadas para ambientes distribuído Emprego da Reengenharia A programação orientada a objetos tem muitas vantagens sobre  a programação procedimental, Sistemas flexíveis, adaptáveis e extensíveis. Possui uma coleção rica de  mecanismos composicionais para formação de classes, instanciação de  objetos, propriedades de heran₤a, polimorfismo e ocultamento de informa₤ões Reengenheriar consome tempo e dinheiro. Pode-se tornar uma  atividade que dura meses ou alguns anos.
Como Realizar a Reengenharia Constituído de duas fases distintas “ Desmontado” -  visando seu entendimento Reconstruído -  na forma desejada Reengenharia = Engenharia Reversa +    Engenharia Progressiva    pode ser de dois tipos: -Alterações parciais de funcionalidade -Alterações de implementação
Considerações num processo de reengenharia : - Executado se existir um argumento aceitável de custo/benefício - Implica melhoria através de reprojeto; - Remover projetos ruins, e manter projetos bons e simples - Problemas, os quais necessitam ser identificados; - Ferramentas adequadas aos processos de reengenharia e não  os processos adequados às ferramentas.
Processo de Reengenharia - Realizar a engenharia reversa e identificar  os componentes do sistema - Decidir sobre alterações na funcionalidade - Reprojetar o sistema progressiva reimplementando   o sistema
Modelo de Reengenharia de Processos  O modelo do processo de Reengenharia de Software define seis atividades: -Análise de inventário: -Reestruturação de Documentação -Engenharia Reversa -Reestruturação de código -Reestruturação de dados -Forward Engineering: também chamada de renovação
Aplica₤ões da Reengenharia de Software -  documentar os softwares atuais;  -  melhorar a leitura do código ;  -  redesenhar as bases de dados ;  -  alterar a plataforma de hardware ;  -  converter linguagens ;  -  adicionar novas funcionalidades e/ou capacidades;  -  facilitar os processos de manutenção;  -  evoluir os softwares num ambiente CASE.  Desire / Decode / Art / Docket / Macs / Newcomb Muito tem que se desenvolver sobre as  Ferramentas de Auxílio à Reengenharia

Engenharia Reversa e Reengenharia Software

  • 1.
    Engenharia Reversa eReengenharia Software Engenharia de Software Prof. Rodrigo Manoel Ricardo Vieira Edilson M Bortoletto Gabriel M Guerra Juliano Hideo
  • 2.
    A manutenção softwareestá cercada de dificuldades, sendo q as soluções não acompanham essa evolução. O código fonte e documentação mal elaborada, além da falta de compreensão do sistema são problemas constantes. A partir do momento em que um sistema começa a ser utilizado, ele entra em um estado contínuo de mudança. Mesmo que tenha sido construído aplicando as melhores técnicas de projeto e codificação existentes, os sistemas vão se tornando obsoletos em vista das novas tecnologias que são disponibilizadas. Introdução
  • 3.
    O que éReengenharia de Software Primeiramente devemos considerar três conceitos dependentes: a existência de um processo de desenvolvimento de software, a presença de um sistema a ser analisado e a identificação de níveis de abstração.
  • 4.
    Figura 1‑1 Relacionamentosno Ciclo de Desenvolvimento de Software.
  • 5.
    Engenharia Reversa Definições   O processo inverso à 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, é conhecido como engenharia reversa.
  • 6.
    Software visualizado dediferentes maneiras Visão a nível implementacional: caracteristicas da linguagem; Visão a nível estrutural: detalhes da linguagem Visão a nível funcional: função de um componente Visão a nível domínio: contexto de operação do sistema Visões do Software
  • 7.
    A representação extraídado código pode diferir de uma representação similar Visões do Software
  • 8.
  • 9.
    Visões do SoftwareAs vezes é nescessário acrescentar: Informações do código Informações provenientes de conhecimento humano
  • 10.
    Categorias As categoriassão divididas em: Visualização do código Entendimento do programa
  • 11.
    Visualização do códigoFase de redocumentação Representação a partir do código fonte Inteção de recuperar documentação Visualização do código, não transcende a visão em nível estrutural
  • 12.
    Entendimento do ProgramaRecuperação do projeto: a partir da compbinação entre: Código Documentação existente Experiências pessoais Conhecimentos gerais sobre o problema e o domínio de aplicação
  • 13.
    Entendimento do ProgramaUm completo entendimento de programa busca reconstruir não somente a função do sistema, mas também o processo pelo qual o sistema foi desenvolvido. A categoria de entendimento de programa é a forma mais crítica de engenharia reversa, pois tenta aproximar-se do raciocínio humano na busca do entendimento.
  • 14.
  • 15.
    Reengenharia Definições: Chiskofsky(1990) – alteração de um sistema de software; Wander (1992) – melhoramento do sistema, sem alterações de suas funções; Premerlani e Blaha (1994) – reduzir custos de manutenção e melhoria na flexibilidade do software; Pressman (1995) – reconstrução do sistema preservando as funções existentes, ao mesmo tempo que se adiciona novas funções;
  • 16.
    Objetivo Construir umsistema novo com maior facilidade de manutenção e a engenharia reversa é usada como parte do processo re reengenharia, pois fornece o atendimento do sistema a ser reconstruido.
  • 17.
    Categorias Reengenharia deProcessos Administrativos Reengenharia de Processos Produtivos Reengenharia de Sistemas de Software ou Produtos
  • 18.
    O Porque daReengenharia Necessidade de melhoria nos serviços e produtos oferecidos; Compressão na margem de lucro; Redução do clico de vida dos produtos; Explosão tecnológica; Desgaste de Software
  • 19.
    Software Legado Softwareantigos, onde nenhuma pessoa que participou da sua elaboração esta mais na equipe Falta de Documentação Desestruturação e dificuldade de entendimento do código, muitas vezes porque o software foi desenvolvido antes da introdução dos métodos de programação estruturada; Programadores que não participaram do desenvolvimento de um produto de software sentem dificuldade em entender e mapear a funcionalidade para o código fonte; Documentação desatualizada, não auxiliando em nada a equipe de manutenção; Dificuldade de predizer as conseqüências de efeitos colaterais; Dificuldade de administrar múltiplas alterações concorrentes.
  • 20.
    Migrar software deplataformas centralizadas para ambientes distribuído Emprego da Reengenharia A programação orientada a objetos tem muitas vantagens sobre a programação procedimental, Sistemas flexíveis, adaptáveis e extensíveis. Possui uma coleção rica de mecanismos composicionais para formação de classes, instanciação de objetos, propriedades de heran₤a, polimorfismo e ocultamento de informa₤ões Reengenheriar consome tempo e dinheiro. Pode-se tornar uma atividade que dura meses ou alguns anos.
  • 21.
    Como Realizar aReengenharia Constituído de duas fases distintas “ Desmontado” - visando seu entendimento Reconstruído - na forma desejada Reengenharia = Engenharia Reversa +  Engenharia Progressiva  pode ser de dois tipos: -Alterações parciais de funcionalidade -Alterações de implementação
  • 22.
    Considerações num processode reengenharia : - Executado se existir um argumento aceitável de custo/benefício - Implica melhoria através de reprojeto; - Remover projetos ruins, e manter projetos bons e simples - Problemas, os quais necessitam ser identificados; - Ferramentas adequadas aos processos de reengenharia e não os processos adequados às ferramentas.
  • 23.
    Processo de Reengenharia- Realizar a engenharia reversa e identificar os componentes do sistema - Decidir sobre alterações na funcionalidade - Reprojetar o sistema progressiva reimplementando o sistema
  • 24.
    Modelo de Reengenhariade Processos O modelo do processo de Reengenharia de Software define seis atividades: -Análise de inventário: -Reestruturação de Documentação -Engenharia Reversa -Reestruturação de código -Reestruturação de dados -Forward Engineering: também chamada de renovação
  • 25.
    Aplica₤ões da Reengenhariade Software - documentar os softwares atuais; - melhorar a leitura do código ; - redesenhar as bases de dados ; - alterar a plataforma de hardware ; - converter linguagens ; - adicionar novas funcionalidades e/ou capacidades; - facilitar os processos de manutenção; - evoluir os softwares num ambiente CASE. Desire / Decode / Art / Docket / Macs / Newcomb Muito tem que se desenvolver sobre as Ferramentas de Auxílio à Reengenharia