Você está na página 1de 43

Evoluo

de So,ware e Refatorao
Centro de Inform-ca - Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br Slides originais elaborados por Ian Sommerville
O autor permite o uso e a modicao dos slides para ns did-cos

Mudana de so,ware
Mudana de soFware inevitvel
Novos requisitos surgem quando o soFware usado; O ambiente de negcio muda; Erros devem ser reparados; Novos computadores e equipamentos so adicionados ao sistema; O desempenho ou a conabilidade do sistema deve ser melhorada.

Um problema-chave para as organizaes a implementao e o gerenciamento de mudanas em seus sistemas.


[if977] Engenharia de SoFware - SI - CIn - UFPE 2

Importncia da evoluo
As organizaes fazem grandes inves-mentos em seus sistemas de soFware eles so a<vos cr<cos de negcios. Para manter o valor desses a-vos de negcio, eles devem ser mudados e atualizados. A maior parte do oramento de soFware nas grandes organizaes voltada para evoluo, ao invs do desenvolvimento de sistemas novos
[if977] Engenharia de SoFware - SI - CIn - UFPE 3

Dinmica da evoluo de programas


Dinmica de evoluo de programas o estudo de mudana de sistema. Lehman e Belady propuseram que havia uma srie de leis (hipteses) que se aplicavam a todos os sistemas quando eles evoluiam. Na pr-ca, so observveis, de fato, mas com ressalvas
Aplicveis principalmente a sistemas de grande porte
[if977] Engenharia de SoFware - SI - CIn - UFPE 4

Leis de Lehman
1) Manuteno um processo inevitvel.
Ambiente do sistema muda e requisitos mudam

2) Alterao do sistema degrada sua estrutura


Como evitar? Manuteno preven-va

3) Sistemas de grande porte possuem dinmica prpria (estgios iniciais de desenv.). Tamanho e complexidade dicultam alterao 4) Estado saturado. Mudanas de recursos e pessoal no tm efeito. Sistemas grandes e overhead de comunicao
[if977] Engenharia de SoFware - SI - CIn - UFPE 5

Leis de Lehman
5) Novas funcionalidades introduzem novos defeitos. No orar grandes incrementos sem pensar nas correes de defeitos 6) Declnio da qualidade e insa-sfao dos usurios 7) Aprimoramento a par-r de sistemas de feedback

[if977] Engenharia de SoFware - SI - CIn - UFPE

Ian Sommerville, Engenharia de SoFware, 8. edio. Captulo 21

[if977] Engenharia de SoFware - SI - CIn - UFPE

Manuteno de so,ware
a modicao de um programa aps ter sido colocado em uso. A manuteno normalmente no envolve mudanas considerveis na arquitetura do sistema. As mudanas so implementadas pela modicao de componentes existentes e pela adio de novos componentes ao sistema.
[if977] Engenharia de SoFware - SI - CIn - UFPE 8

A Manuteno Inevitvel
Os sistemas esto fortemente acoplados ao seu ambiente.
Quando um sistema instalado em um ambiente, ele muda esse ambiente e, portanto, mudam os requisitos de sistema.

Portanto, os sistemas DEVEM ser man-dos se forem teis em um ambiente.

[if977] Engenharia de SoFware - SI - CIn - UFPE

Tipos de manuteno
Manuteno para reparar defeitos de soFware Manuteno para adaptar o so,ware a um ambiente operacional diferente
Mudana em um sistema para corrigir decincias de maneira a atender seus requisitos. Mudana de um sistema de tal maneira que ele opere em um ambiente diferente (computador, OS, etc.) a par-r de sua implementao inicial. Modicao do sistema para sa-sfazer a novos requisitos.
[if977] Engenharia de SoFware - SI - CIn - UFPE

Manuteno para adicionar funcionalidade ao sistema ou modic-lo

10

Distribuio de esforos de manuteno

Ian Sommerville, Engenharia de SoFware, 8. edio. Captulo 21 [if977] Engenharia de SoFware - SI - CIn - UFPE 11

Custos de manuteno
Geralmente, so maiores que os custos de desenvolvimento (de 2 a 100 vezes, dependendo da aplicao). So afetados por fatores tcnicos e no tcnicos. A manuteno corrompe a estrutura do soFware, tornando a manuteno posterior mais discil.
Design Erosion

SoFware em envelhecimento pode ter altos custos de suporte (por exemplo, linguagens an-gas, compiladores, etc.).
[if977] Engenharia de SoFware - SI - CIn - UFPE 12

Fatores de custo de manuteno


Estabilidade da equipe Responsabilidade contratual
Os custos de manuteno so reduzidos se o mesmo pessoal es-ver envolvido por algum tempo. Os desenvolvedores de um sistema podem no ter responsabiidade contratual pela manuteno, portanto, no h incen-vo para projetar para mudanas futuras. O pessoal da manuteno geralmente inexperiente e tem conhecimento limitado de domnio. medida que os programas envelhecem, sua estrutura degradada e se torna mais discl de ser compreendida e modicada.
[if977] Engenharia de SoFware - SI - CIn - UFPE 13

Habilidade do pessoal

Idade e estrutura do programa

Previso de manuteno
Avaliao de quais partes do sistema podem causar problemas e ter altos custos de manuteno
A aceitao de mudana depende da facilidade de manuteno dos componentes afetados por ela; A implementao de mudanas degrada o sistema e reduz a sua facilidade de manuteno; Os custos de manuteno dependem do nmero de mudanas, e os custos de mudana dependem da facilidade de manuteno.
[if977] Engenharia de SoFware - SI - CIn - UFPE 14

Processos de evoluo
Os processos de evoluo dependem
Do -po de soFware que est sendo man-do; Dos processos de desenvolvimento usados; Das habilidades e das experincias do pessoal envolvido;

Propostas para mudana so os direcionadores para a evoluo do sistema. Metodologias mais novas no costumam ter um processo separado
[if977] Engenharia de SoFware - SI - CIn - UFPE 15

Previso de mudanas
A previso do nmero de mudanas requer o entendimento dos relacionamentos entre um sistema e seu ambiente. Sistemas fortemente acoplados requerem mudanas sempre que o ambiente mudado. Fatores que inuenciam esse relacionamento so
O nmero e a complexidade das interfaces de sistema; O nmero de requisitos de sistema inerentemente volteis; Os processos de negcio nos quais o sistema usado.
[if977] Engenharia de SoFware - SI - CIn - UFPE 16

Medidas de processo
As medies de processo podem ser usadas para avaliar a facilidade de manuteno
Nmero de solicitaes para manuteno corre-va; Tempo mdio necessrio para anlise de impacto; Tempo mdio para implementar uma solicitao de mudana; Nmero de solicitaes de mudana pendentes.

Se qualquer uma ou todas essas esto aumentando, isso pode indicar um declnio na facilidade de manuteno.
[if977] Engenharia de SoFware - SI - CIn - UFPE 17

O processo de evoluo de sistema

Ian Sommerville, Engenharia de SoFware, 8. edio. Captulo 21 [if977] Engenharia de SoFware - SI - CIn - UFPE 18

Solicitaes de mudana urgentes


Mudanas urgentes podem ter de ser implementadas sem passar por todos os estgios do processo de desenvolvimento de soFware
Se um defeito srio de sistema tem de ser reparado; Se mudanas no ambiente do sistema (por exemplo, atualizao do OS) tm efeitos inesperados; Se existem mudanas de negcio que necessitam de uma resposta muito rpida (e.g.mudana de lei)

POP Patch-Oriented Programming


hyp://www.amazon.com/gp/product/0521882869/ Podem resultar em problemas ainda piores
[if977] Engenharia de SoFware - SI - CIn - UFPE 19

Reengenharia de sistema
a reestruturao ou reescrita de parte ou de todo um sistema sem mudar sua funcionalidade.
Importante ressaltar: reestruturao de grande porte!

Aplicvel onde partes de um sistema de grande porte necessitam de manuteno freqente. Envolve a adio de esforo para tornar o sistema mais fcil de manter.
Simplicidade um obje-vo complexo

[if977] Engenharia de SoFware - SI - CIn - UFPE

20

Engenharia direta e reengenharia

Ian Sommerville, Engenharia de SoFware, 8. edio. Captulo 21 [if977] Engenharia de SoFware - SI - CIn - UFPE 21

A<vidades do processo de reengenharia


Converso de cdigo-fonte Engenharia reversa
Converter o cdigo para uma nova linguagem. Analisar o programa para compreend-lo.

Aprimoramento da estrutura de programa Modularizao de programa Reengenharia de dados

Analisar e modicar a estrutura para facilidade de entendimento. Reorganizar a estrutura do programa. Limpar e reestruturar os dados do sistema.
[if977] Engenharia de SoFware - SI - CIn - UFPE 22

Fatores do custo de reengenharia


A qualidade do soFware que deve passar pela reengenharia. O apoio de ferramentas disponveis para reengenharia. Extenso da converso de dados. A disponibilidade do pessoal especializado
Isso pode ser um problema com sistemas an-gos baseados em tecnologia que no so mais amplamente usadas.
[if977] Engenharia de SoFware - SI - CIn - UFPE 23

Leituras recomendadas
SOMMERVILLE, I. Engenharia de SoFware. 8. Ed. So Paulo: Pearson Educa-on, 2007
Captulo 21

[if977] Engenharia de SoFware - SI - CIn - UFPE

24

[if977] Engenharia de SoFware - SI - CIn - UFPE

25

Refatorao (Refactoring)
Uma [pequena] modicao no sistema que no altera o seu comportamento funcional, mas que melhora alguma qualidade no- funcional:
simplicidade exibilidade clareza

Refactoring (Substan-vo) vs. Refactoring (Verbo)


[if977] Engenharia de SoFware - SI - CIn - UFPE 26

Exemplos de Refatorao
Mudana do nome de variveis Mudanas nas interfaces dos objetos Pequenas mudanas arquiteturais Encapsular cdigo repetido em um novo mtodo Generalizao de mtodos
raizQuadrada(float x) raiz(float x,int n)
[if977] Engenharia de SoFware - SI - CIn - UFPE 27

Aplicaes
1. Melhorar cdigo an-go e/ou feito por outros programadores. 2. Desenvolvimento incremental la XP. Em geral, um passo de refatorao to simples que parece pouco -l. Mas quando se juntam 50 passos, bem escolhidos, em sequncia, o cdigo melhora radicalmente.
[if977] Engenharia de SoFware - SI - CIn - UFPE 28

Passos de Refatorao
Cada passo trivial. Demora pouco tempo para ser realizado. uma operao sistem-ca e bvia Os passos, individualmente, podem mudar o comportamento do programa
A sequncia de passos que forma a refatorao garante a preservao do comportamento

Atualmente, muitas refatoraes so automa<zadas por ferramentas


[if977] Engenharia de SoFware - SI - CIn - UFPE 29

Quando Usar Refatorao


Sempre h duas possibilidades: 1. Melhorar o cdigo existente. 2. Jogar fora e comear do 0. sua responsabilidade avaliar a situao e decidir optar por um ou por outro. Refatorao importante para desenvolvimento e evoluo!
[if977] Engenharia de SoFware - SI - CIn - UFPE 30

Catlogo de Refatoraes
[Fowler, 1999] contm 72 refatoraes. Anlogo aos padres de projeto orientado a objetos [Gamma et al. 1995] (GoF). Vale a pena gastar algumas horas com [Fowler, 1999]. (GoF obrigatrio, no tem opo).
[Fowler, 1999] Mar-n Fowler. Refactoring: Improving the Design of Exis-ng Code, Addison-Wesley, 1999.
[if977] Engenharia de SoFware - SI - CIn - UFPE 31

Dica
Quando voc tem que adicionar uma funcionalidade a um programa e o cdigo do programa no est estruturado de uma forma que torne a implementao desta funcionalidade conveniente, primeiro refatore de modo a facilitar a implementao da funcionalidade e, s depois, implemente-a.

[if977] Engenharia de SoFware - SI - CIn - UFPE

32

O Primeiro Passo em Qualquer Refatorao


Antes de comear a refatorao, verique se voc tem um conjunto slido de testes para vericar a funcionalidade do cdigo a ser refatorado. Refatoraes podem adicionar erros
At mesmo as automa<zadas

Os testes vo ajud-lo a detectar erros se eles forem criados.

[if977] Engenharia de SoFware - SI - CIn - UFPE

33

O Testador Ideal

Teste
Detalhes
ver

executar

OK
Erro

[if977] Engenharia de SoFware - SI - CIn - UFPE

34

Formato de Cada Entrada no Catlogo


Nome da refatorao. Resumo da situao na qual ela necessria e o que ela faz. Mo<vao para us-la (e quando no us-la). Mecnica, i.e., descrio passo a passo. Exemplos para ilustrar o uso.

[if977] Engenharia de SoFware - SI - CIn - UFPE

35

Extract Method (110)


Nome: Extract Method Resumo: Voc tem um fragmento de cdigo que poderia ser agrupado. Mude o fragmento para um novo mtodo e escolha um nome que explique o que ele faz. Mo<vao: uma das refatoraes mais comuns. Se um mtodo longo demais ou discil de entender e exige muitos comentrios, extraia trechos do mtodo e crie novos mtodos para eles. Isso vai melhorar as chances de reu-lizao do cdigo e vai fazer com que os mtodos que o chamam quem mais fceis de entender. O cdigo ca parecendo comentrio.
[if977] Engenharia de SoFware - SI - CIn - UFPE 36

Extract Method (110)


Mecnica:
Crie um novo mtodo e escolha um nome que explicite a sua inteno Copie o cdigo do mtodo original para o novo. Procure por variveis locais e parmetros u-lizados pelo cdigo extrado.
Se variveis locais forem usadas apenas pelo cdigo extrado, passe-as para o novo mtodo. Caso contrrio, veja se o seu valor apenas atualizado pelo cdigo. Neste caso subs-tua o cdigo por uma atribuio. Se tanto lido quando atualizado, passe-a como parmetro.

Compile e teste.
[if977] Engenharia de SoFware - SI - CIn - UFPE 37

Extract Method (110) Exemplo Sem Variveis Locais


void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; // imprime cabealho System.out.println ( *************************** ); System.out.println ( *** Dvidas do Cliente **** ); System.out.println ( *************************** ); // calcula dvidas while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } // imprime detalhes System.out.println ( nome: + _nome); System.out.println ( divida total: + divida); }
[if977] Engenharia de SoFware - SI - CIn - UFPE 38

Extract Method (110) Exemplo Com Variveis Locais


void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; imprimeCabecalho (); // calcula dvidas while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } //imprime detalhes System.out.println( nome: + _nome); System.out.println( divida total: + divida); } void imprimeCabecalho () { System.out.println ( *************************** ); System.out.println ( *** Dvidas do Cliente **** ); System.out.println ( *************************** ); }

[if977] Engenharia de SoFware - SI - CIn - UFPE

39

Extract Method (110) Exemplo COM Variveis Locais


void imprimeDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; imprimeCabecalho (); // calcula dvidas while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } imprimeDetalhes (divida); } void imprimeDetalhes (double divida) { System.out.println( nome: + _nome); System.out.println( divida total: + divida); }
[if977] Engenharia de SoFware - SI - CIn - UFPE 40

Extract Method (110) com atribuio


void imprimeDivida () { imprimeCabecalho (); double divida = calculaDivida (); imprimeDetalhes (divida); } double calculaDivida () { Enumerate e = _pedidos.elementos (); double divida = 0.0; while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); divida += cada.valor (); } return divida; }
[if977] Engenharia de SoFware - SI - CIn - UFPE 41

Extract Method (110) depois de compilar e testar


void imprimeDivida () { imprimeCabecalho (); double divida = calculaDivida (); imprimeDetalhes (divida); } double calculaDivida () { Enumerate e = _pedidos.elementos (); double resultado = 0.0; while (e.temMaisElementos ()){ Pedido cada = (Pedido) e.proximoElemento (); resultado += cada.valor (); } return resultado; }
[if977] Engenharia de SoFware - SI - CIn - UFPE 42

Extract Method (110) depois de compilar e testar


d para ficar mais curto ainda:

void imprimeDivida () { imprimeCabecalho (); imprimeDetalhes (calculaDivida ()); }

mas no necessariamente melhor pois um pouco menos claro.


[if977] Engenharia de SoFware - SI - CIn - UFPE 43

Você também pode gostar