Reengenharia Reengenharia de Software de Software

Setembro 2002

Eliane Martins - Instituto de Computação - UNICAMP

Tópicos Tópicos
• Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação

Eliane Martins - Instituto de Computação - UNICAMP

2

Referências Referências
I.Sommerville. “Sw Engineering”, 6a. Edição, 2001, c. 28. R.S.Pressman. “Sw Engineering: a Practitioner’ Approach”. McGraws Hill, 3ª ed, 1992.

• Sobre refatoração:
http://c2.com/cgi/wiki

Eliane Martins - Instituto de Computação - UNICAMP

3

Re-engenharia: o que é Re-engenharia: o que é

Reorganização e modificação do sw com o objetivo de torná-lo mais fácil de manter

Eliane Martins - Instituto de Computação - UNICAMP

4

Instituto de Computação . usando processos rápidos de desenvolvimento. ainda restam muitos em uso . e novos programas são desenvolvidos....Re-engenharia: porquê? Re-engenharia: porquê? • Para aumentar a sobrevida de si stemas legados: – em 1990 foi estimada a existência de ? 120 milhões de LOCs.UNICAMP 5 . nos quais estruturação e documentação não sãoa principal preocupação (ex. a maioria em Cobol e Fortran • a estruturação dos programas é muito baixa • a documentação dos sistemas é pouca ou inexistente – apesar de muitos desses programas já terem sido substituídos.: XP) Eliane Martins . – ..

UNICAMP 6 .Vantagens Vantagens • • • • Melhora a estrutura do sistema Cria ou atualiza a documentação Facilita o entendimento do sistema Melhora a motivação da equipe de manutenção Eliane Martins .Instituto de Computação .

Re-engenharia de sistemas Re-engenharia de sistemas • Re-estruturar ou re-escrever um sistema legado (ou parte dele) sem alterar sua funcionalidade • Recomendada quando alguns sub-sistemas sofrem alterações com muita freqüência • Requer esforço para re-escrever e re-estruturar o sistema com o intuito de tornar mais fácil a manutenção (ou evolução) do mesmo Eliane Martins .UNICAMP 7 .Instituto de Computação .

Instituto de Computação .Quando fazer? Quando fazer? • Quando as alterações estão restritas a partes do sistema. vale a pena fazer re-engenharia nessas partes • Quando a plataforma de hw ou sw se torna obsoleta • Quando existe a possibilidade de se usar ferramentas que auxiliem na re-estruturação do sistema Eliane Martins .UNICAMP 8 .

UNICAMP . problemas com pessoal. problemas com os requisitos ? Protótipo já existente (sistema legado) facilita o desenvolvimento de novos sistemas ? O usuário já conhece o sistema ? muitos requisitos já são conhecidos ? Muitas alterações acabam degradando a qualidade do sistema ? Há limites para a reengenharia 9 ? Custos mais baixos: ? é mais barato alterar do que refazer Eliane Martins .Reestruturar ou refazer? Reestruturar ou refazer? ? Ri scos reduzidos: ? existem muitos riscos na elaboração de novos sistemas: problemas no desenvolvimento.Instituto de Computação .

Instituto de Computação . a reengenharia do si stema pode ser necessária para responder às alterações no processo de negócio Eliane Martins .Reengenharia do processo de negócio Reengenharia do processo de negócio • Reengenharia de sistemas foi inspirada na área administrativa.UNICAMP 10 . onde: – processos são redefinidos de forma a eliminar atividades redundantes e aumentar eficiência – melhorias são geralmente conseqüência da introdução ou da melhoria do si stema computacional que apóia o processo – como conseqüência.

Engenharia Progressiva e Reengenharia Engenharia Progressiva e Reengenharia Engenharia Progressiva Especificação do Sistema Projeto e Implementação Novo sistema Reengenharia Sistema Antigo Compreensão e Transformação Sistema Melhorado Eliane Martins .UNICAMP 11 .Instituto de Computação .

Instituto de Computação .O processo O processo Sistema Original Documentação Código Remodularizado Dados originais Conversão de Código Engenharia Reversa Remodularização do Código Reestruturação dos Dados Reestruturação do Código Código Reestruturado Dados reestruturados Eliane Martins .UNICAMP 12 .

Fatores de custo Fatores de custo • Qualidade do sw: – quanto menor a qualidade do sw e da documentação associada. maiores os custos com reengenharia • Disponibilidade de ferramentas: – sem ferramentas os custos são muito elevados • O volume de dados a serem convertidos • A disponibilidade de equipe treinada e com conhecimento sobre o sistema Eliane Martins .Instituto de Computação .UNICAMP 13 .

UNICAMP 14 .Instituto de Computação .Tópicos Tópicos • Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação Eliane Martins .

Instituto de Computação . que decide adotar uma linguagem como padrão para facilitar a manutenção – falta de suporte do fornecedor do compilador ? Só é economicamente interessante se puder ser automatizada Eliane Martins .UNICAMP 15 .Conversão de código Conversão de código • Consiste em converter o código para uma nova versão da mesma linguagem (Cobol74 ? Cobol85) ou para uma nova linguagem (Fortran ? C) • Pode ser necessária devido a: – mudança na plataforma de hw – falta de pessoal que conheça a linguagem original – mudança na política da organização.

UNICAMP 16 .Instituto de Computação .O processo O processo Código original Código original Código convertido Identificar diferenças entre as linguagens Projetar um tradutor Converter automaticamente Ajustar manualmente Eliane Martins .

UNICAMP 17 .Tópicos Tópicos • Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação Eliane Martins .Instituto de Computação .

referências cruzadas. análise estática...Engenharia Reversa Engenharia Reversa • Consiste em analisar o código com o objetivo de obter o projeto e especificação do si stema – para obter a especificação é necessária intervenção manual • Cria banco de dados com informações sobre o si stema • É mais eficaz quando feita com auxílio de ferramentas: engenharia reversa.UNICAMP 18 . Eliane Martins . navegadores de programas (program browsers) .Instituto de Computação .

UNICAMP .O processo O processo Análise estática (automática) Sistema original Anotação manual Complementa informação contida nos grafos Mostra onde entidades do sistema são definidas e referenciadas 19 Obtém grafos da estrutura do sistema Diagramas de estrutura do código Diagramas de estrutura dos dados Informações sobre o sistema Elaboração da documentação Matrizes de rastreabilidade Eliane Martins .Instituto de Computação .

Quando usar? Quando usar? • Como parte do processo de Reengenharia • Como parte do processo de substituição do sistema • Como parte do processo de manutenção Eliane Martins .UNICAMP 20 .Instituto de Computação .

UNICAMP 21 .Instituto de Computação .Tópicos Tópicos • Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação Eliane Martins .

o que dificulta o entendimento e futuras alterações. seleção (if-the-else. case) e repetição (while-repeat-for) • Condições também podem ser simplificadas.Instituto de Computação . para eliminar desvios incondicionais (goto): – Bohm e Jacopini mostraram. em 1966. que programas podem ser escritos usando-se somente construções do tipo seqüência. o que facilita o seu entendimento Eliane Martins . • O código pode ser reestruturado.Reestruturação de código Reestruturação de código • Com a manutenção a estrutura do código vai sendo corrompida. automaticamente.UNICAMP 22 .

Instituto de Computação .Código espaguete Código espaguete Start: get (time_on.UNICAMP 23 . switch) if switch = off goto Off if switch = on goto On goto Cntrld if heating_status = on goto Sw_off goto Loop if heating_status = off goto Sw_on goto Loop if time = time_on goto On if time = time_off goto Off if time < time_on goto Start if time > time_off goto Start if temp > setting goto Off if temp < setting goto On Sw_off: Sw_on: Switch: Loop: heating_status := off goto Switch heating_status := on Switch_heating ( ) goto Start Off: On: Cntrld: Eliane Martins . time. setting. temp. time_off.

end_if. heating_status := Off. when Controlled ? if time ? time_on and time ? time_off then if temp > setting and heating_status = On then Switch_heating ( ). setting. switch) case switch of when On ? if heating_status = off then Switch_Heating ( ).Instituto de Computação . temp. time_off.Código estruturado Código estruturado loop -.UNICAMP 24 . heating_status := On. end_case. time. end_if.o ambiente do sistema get (time_on.get: atribui valores para variáveis conforme -. heating_status := On. end_if. Eliane Martins . end loop. elsif temp < setting and heating_status = Off then Switch_heating ( ).

.Simplificação de condições Simplificação de condições -.Condição complexa: if not (A > B and (C < D or not ( E > F) ) ). Eliane Martins .Condição simplificada: if (A <= B and (C>= D or E > F). -..UNICAMP 25 ...Instituto de Computação .

Instituto de Computação .UNICAMP 26 .O processo O processo Código desestruturado Código estruturado Geração de Código a partir do grafo Análise e construção do grafo Grafo de Fluxo de Controle Eliane Martins .

mesmo em hw mais velozes – as ferramentas podem não reconhecer dialetos (construções não padronizadas) – códigos contendo módulos altamente acoplados. com estruturadas de dados compartilhadas ? a reestruturação não traz grandes melhorias Eliane Martins . em especial.UNICAMP 27 . os que estão na linha de comando (in-line) – perda da correspondência entre o código e a documentação associada – complexidade dos algoritmos de reestruturação ? procedimento longo.Dificuldades Dificuldades • A reestruturação automática apresenta algumas dificuldades: – perda de comentários.Instituto de Computação .

UNICAMP 28 .Instituto de Computação .: eficiência ? estruturação)? – o módulo está de acordo com padrão? ? Obtenção de métricas ajuda na seleção dos módulos candidatos a uma reestruturação Eliane Martins .Quando reestruturar? Quando reestruturar? • Nem sempre é vantajoso reestruturar todo o código: – a qualidade do módulo é ruim? – o módulo é alterado com freqüência? – o módulo atende algum requisito não funcional (ex.

if A = 0 then goto L3. L2: k := k + 1. t := 0.Instituto de Computação . t := t + A. l := l + 1. t). Sugira nomes mais adequados para as variáveis.UNICAMP 29 .Exercício Exercício Reestruturar o código a seguir: begin k := 0. if A > 0 then goto L2. l. Eliane Martins . goto L1. if t <= 1000 then goto L1. end. l := 0. Construa um dicionário de dados descrevendo as variáveis. L1: read (A). L3: write (k.

Tópicos Tópicos • Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação Eliane Martins .Instituto de Computação .UNICAMP 30 .

Instituto de Computação .Modularização de código Modularização de código • O que é: – Processo de reorganização de um programa de forma que partes relacionadas são colocadas em um mesmo módulo • Porquê? – Componentes relacionados ficam dispersos pelo programa • Como? – Geralmente é manual: inspeção e re-edição do código. mas já existem ferramentas que apoiam partes do processo Eliane Martins .UNICAMP 31 .

Instituto de Computação . Ex. Eliane Martins . Usados quando é impraticável recuperar tipos abstrato de dados.UNICAMP 32 .: módulo que agrupa funções de leitura e validação dos dados de entrada • Módulos de apoio a processos – módulos cujas funções apoiam todo ou parte de um processo de negócio.Tipos de módulos Tipos de módulos • Abstração de dados – tipos abstratos de dados agrupando estruturas de dados com funções que fazem acesso a elas • Controle do hardware – módulos que agrupam funções de acesso a um dispositivo de hw • Módulos funcionais – módulos que contêm funções que realizam tarefas similares ou que estão altamente relacionadas.

acesso e modificação dos mesmos são feitos através de funções – impacto de mudanças diminui: se a interface de acesso é mantida.Obtenção de tipos abstratos de dados Obtenção de tipos abstratos de dados • Muitos sistemas legados usam tabelas compartilhadas e dados globais para economizar memória ? mudanças nesses dados são custosas pois têm grande impacto sobre o sistema • Dados compartilhados podem ser convertidos em tipos abstratos de dados (TAD) ou objetos: – TADs ocultam a representação dos dados: criação.Instituto de Computação . mudanças na representação dos dados não afetam outras partes do programa Eliane Martins .UNICAMP 33 .

Passos para obtenção de TAD Passos para obtenção de TAD ? Analise áreas de dados comuns para identificar abstrações de dados – uma área compartilhada pode conter mais de uma abstração de dados.UNICAMP 34 . ? Crie TAD ou objetos para cada abstração encontrada – se a linguagem não oferece ocultação de dados.Instituto de Computação . crie funções de atualização e acesso aos campos da estrutura de dados. ? Substitua todas as referências a esses dados por chamadas às funções de atualização e acesso – use um navegador de programas ou um gerador de referências cruzadas para encontrar essas referências Eliane Martins .

Tópicos Tópicos • Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação Eliane Martins .UNICAMP 35 .Instituto de Computação .

Instituto de Computação .Re-estruturação dos dados Re-estruturação dos dados • O que é – processo de analisar e reorganizar estruturas de dados (eventualmente.UNICAMP 36 . os valores dos dados) de um programa • Objetivo – melhorar compreensão dos dados usados pelo programa – facilitar o controle dos dados Eliane Martins .

de campos.Instituto de Computação . armazenados em diferentes partes do programa com diferentes formatos – os dados podem não refletir alterações no ambiente externo • Limites impostos aos programas – o sistema precisa tratar um volume maior de dados do que originalmente previsto pelos projetistas ? aumento de tabelas. por vários usuários Eliane Martins . de número de campos • Evolução da arquitetura – na migração de arquitetura centralizada para distribuída. o acesso aos dados pode ser feito remotamente.Porquê reestruturar os dados? Porquê reestruturar os dados? • Degradação dos dados – existência de dados duplicados ou redundantes.UNICAMP 37 .

Instituto de Computação . de tabelas.Abordagens Abordagens • Reorganização dos dados – eliminar duplicações e redundâncias – estabelecer um formato consistente para os registros • Extensão dos dados – eliminar os limites. aumentando tamanho de campos.UNICAMP 38 . e outros • Migração dos dados – si stema de arquivos ? banco de dados – SGBD antigo ? novo SGBD Eliane Martins .

Problemas com dados legados Problemas com dados legados • Nomeação dos dados – dados têm nomes difíceis de entender – dados podem ter nomes diferentes em ao longo das diferentes partes do sistema • Tamanho de campos – o mesmo item pode ter tamanhos diferentes em diferentes partes do sistema • Organização dos registros – registros que representam a mesma entidade podem ter formatos diferentes ao longo do sistema • Constantes embutidas • Inexistência de um dicionário de dados Eliane Martins .UNICAMP 39 .Instituto de Computação .

Inconsistência dos Dados Inconsistência dos Dados • Valores default inconsistentes – programas diferentes atribuem valores diferentes ao mesmo item de dados • Unidades inconsistentes – a mesma informação é representada usando unidades diferentes (ex.: peso em libras ou kg) • Regras de validação inconsistentes – regras de validação diferentes podem fazer com que dados aceitos por um programa sejam rejeitados por outros • Convenções de representação inconsistente – diferenças na convenção usada para representar os dados (ex.: alguns programas podem assumir que dados iniciados com maiúsculas representam endereço) • Uso inconsistente de valores negativos: – alguns programas podem rejeitar tais valores. outros aceitá-los como válidos e outros ainda podem não reconhecê-los como sendo negativos e convertê-los errôneamente para positivo Eliane Martins .UNICAMP 40 .Instituto de Computação .

UNICAMP 41 .O processo O processo Sistema legado Modificação de nomes de entidades Análise dos dados Substituição de literais por constantes Reordenação das definições dos dados Reformatação dos dados Conversão de valores default Modificação das regras de validação Dados reestruturados Conversão dos dados Ferramentas de análise de dados Tabelas de sumário das alterações Eliane Martins .Instituto de Computação .

Eliane Martins .Instituto de Computação . sem mudar seus valores • A conversão de valores pode ser extremamente custosa sem a ajuda de programas construídos especificamente para esse fim.Conversão de dados Conversão de dados • A reengenharia dos dados pode simplesmente reestruturar os dados.UNICAMP 42 .

UNICAMP 43 .Instituto de Computação .Tópicos Tópicos • Conversão de código • Engenharia Reversa • Re-estruturação de código • Modularização de código • Re-estruturação dos dados • Recuperação da documentação Eliane Martins .

manual de usuário. .UNICAMP 44 ..Recuperação da documentação Recuperação da documentação • O que é: – (re)escrever a documentação: especificações. • Porquê: – documentação inexistente ou desatualizada • Refazer a documentação tem um custo. portanto é importante planejar: – deixar como está: interessante se sistemas não são críticos ou são pouco alterados – (re)escrever só as partes alteradas: reescrita na medida em que as alterações são solicitadas – documentar tudo: interessante para sistemas críticos para a empresa Eliane Martins .Instituto de Computação ..

levantando os principais pontos estudados: – – – – Eliane Martins . remodularização do código • complete. engenharia reversa.Sumário Sumário • Reengenharia é o processo de reorganização de um si stema para torná-lo mais fácil de manter • A reengenharia compreende as seguintes atividades: conversão de código.UNICAMP 45 . do código e dos dados.Instituto de Computação . reestruturação da documentação.