Engenharia Reversa e Reengenharia Software Engenharia de Software Prof. Rodrigo Manoel Ricardo Vieira Edilson M Bortoletto Gabriel M Guerra Juliano Hideo
Introdução 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.
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.
Visões do Software 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 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.
mecanismos composicionais para formação de classes, instanciação de Emprego da Reengenharia Migrar software de plataformas centralizadas para ambientes distribuído 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.
Reengenharia = Engenharia Reversa + D Engenharia Progressiva Como Realizar a Reengenharia Constituído de duas fases distintas “Desmontado” - visando seu entendimento Reconstruído - na forma desejada Reengenharia = Engenharia Reversa + D Engenharia Progressiva D 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. Muito tem que se desenvolver sobre as Ferramentas de Auxílio à Reengenharia Desire / Decode / Art / Docket / Macs / Newcomb