Evolução e
Manutenção do
Software
Nov/2009
Eliane Martins - Instituto de Computação - UNICAMP
Tópicos
• Evolução ou manutenção
• Manutenção de Software
• Tipos de manutenção
• Dificuldades
• Manutenibilidade
Eliane Martins - Instituto de Computação - UNICAMP
2
Referê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”. McGrawHill, 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.
Eliane Martins - Instituto de Computação - UNICAMP
3
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
Eliane Martins - Instituto de Computação - UNICAMP
4
Sobre o valor do software
• Sw tem valor quando
 atende aos requisitos
Eliane Martins - Instituto de Computação - UNICAMP
5
Sobre o valor do software
• Sw tem valor quando
 atende aos requisitos
• Valor do sw  devido a
 falhas
 mudanças nos requisitos
tempo
Eliane Martins - Instituto de Computação - UNICAMP
6
Sobre o valor do software
• Sw tem valor quando
 atende aos requisitos
 é fácil de entender e de usar
Eliane Martins - Instituto de Computação - UNICAMP
7
Sobre o valor do software
• Sw tem valor quando
• Valor do sw  devido a
 atende aos requisitos
 falhas
 mudanças nos requisitos
 é fácil de entender e de usar
 complexidade
tempo
Eliane Martins - Instituto de Computação - UNICAMP
8
Sobre o valor do software
• Sw tem valor quando
 atende aos requisitos
 é fácil de entender e de usar
 é eficiente
Eliane Martins - Instituto de Computação - UNICAMP
9
Sobre o valor do software
• Sw tem valor quando
• Valor do sw  devido a
 atende aos requisitos
 falhas
 mudanças nos requisitos
 é fácil de entender e de usar
 complexidade
 é eficiente
 ineficiência
tempo
Eliane Martins - Instituto de Computação - UNICAMP
10
Sobre o valor do software
• Sw tem valor quando
 atende aos requisitos
 é fácil de entender e de usar
 é eficiente
 usa tecnologia atual
Eliane Martins - Instituto de Computação - UNICAMP
11
Sobre o valor do software
• Sw tem valor quando
• Valor do sw  devido a
 atende aos requisitos
 falhas
 mudanças nos requisitos
 é fácil de entender e de usar
 complexidade
 é eficiente
 ineficiência
 usa tecnologia atual
 tecnologia obsoleta
tempo
Eliane Martins - Instituto de Computação - UNICAMP
12
Sobre o valor do software
• Valor do sw  devido a
• Sw tem valor quando
 atende aos requisitos
 falhas
 mudanças nos requisitos
 complexidade
alterações
 é fácil de entender e de usar
 ineficiência
 é eficiente
 tecnologia obsoleta
 usa tecnologia atual
tempo
Eliane Martins - Instituto de Computação - UNICAMP
13
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
Eliane Martins - Instituto de Computação - UNICAMP
14
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 
taxa de falhas
hw
mortalidade
infantil
desgaste
tempo
Eliane Martins - Instituto de Computação - UNICAMP
15
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 
sw
mortalidade
infantil
desgaste
taxa de falhas
taxa de falhas
hw
ideal
tempo
Eliane Martins - Instituto de Computação - UNICAMP
tempo
16
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 
sw
mortalidade
infantil
desgaste
alteração
taxa de falhas
taxa de falhas
hw
real
ideal
tempo
Eliane Martins - Instituto de Computação - UNICAMP
tempo
17
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
Eliane Martins - Instituto de Computação - UNICAMP
18
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
Eliane Martins - Instituto de Computação - UNICAMP
19
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)
Eliane Martins - Instituto de Computação - UNICAMP
20
Tópicos
• Evolução ou manutenção
• Manutenção de Software
• Tipos de manutenção
• Dificuldades
• Manutenibilidade
Eliane Martins - Instituto de Computação - UNICAMP
21
Manutenção
• Definição
– é o processo de modificação de um produto após a
entrega
• Tipos
– corretiva
– adaptativa
– perfectiva
Eliane Martins - Instituto de Computação - UNICAMP
22
Custos com manutenção
90
80
70
60
50
40
30
20
10
0
90
75
55
40
início anos início anos final anos início anos
90
80
80
70
Eliane Martins - Instituto de Computação - UNICAMP
Dados de 1990
23
Distribuição dos custos de manutenção
melhorias doc
6%
melhorias
código outras
3%
4%
melhorias
usuários
43%
emergenciais
12%
rotineiras
9%
adaptação
dos dados
17%
mudanças hw,
S.Op.
6%
Internet, maio/2002
Eliane Martins - Instituto de Computação - UNICAMP
24
Distribuição dos custos por categoria
corretiva
17%
perfectiva
65%
adaptativa
18%
Dados de 1990
Eliane Martins - Instituto de Computação - UNICAMP
25
Tópicos
• Evolução ou manutenção
• Manutenção de Software
• Tipos de manutenção
• Dificuldades
• Manutenibilidade
Eliane Martins - Instituto de Computação - UNICAMP
26
Porquê os custos são altos?
• Fatores:
– usuário
– contrato
– equipe de desenvolvimento
– sistema
– produto
Eliane Martins - Instituto de Computação - UNICAMP
27
Porquê os custos são altos?
• Fatores:
– usuário
– contrato
Pouco treinamento
Mudança de objetivos:
necessidades do usuário evoluem;
novos usuários
– equipe de desenvolvimento
– sistema
– produto
Eliane Martins - Instituto de Computação - UNICAMP
28
Porquê os custos são altos?
• Fatores:
Contrato manutenção separado do
contrato de desenvolvimento, podendo
inclusive ser dado a outra empresa
– contrato

pouco incentivo para produção de sw
– equipe de desenvolvimento
fácil de manter
– sistema
– usuário
– produto
Eliane Martins - Instituto de Computação - UNICAMP
29
Porquê os custos são altos?
• Fatores:
– usuário
– contrato
ausência dos desenvolvedores
falta de tempo
falta de motivação
falta de experiência
– equipe de desenvolvimento
– sistema
– produto
Eliane Martins - Instituto de Computação - UNICAMP
30
Porquê os custos são altos?
• Fatores:
– usuário
domínio da aplicação
dependência do ambiente externo
– contrato
instabilidade do hw
alterações sem controle
– equipe de desenvolvimento
– sistema
– produto
Eliane Martins - Instituto de Computação - UNICAMP
31
Porquê os custos são altos?
• Fatores:
– usuário
– contrato
idade
qualidade da documentação
– equipe de desenvolvimento
estilo de programação
acoplamento entre os módulos
– sistema
linguagem de programação
V&V deficiente
– produto
Eliane Martins - Instituto de Computação - UNICAMP
32
Como 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
Eliane Martins - Instituto de Computação - UNICAMP
33
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]
Eliane Martins - Instituto de Computação - UNICAMP
34
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]
Eliane Martins - Instituto de Computação - UNICAMP
35
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]
Eliane Martins - Instituto de Computação - UNICAMP
36
Tópicos
• Evolução ou manutenção
• Manutenção de Software
• Tipos de manutenção
• Dificuldades
• Manutenibilidade
Eliane Martins - Instituto de Computação - UNICAMP
37
Manutenibilidade
• 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)
Eliane Martins - Instituto de Computação - UNICAMP
38
Consideraçõ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 ?
Eliane Martins - Instituto de Computação - UNICAMP
39
O que afeta a manutenibilidade
•
•
•
•
•
•
Processo de desenvolvimento
Documentação
Qualidade do sw
Disponibilidade dos testes
Disponibilidade das ferramentas de desenvolvimento
Controle de alterações
Eliane Martins - Instituto de Computação - UNICAMP
40
O que afeta a manutenibilidade
•
•
•
•
•
•
Processo de desenvolvimento
Documentação
Manutenibilidade deve ser considerada
Qualidade do sw
ao longo de todo desenvolvimento.
Disponibilidade
testes
Pb.:dos
como
convencer gerentes de que
manutenibilidade  ganhos
Disponibilidade
das ferramentas de desenvolvimento
Controle de alterações
Eliane Martins - Instituto de Computação - UNICAMP
41
O que afeta a manutenibilidade
•
•
•
•
•
•
Processo de desenvolvimento
Documentação
Qualidade do sw
Disponibilidade dos testes
documentação desatualizada, incompleta ou
Disponibilidade
das ferramentas
de manutenção
desenvolvimento
inexistente
 custo com

(47% - 62% tempo para compreensão de
Controle de alterações
programas e documentos)
Eliane Martins - Instituto de Computação - UNICAMP
[Pigosrki 1996]
42
O que afeta a manutenibilidade
•
•
•
•
•
•
Processo de desenvolvimento
Documentação
Qualidade do sw
Disponibilidade dos testes
qualidade   custo com manutenção 
Disponibilidade
das ferramentas
Aspectos
de qualidade:de desenvolvimento
- estrutura do sw
Controle de alterações
- estilo de programação
- sistemática de V&V
Eliane Martins - Instituto de Computação - UNICAMP
43
O que afeta a manutenibilidade
•
•
•
•
•
•
Processo de desenvolvimento
Documentação
Qualidade do sw
Disponibilidade dos testes
Disponibilidade das ferramentas de desenvolvimento
Facilita realização de testes, em
Controle de alterações
especial os de regressão
Eliane Martins - Instituto de Computação - UNICAMP
44
O que afeta a manutenibilidade
•
•
•
•
•
•
Processo de desenvolvimento
Documentação
Qualidade do sw
Disponibilidade dos testes
Disponibilidade das ferramentas de desenvolvimento
Controle deFacilita
alterações
realização modificações, permitindo atualizar:
- modelos de análise e projeto; documentação
- código fonte (existência do compilador)
- testes, entre outros
Eliane Martins - Instituto de Computação - UNICAMP
45
Como estimar manutenibilidade
• Manutenibilidade pode ser medida
• Diversas métricas propostas:
– padrão IEEE
– outras
Eliane Martins - Instituto de Computação - UNICAMP
46
Mé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
Eliane Martins - Instituto de Computação - UNICAMP
48
Métricas
Subfator
tipo de métrica
• corrigibilidade Contagem
de falhas
esforço
métrica
•
•
•
•
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
Eliane Martins - Instituto de Computação - UNICAMP
49
Métricas
Subfator
• testabilidade
tipo de métrica
métrica
cobertura
•
•
•
cobertura do código
cobertura dos requisitos
grau de completeza do plano de
testes
esforço
•
•
•
previsão de recursos
previsão de esforço
produtividade
Eliane Martins - Instituto de Computação - UNICAMP
50
Métricas
Subfator
tipo de métrica
• expansibilidade modificações
esforço
métrica
•
•
•
•
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
Eliane Martins - Instituto de Computação - UNICAMP
51
Outras métricas
• Diversos autores (academia e indústria):
– Schneidewind 1987
– Lewis e Henry 1989
– Oman 1991
entre outros
Eliane Martins - Instituto de Computação - UNICAMP
52
Mé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
Eliane Martins - Instituto de Computação - UNICAMP
58
Modularidade para sistemas
procedimentais
nº de procedimentos
Mproc =
Exemplo:
Programa
ProgA
ProgB
KLOCS
LOC
1000
1000
nº funções M
2
0,002
12
0,012
[Peters e Pedrycz 2001]
Eliane Martins - Instituto de Computação - UNICAMP
59
Modularidade para sistemas OO
nº de métodos da classe
Mclasse =
Msist =
KLOCS
nº médio de métodos por classe
nº médio de KLOCS por classe
[Peters e Pedrycz 2001]
Eliane Martins - Instituto de Computação - UNICAMP
60
Legibilidade
• Legibilidade:
– de documentos:
FOG = 0,4 
nº de palavras
nº de sentenças
+ % de palavras com ( 3+) sílabas
– de código:
L = | 0,295 id - 0,499 LOC + 0,13 c 
complexidade ciclomática
comprimento médio dos identificadores
[Peters e Pedrycz 2001]
Eliane Martins - Instituto de Computação - UNICAMP
61
Ferramentas 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
• ...
Eliane Martins - Instituto de Computação - UNICAMP
63
Recomendaçõ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
Eliane Martins - Instituto de Computação - UNICAMP
64
Reengenharia do Software
Eliane Martins - Instituto de Computação - UNICAMP
65
Reengenharia 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.
Eliane Martins - Instituto de Computação - UNICAMP
66
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
Eliane Martins - Instituto de Computação - UNICAMP
67
Engenharia Progressiva e Reengenharia
Engenharia Progressiva
Especificação
do Sistema
Projeto e
Implementação
Novo
sistema
Reengenharia
Sistema
Antigo
Compreensão e
Transformação
Eliane Martins - Instituto de Computação - UNICAMP
Sistema
Melhorado
68
Atividades
•
•
•
•
•
Engenharia reversa
Conversão de código
Reestruturação dos dados
Reestruturação do código
Remodularização do código
Eliane Martins - Instituto de Computação - UNICAMP
Refatoração
69
Engenharia 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) ...
Eliane Martins - Instituto de Computação - UNICAMP
70
Engenharia reversa de código - exemplo
program X;
var
…
function F1(
.): tipo;
F1(..):
…
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:
Eliane Martins - Instituto de Computação - UNICAMP
71
Engenharia reversa de código - exemplo
program X;
var
…
function F1(
.): tipo;
F1(..):
…
procedure P2(…);
begin
…
= … F1(…) …;
end;
procedure P1(…);
begin
…
P2(…);
…
end;
Eliane Martins - Instituto de Computação - UNICAMP
X
…
P1
P2
F1
72
Procedimento (exemplo)
Baseia-se em conjunto de
regras para o mapeamento
de elementos da linguagem
A (representados em XML)
para elementos da UML
Transformação
Código  XML

Código
fonte
original


Biblioteca de
dados XML
Transformação
XML  UML
(XMI)

Diagramas
UML
Eliane Martins - Instituto de Computação - UNICAMP
73
Conversão de código
Código original
Código original
Identificar
diferenças
entre as
linguagens
Projetar
um tradutor
Converter
automaticamente
Eliane Martins - Instituto de Computação - UNICAMP
Código convertido
Ajustar
manualmente
74
Exemplo
Processo de conversão com XML
Código
fonte
original
Código
fonte
convertido

Transformação
Código  XML

Biblioteca de
dados XML

Transformação
XML  Código

Eliane Martins - Instituto de Computação - UNICAMP
75
Re-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
Eliane Martins - Instituto de Computação - UNICAMP
76
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
• Inconsistência dos dados
Eliane Martins - Instituto de Computação - UNICAMP
77
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
Eliane Martins - Instituto de Computação - UNICAMP
78
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
Eliane Martins - Instituto de Computação - UNICAMP
79
Reestruturaçã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
Eliane Martins - Instituto de Computação - UNICAMP
80
Código espaguete
Start:
Off:
On:
Cntrld:
get (time_on, time_off, time, setting, temp, 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
Eliane Martins - Instituto de Computação - UNICAMP
Sw_off:
Sw_on:
Switch:
Loop:
heating_status := off
goto Switch
heating_status := on
Switch_heating ( )
goto Start
81
Código estruturado
loop
-- get: atribui valores para variáveis conforme
-- o ambiente do sistema
get (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 then
Switch_heating ( ); heating_status := Off;
elsif temp < setting and heating_status = Off then
Switch_heating ( ); heating_status := On;
end_if;
end_if;
end_case;
end loop;
Eliane Martins - Instituto de Computação - UNICAMP
82
Simplificaçã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)...
Eliane Martins - Instituto de Computação - UNICAMP
83
Re-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
Eliane Martins - Instituto de Computação - UNICAMP
84
Refatoração
Ver slides
Eliane Martins - Instituto de Computação - UNICAMP
85
Exercí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?
Eliane Martins - Instituto de Computação - UNICAMP
86
Programa 1
Entradas: t, i, c
Saídas: ac, loc
cm := 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 - 1
end while;
Eliane Martins - Instituto de Computação - UNICAMP
87
Programa 2
Entradas: x1, x2, x3: inteiros;
x4: char
Saídas: w, x1
if 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 := 30
end 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;
Eliane Martins - Instituto de Computação - UNICAMP
88
Download

evolucao_manut_reeng - Instituto de Computação