Evolução e Manutenção do Software

81
Eliane Martins - Instituto de Computação - UNICAMP Evolução e Manutenção do Software Nov/2009

description

Evolução e Manutenção do Software. Nov/2009. Tópicos. Evolução ou manutenção Manutenção de Software Tipos de manutenção Dificuldades Manutenibilidade. Referências. E.Martins. “Manutenção e Ferramentas CASE”, notas de curso, 1998 I.Sommerville. “Sw Engineering”, 6ª ed, 2001, cap27 - PowerPoint PPT Presentation

Transcript of Evolução e Manutenção do Software

Page 1: Evolução e Manutenção do Software

Eliane Martins - Instituto de Computação - UNICAMP

Evolução e Manutenção do

Software

Evolução e Manutenção do

Software

Nov/2009

Page 2: Evolução e Manutenção do Software

2Eliane Martins - Instituto de Computação - UNICAMP

TópicosTópicos

• Evolução ou manutenção

• Manutenção de Software

• Tipos de manutenção

• Dificuldades

• Manutenibilidade

Page 3: Evolução e Manutenção do Software

3Eliane Martins - Instituto de Computação - UNICAMP

ReferênciasReferências

E.Martins. “Manutenção e Ferramentas CASE”, notas de curso, 1998

I.Sommerville. “Sw Engineering”, 6ª ed, 2001, cap27

R.S.Pressman. “Sw Engineering: a Practitioner’s Approach”. McGraw-Hill, 3ª ed, 1992.

T.Pigoski. “Practical Software Maintenance”, 1997, John Wiley.

W.P.Paula Fº. “Engenharia de Software: Fundamentos, Métodos e Padrões”. Livros Técnicos e Científicos Editora, 2001.

N.F.Schneidewind. “The State of Sw Maintenance”. IEEE Trans on Sw Eng, SE-13, nº3, mar/87, pp303-310.

K.Bennett. “Sw Evolution: Past, Present and Future”. Information and Software Technology, nº38, 1996, pp673-680.

Page 4: Evolução e Manutenção do Software

4Eliane Martins - Instituto de Computação - UNICAMP

Evolução ou Manutenção?Evolução ou Manutenção?

“Grandes sistemas de software nunca são completados; eles simplesmente continuam evoluindo” [Lehman]

– Porquê ?

para preservar o valor do software

Page 5: Evolução e Manutenção do Software

5Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

Page 6: Evolução e Manutenção do Software

6Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

• Valor do sw devido a falhas mudanças nos requisitos

tempo

Page 7: Evolução e Manutenção do Software

7Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

Page 8: Evolução e Manutenção do Software

8Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

• Valor do sw devido a falhas mudanças nos requisitos

complexidade

tempo

Page 9: Evolução e Manutenção do Software

9Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

é eficiente

Page 10: Evolução e Manutenção do Software

10Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

é eficiente

• Valor do sw devido a falhas mudanças nos requisitos

complexidade

ineficiência

tempo

Page 11: Evolução e Manutenção do Software

11Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

é eficiente

usa tecnologia atual

Page 12: Evolução e Manutenção do Software

12Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

é eficiente

usa tecnologia atual

• Valor do sw devido a falhas mudanças nos requisitos

complexidade

ineficiência

tecnologia obsoleta

tempo

Page 13: Evolução e Manutenção do Software

13Eliane Martins - Instituto de Computação - UNICAMP

Sobre o valor do softwareSobre o valor do software

• Sw tem valor quando atende aos requisitos

é fácil de entender e de usar

é eficiente

usa tecnologia atual

• Valor do sw devido a falhas mudanças nos requisitos

complexidade

ineficiência

tecnologia obsoleta

tempo

alterações

Page 14: Evolução e Manutenção do Software

14Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas • modificações são inevitáveis para

que um sw continue útil

Page 15: Evolução e Manutenção do Software

15Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas

Complexidade crescente

• modificações são inevitáveis para

que um sw continue útil• modificações aumentam a

complexidade do sw complexidade nº falhas

tempo

taxa

de

falh

as

hw

mortalidadeinfantil desgaste

Page 16: Evolução e Manutenção do Software

16Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas

Complexidade crescente

• modificações são inevitáveis para

que um sw continue útil• modificações aumentam a

complexidade do sw complexidade nº falhas

tempo

taxa

de

falh

as

ideal

sw

tempo

taxa

de

falh

as

hw

mortalidadeinfantil desgaste

Page 17: Evolução e Manutenção do Software

17Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas

Complexidade crescente

• modificações são inevitáveis para

que um sw continue útil• modificações aumentam a

complexidade do sw complexidade nº falhas

tempo

taxa

de

falh

as

hw

mortalidadeinfantil desgaste

tempo

taxa

de

falh

as

ideal

real

sw

alteração

Page 18: Evolução e Manutenção do Software

18Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas

Complexidade crescente

Evolução de programas grandes (processo auto-regulador)

• modificações são inevitáveis para

que um sw continue útil• modificações aumentam a

complexidade do sw

• atributos tais como tamanho, tempo entre versões e nº falhas variam pouco de uma versão para outra

Page 19: Evolução e Manutenção do Software

19Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas

Complexidade crescente

Evolução de programas grandes (processo auto-regulador)

Estabilidade organizacional (saturação)

• modificações são inevitáveis para

que um sw continue útil• modificações aumentam a

complexidade do sw

• atributos tais como tamanho, tempo entre versões e nº defeitos variam pouco de uma versão para outra

• taxa de desenvolvimento é constante e independe dos recursos alocados

Page 20: Evolução e Manutenção do Software

20Eliane Martins - Instituto de Computação - UNICAMP

Dinâmica da evolução do sw(Leis de Lehman)

Dinâmica da evolução do sw(Leis de Lehman)

Modificações contínuas

Complexidade crescente

Evolução de programas grandes (processo auto-regulador)

Estabilidade organizacional (saturação)

Conservação da familiaridade

• modificações são inevitáveis para

que um sw continue útil• modificações aumentam a

complexidade do sw

• atributos tais como tamanho, tempo entre versões e nº defeitos variam pouco de uma versão para outra

• taxa de desenvolvimento é constante e independe dos recursos alocados

• modificações a cada versão são praticamente constantes (modificações incrementais)

Page 21: Evolução e Manutenção do Software

21Eliane Martins - Instituto de Computação - UNICAMP

TópicosTópicos

• Evolução ou manutenção

• Manutenção de Software

• Tipos de manutenção

• Dificuldades

• Manutenibilidade

Page 22: Evolução e Manutenção do Software

22Eliane Martins - Instituto de Computação - UNICAMP

ManutençãoManutenção

• Definição– é o processo de modificação de um produto após a

entrega

• Tipos– corretiva

– adaptativa

– perfectiva

Page 23: Evolução e Manutenção do Software

23Eliane Martins - Instituto de Computação - UNICAMP

Custos com manutençãoCustos com manutenção

40

55

75

90

0

10

20

30

40

50

60

70

80

90

início anos70

início anos80

final anos80

início anos90 Dados de 1990

Page 24: Evolução e Manutenção do Software

24Eliane Martins - Instituto de Computação - UNICAMP

Distribuição dos custos de manutençãoDistribuição dos custos de manutenção

emergenciais12%

rotineiras9%

melhorias usuários

43%

adaptação dos dados

17%mudanças hw,

S.Op.6%

melhorias código

4%outras

3%melhorias doc6%

Internet, maio/2002

Page 25: Evolução e Manutenção do Software

25Eliane Martins - Instituto de Computação - UNICAMP

Distribuição dos custos por categoriaDistribuição dos custos por categoria

corretiva17%

adaptativa18%

perfectiva65%

Dados de 1990

Page 26: Evolução e Manutenção do Software

26Eliane Martins - Instituto de Computação - UNICAMP

TópicosTópicos

• Evolução ou manutenção

• Manutenção de Software

• Tipos de manutenção

• Dificuldades

• Manutenibilidade

Page 27: Evolução e Manutenção do Software

27Eliane Martins - Instituto de Computação - UNICAMP

Porquê os custos são altos?Porquê os custos são altos?

• Fatores:

– usuário

– contrato

– equipe de desenvolvimento

– sistema

– produto

Page 28: Evolução e Manutenção do Software

28Eliane Martins - Instituto de Computação - UNICAMP

Porquê os custos são altos?Porquê os custos são altos?

• Fatores:

– usuário

– contrato

– equipe de desenvolvimento

– sistema

– produto

Pouco treinamentoMudança de objetivos:

necessidades do usuário evoluem;novos usuários

Page 29: Evolução e Manutenção do Software

29Eliane Martins - Instituto de Computação - UNICAMP

Porquê os custos são altos?Porquê os custos são altos?

• Fatores:

– usuário

– contrato

– equipe de desenvolvimento

– sistema

– produto

Contrato manutenção separado do contrato de desenvolvimento, podendo inclusive ser dado a outra empresa

pouco incentivo para produção de sw fácil de manter

Page 30: Evolução e Manutenção do Software

30Eliane Martins - Instituto de Computação - UNICAMP

Porquê os custos são altos?Porquê os custos são altos?

• Fatores:

– usuário

– contrato

– equipe de desenvolvimento

– sistema

– produto

ausência dos desenvolvedoresfalta de tempofalta de motivaçãofalta de experiência

Page 31: Evolução e Manutenção do Software

31Eliane Martins - Instituto de Computação - UNICAMP

Porquê os custos são altos?Porquê os custos são altos?

• Fatores:

– usuário

– contrato

– equipe de desenvolvimento

– sistema

– produto

domínio da aplicaçãodependência do ambiente externoinstabilidade do hwalterações sem controle

Page 32: Evolução e Manutenção do Software

32Eliane Martins - Instituto de Computação - UNICAMP

Porquê os custos são altos?Porquê os custos são altos?

• Fatores:

– usuário

– contrato

– equipe de desenvolvimento

– sistema

– produto

idadequalidade da documentaçãoestilo de programaçãoacoplamento entre os móduloslinguagem de programaçãoV&V deficiente

Page 33: Evolução e Manutenção do Software

33Eliane Martins - Instituto de Computação - UNICAMP

Como reduzir custosComo reduzir custos

• Diretrizes gerenciais– como planejar a manutenção

– como motivar a equipe

• Diretrizes técnicas:– melhorar a manutenibilidade

• durante o desenvolvimento: processo visando manutenibilidade

• durante a manutenção: manutenção preventiva (reengenharia)

– definir processo de manutenção

Page 34: Evolução e Manutenção do Software

34Eliane Martins - Instituto de Computação - UNICAMP

Diretrizes gerenciais (1)Diretrizes gerenciais (1)

• Envolver a equipe de manutenção no desenvolvimento• Usar padrões tanto no desenvolvimento quanto na

manutenção• Fazer rodízio do pessoal entre desenvolvimento e

manutenção• Ter acesso à documentação ainda durante o desenvolvimento• Dispor das ferramentas CASE usadas durante

desenvolvimento• Manter contato entre usuários e equipe de manutenção• Fazer controle de configuração• Padronizar pedidos de alterações [McClure]

Page 35: Evolução e Manutenção do Software

35Eliane Martins - Instituto de Computação - UNICAMP

Diretrizes gerenciais (2)Diretrizes gerenciais (2)

• Associar objetivos do software com metas da empresa

• Associar ganhos de manutenção com o desempenho da empresa

• Integrar as equipes de desenvolvimento e manutenção

• Alocar verba para manutenção preventiva (reengenharia)

• Envolver equipe de manutenção na criação de padrões de desenvolvimento, revisões, preparação de testes

• Mudar imagem negativa associada à manutenção

[Boehm]

Page 36: Evolução e Manutenção do Software

36Eliane Martins - Instituto de Computação - UNICAMP

Diretrizes gerenciais (3)Diretrizes gerenciais (3)

• Escolher equipe qualificada

• Garantir boa qualidade do sistema:– bem estruturado

– fácil de entender

• Usar linguagens de programação padronizadas

• Usar sistemas operacionais padronizados

• Padronizar a documentação

• Disponibilizar casos de teste

• Tornar possível o rastreamento de requisitos[Pressman]

Page 37: Evolução e Manutenção do Software

37Eliane Martins - Instituto de Computação - UNICAMP

TópicosTópicos

• Evolução ou manutenção

• Manutenção de Software

• Tipos de manutenção

• Dificuldades

• Manutenibilidade

Page 38: Evolução e Manutenção do Software

38Eliane Martins - Instituto de Computação - UNICAMP

ManutenibilidadeManutenibilidade

• Algumas definições– Facilidade com que um sistema ou componente de

software pode ser modificado para se corrigir falhas, melhorar desempenho (ou outros atributos), ou ser adaptado a mudanças no ambiente; (IEEE 610.12, 1990)

– Facilidade para corrigir um sw, quando possui falhas ou deficiências, e também para expandir ou contrair o sw para satisfazer a novos requisitos (Martin e McClure 1983)

– Conjunto de atributos relativos ao esforço necessário para se realizar modificações em um sw (ISO/IEC 8402 1986)

Page 39: Evolução e Manutenção do Software

39Eliane Martins - Instituto de Computação - UNICAMP

ConsideraçõesConsiderações

• Todos os sistemas são igualmente fáceis de manter ? Porque não ?– Sistemas não são desenvolvidos visando manutenibilidade

– manutenibilidade deve ser uma das metas do desenvolvimento

• Que critérios usar para determinar se um sw é fácil de manter ou não ?

• É possível estimar o grau de manutenibilidade de um sw ?

Page 40: Evolução e Manutenção do Software

40Eliane Martins - Instituto de Computação - UNICAMP

O que afeta a manutenibilidadeO que afeta a manutenibilidade

• Processo de desenvolvimento

• Documentação

• Qualidade do sw

• Disponibilidade dos testes

• Disponibilidade das ferramentas de desenvolvimento

• Controle de alterações

Page 41: Evolução e Manutenção do Software

41Eliane Martins - Instituto de Computação - UNICAMP

O que afeta a manutenibilidadeO que afeta a manutenibilidade

• Processo de desenvolvimento

• Documentação

• Qualidade do sw

• Disponibilidade dos testes

• Disponibilidade das ferramentas de desenvolvimento

• Controle de alterações

Manutenibilidade deve ser considerada ao longo de todo desenvolvimento.Pb.: como convencer gerentes de que manutenibilidade ganhos

Page 42: Evolução e Manutenção do Software

42Eliane Martins - Instituto de Computação - UNICAMP

O que afeta a manutenibilidadeO que afeta a manutenibilidade

• Processo de desenvolvimento

• Documentação

• Qualidade do sw

• Disponibilidade dos testes

• Disponibilidade das ferramentas de desenvolvimento

• Controle de alterações

documentação desatualizada, incompleta ou inexistente custo com manutenção (47% - 62% tempo para compreensão de programas e documentos) [Pigosrki 1996]

Page 43: Evolução e Manutenção do Software

43Eliane Martins - Instituto de Computação - UNICAMP

O que afeta a manutenibilidadeO que afeta a manutenibilidade

• Processo de desenvolvimento

• Documentação

• Qualidade do sw

• Disponibilidade dos testes

• Disponibilidade das ferramentas de desenvolvimento

• Controle de alterações

qualidade custo com manutenção Aspectos de qualidade:- estrutura do sw- estilo de programação- sistemática de V&V

Page 44: Evolução e Manutenção do Software

44Eliane Martins - Instituto de Computação - UNICAMP

O que afeta a manutenibilidadeO que afeta a manutenibilidade

• Processo de desenvolvimento

• Documentação

• Qualidade do sw

• Disponibilidade dos testes

• Disponibilidade das ferramentas de desenvolvimento

• Controle de alteraçõesFacilita realização de testes, em especial os de regressão

Page 45: Evolução e Manutenção do Software

45Eliane Martins - Instituto de Computação - UNICAMP

O que afeta a manutenibilidadeO que afeta a manutenibilidade

• Processo de desenvolvimento

• Documentação

• Qualidade do sw

• Disponibilidade dos testes

• Disponibilidade das ferramentas de desenvolvimento

• Controle de alteraçõesFacilita realização modificações, permitindo atualizar:- modelos de análise e projeto; documentação- código fonte (existência do compilador)- testes, entre outros

Page 46: Evolução e Manutenção do Software

46Eliane Martins - Instituto de Computação - UNICAMP

Como estimar manutenibilidadeComo estimar manutenibilidade

• Manutenibilidade pode ser medida• Diversas métricas propostas:

– padrão IEEE

– outras

Page 47: Evolução e Manutenção do Software

48Eliane Martins - Instituto de Computação - UNICAMP

MétricasMétricas

• Permitem determinar quão fácil é manter um sw

• manutenibilidade pode ser caracterizada pelos seguintes sub-fatores (IEEE 1061 1992):– corrigibilidade: medida do esforço necessário para corrigir erros

e lidar com as reclamações dos usuários

– expansibilidade: medida do esforço necessário para melhorar ou modificar as funções do sw

– testabilidade: medida do esforço necessário para testar o sw

Page 48: Evolução e Manutenção do Software

49Eliane Martins - Instituto de Computação - UNICAMP

MétricasMétricas

• corrigibilidade • tempo de fechamento

• tempo para isolar/corrigir a falha

• tamanho da interface

• taxa de falhas

• previsão de recursos

• previsão de esforço

• produtividade

Contagemde falhas

esforço

Subfator tipo de métrica métrica

Page 49: Evolução e Manutenção do Software

50Eliane Martins - Instituto de Computação - UNICAMP

MétricasMétricas

• testabilidade • cobertura do código

• cobertura dos requisitos

• grau de completeza do plano de testes

• previsão de recursos

• previsão de esforço

• produtividade

cobertura

esforço

Subfator tipo de métrica métrica

Page 50: Evolução e Manutenção do Software

51Eliane Martins - Instituto de Computação - UNICAMP

MétricasMétricas

• expansibilidade • esforço para modificação

• tamanho da modificação

• taxa de modificação

• contagem de modificações

• previsão de recursos

• previsão de esforço

• produtividade

modificações

esforço

Subfator tipo de métrica métrica

Page 51: Evolução e Manutenção do Software

52Eliane Martins - Instituto de Computação - UNICAMP

Outras métricasOutras métricas

• Diversos autores (academia e indústria):– Schneidewind 1987

– Lewis e Henry 1989

– Oman 1991

entre outros

Page 52: Evolução e Manutenção do Software

58Eliane Martins - Instituto de Computação - UNICAMP

Métrica baseada na estruturaMétrica baseada na estrutura

• Proposta por Lewis e Henry 1989

• Permite avaliar a manutenibilidade ao longo do ciclo de vida

• Medida varia conforme o tipo de sistema:– Procedimental

– OO

Page 53: Evolução e Manutenção do Software

59Eliane Martins - Instituto de Computação - UNICAMP

Modularidade para sistemas procedimentais

Modularidade para sistemas procedimentais

nº de procedimentosMproc =

KLOCS

[Peters e Pedrycz 2001]

Programa LOC nº funções M ProgA 1000 2 0,002 ProgB 1000 12 0,012

Exemplo:

Page 54: Evolução e Manutenção do Software

60Eliane Martins - Instituto de Computação - UNICAMP

Modularidade para sistemas OOModularidade para sistemas OO

nº de métodos da classeMclasse =

KLOCS

nº médio de métodos por classeMsist =

nº médio de KLOCS por classe

[Peters e Pedrycz 2001]

Page 55: Evolução e Manutenção do Software

61Eliane Martins - Instituto de Computação - UNICAMP

LegibilidadeLegibilidade

• Legibilidade:– de documentos:

– de código:

L = | 0,295 id - 0,499 LOC + 0,13 c

nº de palavrasFOG = 0,4 + % de palavras com ( 3+) sílabas nº de sentenças

complexidade ciclomática

comprimento médio dos identificadores

[Peters e Pedrycz 2001]

Page 56: Evolução e Manutenção do Software

63Eliane Martins - Instituto de Computação - UNICAMP

Ferramentas de Auxílio - ExemplosFerramentas de Auxílio - Exemplos

• RSM– Resource Standard Metrics (C, C++, Java)

– obtenção de métricas: LOCs, complexidade cilcomática, nº de parâmetros em função, ...

– Análise estática do código: linhas muito longas, nomes de variáveis, constantes, construções dependentes do compilador, ...

• Aristotle– análise estática do programa:

• análise de dependências de controle

• análise de fluxo de dados, entre outras

• ...

Page 57: Evolução e Manutenção do Software

64Eliane Martins - Instituto de Computação - UNICAMP

Recomendações finaisRecomendações finais

• Quais as recomendações para se obter uma boa manutenibilidade?– Revisões

– Uso de princípios da engenharia de sw (ex.: abstração de dados, ocultação da informação, ...)

– Comentários no programa contendo informações úteis

– Evitar práticas nocivas de programação

– Aplicar convenções de codificação

– Reengenharia do sw

Page 58: Evolução e Manutenção do Software

65Eliane Martins - Instituto de Computação - UNICAMP

Reengenharia do SoftwareReengenharia do Software

Page 59: Evolução e Manutenção do Software

66Eliane Martins - Instituto de Computação - UNICAMP

Reengenharia de SoftwareReengenharia de Software

Reorganização e modificação do sw com o objetivo de melhorar sua manutenibilidade

• Atividade denominada também de manutenção preventiva ou ainda, rejuvenescimento do sw.

Page 60: Evolução e Manutenção do Software

67Eliane Martins - Instituto de Computação - UNICAMP

Re-engenharia: porquê?Re-engenharia: porquê?

• Para aumentar a sobrevida de sistemas legados:– Em 1990 foi estimada a existência de 120 milhões de LOCs, 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, ainda restam muitos em uso ...

• Em 2005: por volta de 200 bilhões de LOC em Cobol, com uma redução da ordem de dezenas de milhares por ano

– ... e novos programas são desenvolvidos, usando processos ágeis de desenvolvimento, nos quais estruturação e documentação não são a principal preocupação

Page 61: Evolução e Manutenção do Software

68Eliane Martins - Instituto de Computação - UNICAMP

Engenharia Progressiva e ReengenhariaEngenharia Progressiva e Reengenharia

Especificação do Sistema

Projeto e Implementação

Novo sistema

Engenharia Progressiva

SistemaAntigo

Compreensão e Transformação

SistemaMelhorado

Reengenharia

Page 62: Evolução e Manutenção do Software

69Eliane Martins - Instituto de Computação - UNICAMP

AtividadesAtividades

• Engenharia reversa• Conversão de código• Reestruturação dos dados• Reestruturação do código• Remodularização do código Refatoração

Page 63: Evolução e Manutenção do Software

70Eliane Martins - Instituto de Computação - UNICAMP

Engenharia ReversaEngenharia Reversa

• Consiste em analisar o código com o objetivo de obter o projeto e especificação do sistema– para obter a especificação é necessária intervenção manual

• Cria banco de dados com informações sobre o sistema

• É mais eficaz quando feita com auxílio de ferramentas: engenharia reversa, análise estática, referências cruzadas, navegadores de programas (program browsers) ...

Page 64: Evolução e Manutenção do Software

71Eliane Martins - Instituto de Computação - UNICAMP

Engenharia reversa de código - exemploEngenharia reversa de código - exemplo

program X;var …function F1(..): tipo;…procedure P2(…);begin… = … F1(…) …;end;procedure P1(…);begin … P2(…);…end;

Descrição da função F1(…):Parâmetros de entrada:Parâmetros de saída:

Valor de retorno:O quê faz a função:

function F1( .): tipo;

Page 65: Evolução e Manutenção do Software

72Eliane Martins - Instituto de Computação - UNICAMP

Engenharia reversa de código - exemploEngenharia reversa de código - exemplo

program X;var …function F1(..): tipo;…procedure P2(…);begin… = … F1(…) …;end;procedure P1(…);begin … P2(…);…end;

X

P2

P1

F1

function F1( .): tipo;

Page 66: Evolução e Manutenção do Software

73Eliane Martins - Instituto de Computação - UNICAMP

Procedimento (exemplo)Procedimento (exemplo)

Código fonte

original

Transformação Código XML

Biblioteca dedados XML

Transformação XML UML

(XMI)

Baseia-se em conjunto de regras para o mapeamento de elementos da linguagem A (representados em XML) para elementos da UML

DiagramasUML

Page 67: Evolução e Manutenção do Software

74Eliane Martins - Instituto de Computação - UNICAMP

Conversão de códigoConversão de código

Código original

Identificar diferenças

entre as linguagens

Projetar um tradutor

Converter automaticamente

Ajustar manualmente

Código original Código convertido

Page 68: Evolução e Manutenção do Software

75Eliane Martins - Instituto de Computação - UNICAMP

ExemploExemplo

Processo de conversão com XML

Código fonte

original

Transformação Código XML

Biblioteca dedados XML

Transformação XML Código

Código fonte

convertido

Page 69: Evolução e Manutenção do Software

76Eliane Martins - Instituto de Computação - UNICAMP

Re-estruturação dos dadosRe-estruturação dos dados

• O que é– processo de analisar e reorganizar estruturas de dados

(eventualmente, os valores dos dados) de um programa

• Objetivo– melhorar compreensão dos dados usados pelo programa

– facilitar o controle dos dados

Page 70: Evolução e Manutenção do Software

77Eliane Martins - Instituto de Computação - UNICAMP

Problemas com dados legadosProblemas 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

• Inconsistência dos dados

Page 71: Evolução e Manutenção do Software

78Eliane Martins - Instituto de Computação - UNICAMP

Inconsistência dos Dados (1)Inconsistência dos Dados (1)

• 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

Page 72: Evolução e Manutenção do Software

79Eliane Martins - Instituto de Computação - UNICAMP

Inconsistência dos Dados (2)Inconsistência dos Dados (2)

• 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

Page 73: Evolução e Manutenção do Software

80Eliane Martins - Instituto de Computação - UNICAMP

Reestruturação de códigoReestruturação de código

• Com a manutenção a estrutura do código vai sendo corrompida, o que dificulta o entendimento e futuras alterações.

• O código pode ser reestruturado, automaticamente, 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, seleção (if-the-else, case) e repetição (while-repeat-for)

• Condições também podem ser simplificadas, o que facilita o seu entendimento

Page 74: Evolução e Manutenção do Software

81Eliane Martins - Instituto de Computação - UNICAMP

Código espagueteCódigo espaguete

Start: get (time_on, time_off, time, setting, temp, switch)if switch = off goto Off if switch = on goto Ongoto Cntrld

Off: if heating_status = on goto Sw_offgoto Loop

On: if heating_status = off goto Sw_ongoto Loop

Cntrld: if time = time_on goto Onif time = time_off goto Offif time < time_on goto Startif time > time_off goto Startif temp > setting goto Offif temp < setting goto On

Sw_off: heating_status := offgoto Switch

Sw_on: heating_status := onSwitch: Switch_heating ( )Loop: goto Start

Page 75: Evolução e Manutenção do Software

82Eliane Martins - Instituto de Computação - UNICAMP

Código estruturadoCódigo estruturado

loop-- get: atribui valores para variáveis conforme-- o ambiente do sistemaget (time_on, time_off, time, setting, temp, switch)case switch of when On if heating_status = off then

Switch_Heating ( ); heating_status := On; end_if; when Controlled if time time_on and time time_off then

if temp > setting and heating_status = On thenSwitch_heating ( ); heating_status := Off;

elsif temp < setting and heating_status = Off thenSwitch_heating ( ); heating_status := On;

end_if; end_if; end_case;end loop;

Page 76: Evolução e Manutenção do Software

83Eliane Martins - Instituto de Computação - UNICAMP

Simplificação de condiçõesSimplificação de condições

-- Condição complexa:

if not (A > B and (C < D or not ( E > F) ) )...

-- Condição simplificada:

if (A <= B and (C>= D or E > F)...

Page 77: Evolução e Manutenção do Software

84Eliane Martins - Instituto de Computação - UNICAMP

Re-modularização de códigoRe-modularização de código

• O que é:– Processo de reorganização de um programa de forma que partes

relacionadas sejam 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

– Refatoração

Page 78: Evolução e Manutenção do Software

85Eliane Martins - Instituto de Computação - UNICAMP

RefatoraçãoRefatoração

Ver slides

Page 79: Evolução e Manutenção do Software

86Eliane Martins - Instituto de Computação - UNICAMP

ExercíciosExercícios

• Para os programas dados a seguir, responda:– O que fazem os programas?

– Quanto tempo levou para entendê-los?

– Qual o grau de modularidade dos programas?

– Qual a legibilidade?

– Que sugestões voce daria para melhorar a manutenibilidade deles?

Page 80: Evolução e Manutenção do Software

87Eliane Martins - Instituto de Computação - UNICAMP

Programa 1 Programa 1

Entradas: t, i, cSaídas: ac, loccm := 1;f := Tam;ac := falso;while cm f and not ac do m := (cm + f) / 2; if c > t [m] then cm := m + 1 else if c = t [m] then ac := verdade; loc := m else f := m - 1end while;

Page 81: Evolução e Manutenção do Software

88Eliane Martins - Instituto de Computação - UNICAMP

Programa 2Programa 2Entradas: x1, x2, x3: inteiros; x4: charSaídas: w, x1if x1 > x2 then w := 100 else w := 10;while x1 > x3 do x3 := x3 * w end while;case x4 “A” - “J”: w := 10 “K” - “T”: w := 20 “U” - “Z”: w := 30end case;

if x2 > x1 and x2 < x3 and x4 = “S” then w := 10 else w := 20;if x1 < w or x2 < w then write w else write x1;