• Nenhum resultado encontrado

Refatoração: Melhorando a Qualidade de Código Pré-Existente. Cursos de Verão 2008 IME/USP Mariana Bravo & Hugo Corbucci

N/A
N/A
Protected

Academic year: 2021

Share "Refatoração: Melhorando a Qualidade de Código Pré-Existente. Cursos de Verão 2008 IME/USP Mariana Bravo & Hugo Corbucci"

Copied!
26
0
0

Texto

(1)

Refatoração:

Melhorando a Qualidade

de Código Pré-Existente

Cursos de Verão 2008 – IME/USP

www.agilcoop.org.br

(2)

Refatoração

Uma modificação no sistema que não altera o

seu comportamento funcional, mas melhora sua estrutura interna.

● Limpa o código minimizando as chances de

introduzir erros.

Melhorar o design depois que o código foi

(3)

copyleft agilcoop 2008 3

De onde vem?

● Surgiu na comunidade de Smalltalk nos anos

80/90.

● Desenvolveu-se formalmente na Universidade de

Illinois em Urbana-Champaign.

● Grupo do Prof. Ralph Johnson.

– Tese de PhD de William Opdyke (1992). – John Brant e Don Roberts:

The Refactoring Browser Tool

(4)

O espírito da refatoração

(5)

copyleft agilcoop 2008 5

O espírito da refatoração

(refatoração)

(6)

O espírito da refatoração

(refatoração)

(7)

copyleft agilcoop 2008 7

(8)

Extrair método

● Transforma um fragmento de código em um

método com um nome explicativo.

● Motivação:

– Diminuir e facilitar o entendimento de trecho de

código.

– Aumentar as chances de reutilização do novo

(9)

copyleft agilcoop 2008 9

Renomear variável

● Muda o nome de uma variável para expressar

melhor o seu propósito

● Motivação:

– Não é fácil entender a função da variável em seu

(10)

Dinâmica da refatoração

● Cada mudança é simples...

● Mas seu efeito acumulado pode melhorar muito

o design e o código

● É construindo o sistema que podemos

(11)

copyleft agilcoop 2008 11

Refatorar para...

Melhorar o design do software

● Tornar o software mais fácil de entender ● Encontrar falhas mais facilmente

(12)

Quando refatorar

● Sempre que você precisar fazer algo e o código

estiver atrapalhando:

– Na terceira vez, refatore

– Quando adiciona funcionalidade – Quando corrige um erro

– Quando revisa o código

● Quando o código cheira mau

“If it stinks, change it.” (Se feder, troque-o.)

(13)

copyleft agilcoop 2008 13

Alguns maus cheiros

● Nomes de variáveis obscuros ● Código duplicado

● Método muito longo ● Classe muito grande

● Intimidade inapropriada ● Comentários

(14)

Primeiro passo: testes

● Antes de refatorar, tenha um conjunto sólido de

testes para garantir que o comportamento não seja alterado.

● Refatorações podem adicionar erros.

– porém, como são feitas em pequenos passos, é

fácil recuperar-se de uma falha

● Os testes ajudam a detectar erros se eles

forem criados.

● Testes têm que ser automáticos e ser capazes

(15)

copyleft agilcoop 2008 15

(16)

Mover método

● Move um método que utiliza mais

funcionalidades de outra classe do que aquela em que se encontra.

● Motivação:

– Uma classe tem muitos comportamentos – O acoplamento entre classes é muito forte

(17)

copyleft agilcoop 2008 17

(18)

Substituir temporário com chamada

● Substitui o uso de um variável por uma

chamada a um método que realiza as operações.

● Motivação:

– Variáveis temporárias incentivam seu uso

(19)

copyleft agilcoop 2008 19

(20)

E o desempenho?

"We should forget about small efficiencies, say about 97% of

the time: premature optimization is the root of all evil."

(Devemos esquecer as pequenas eficiências em 97% do tempo: otimização prematura é a raiz de todo o mal.)

Donald Knuth

Usar profiling para encontrar os gargalos ● Otimizar apenas estes gargalos

● Código fatorado:

– Compra tempo para otimizar

(21)

copyleft agilcoop 2008 21

Dois chapéus

● Refatoração ● Adicionando

funcionalidades

(22)

Problemas com refatorações

● Refatoração de sistemas grandes ou enormes ● Refatoração com bancos de dados

● Refatoração de APIs públicas ● Quando NÃO refatorar?

– Quando é tão ruim que reescrever é melhor – Quando você está próximo de um prazo!

(23)

copyleft agilcoop 2008 23

Catálogo de Refatorações

● [Fowler, 2000] “Refatoração”, contém 72

refatorações.

● Análogo aos padrões de desenho orientado a

objetos [Gamma et al. 1995] (GoF).

● [Kerievsky, 2004] “Refactoring to patterns”,

catálogo com 27 refatorações que aplicam padrões!

(24)

Formato de refatorações nos

catálogos

Nome da refatoração.

Resumo da situação na qual ela é necessária

e o que ela faz.

Motivação para usá-la (e quando não usá-la).

Mecânica, i.e., descrição passo a passo.

(25)

copyleft agilcoop 2008 25

Ferramentas para Refatoração

● Refactoring Browser Tool.

● Dá suporte automatizado para uma série de

refatorações.

● Pode melhorar em muito a produtividade. ● Existem há vários anos para Smalltalk.

● Já há várias para C++ e Java.

● Iniciativas acadêmicas (Ralph@UIUC).

(26)

Referências

● www.refactoring.com

Martin Fowler. Refactoring: improving the

design of existing code.

Referências

Documentos relacionados