You are on page 1of 9

Disciplina Arquitectura de Sistemas de Software

Arquitectura de Sistemas de Software

Ademar Aguiar www.fe.up.pt/~aaguiar ademar.aguiar@fe.up.pt

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Refactoring

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

O que Refactoring?

A ideia tem origem na tese de Bill Opdyke, 1992. A refactoring is a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior [Fowler 2000]

O processo de refactoring envolve a eliminao de duplicao, a simplificao de lgica complexa e clarificao de cdigo, tornando-o mais fcil de entender. Exemplos: alterar nome de varivel, dividir um mtodo grande, instanciar um padro de design.

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Como fazer refactoring?


Refactoring implica alterar cdigo funcional logo necessrio ter testes para nos dar segurana de que o refactoring no alterou a funcionalidade do sistema. Os testes automatizados permitem-nos rapidamente confirmar que a funcionalidade do cdigo alterado se mantm. Deve-se fazer refactoring de forma contnua sempre que se ache que o cdigo deve ser evoludo, e no por fases, e em pequenos passos sucessivos para evitar a introduo de defeitos. Pequenos refactorings podem demorar segundos ou minutos. Grandes refactorings podem demorar horas ou meses, mas devero ser sempre feitos em pequenos passos.

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Porqu fazer refactoring?


Facilitar a insero de cdigo novo e novas funcionalidades. Melhorar o desenho do cdigo existente. Compreender melhor o cdigo. Tornar o cdigo mais agradvel de manipular, menos aborrecido de lidar, tanto individualmente como colaborativamente. Limpar e arrumar o cdigo. Baixar o dfice de design devido a no se fazer na altura certa e dose certa: o remover de duplicao, simplificar e clarificar o intuito do cdigo. Evoluir uma arquitectura existente.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. [Fowler 2000]
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Quando fazer refactoring?


Quando se adicionam novas funcionalidades


Para melhor compreender o cdigo a modificar Para melhorar o design do cdigo existente e assim facilitar a adio das novas funcionalidades

Quando se pretende encontrar um bug


Para melhor compreender o cdigo com o bug e assim o identificar

Quando se est a fazer reviso de cdigo

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Dificuldades de refactoring

Bases de dados
Aplicaes fortemente dependentes dos esquemas das BDs

Alteraes na interface das classes


Quando no se tem acesso a todo o cdigo que usa uma interface que se pretende alterar o refactoring dessa interface pode ser complicado.
- Don't publish interfaces prematurely. - Modify your code ownership policies to smooth refactoring.

O cdigo no funciona
Nesta situao de nada serve fazer refactoring...

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Refactoring e Design

As actividades de refactoring e design so complementares.


Design: da ideia melhor soluo Refactoring: da ideia soluo mais razovel.

A aplicao contnua de refactoring conduz a design mais simples, resultando numa forma mais eficaz de na prtica se chegar a uma boa soluo de design. A nfase a mesma: idealizar a melhor soluo. Na prtica, implementa-se apenas a soluo mais simples que funciona, pois sabe-se que se pode evoluir essa soluo quando for efectivamente necessrio faz-lo.

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Refactoring e Performance

Antes de se tentar melhorar a performance de cdigo ajuda muito fazer-se refactoring para eliminar duplicao, simplificar e melhor entender o cdigo e s depois afinar a sua performance.

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

Formato dos Refactorings


Nome Resumo Motivao Mecnica Exemplos

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

10

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Catlogo de Refactorings

Add Parameter Change Bidirectional Association to Unidirectional Change Reference to Value Change Unidirectional Association to Bidirectional Change Value to Reference Collapse Hierarchy Consolidate Conditional Expression Consolidate Duplicate Conditional Fragments Convert Dynamic to Static Construction by Gerard M. Davison Convert Static to Dynamic Construction by Gerard M. Davison Decompose Conditional Duplicate Observed Data Eliminate Inter-Entity Bean Communication (Link only) Encapsulate Collection Encapsulate Downcast Encapsulate Field Extract Class

Introduce A Controller (Link only) Introduce Assertion Introduce Business Delegate (Link only) Introduce Explaining Variable Introduce Foreign Method Introduce Local Extension Introduce Null Object Introduce Parameter Object Introduce Synchronizer Token (Link only) Localize Disparate Logic (Link only) Merge Session Beans (Link only) Move Business Logic to Session (Link only) Move Class by Gerard M. Davison Move Field Move Method Parameterize Method Preserve Whole Object

http://www.refactoring.com/catalog/index.html
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

11

Refactoring to Patterns

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

12

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Refactoring + Patterns

"Refactoring to patterns is a revolutionary approach to applying patterns that combines the top-down utility of design patterns with the bottom-up discovery of iterative development and continuous refactoring.

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

13

Design patterns

Existem muitas formas possveis de implementar/instanciar um padro de software, umas mais simples, outras mais complexas e mais prximas da estrutura sugerida no padro. Implementaes minimalistas fazem parte do prtica de design evolutivo. Muitas vezes, uma implementao no-baseada em design patterns tem que evoluir para poder incluir um padro. Neste caso, pode-se fazer refactoring do design para uma implementao simples de um padro.

Isto Refactoring to Patterns!

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

14

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Direces possveis para refactoring


Refactoring to (para) ... Refactoring towards (no sentido de) ... Refactoring away (de) ...

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

15

Catlogo de Refactorings to Patterns


Creation Simplification Generalization Protection Accumulation Utilities

http://www.industriallogic.com/xp/refactoring/catalog.html

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

16

Ademar Aguiar, FEUP, Maro de 2005

Disciplina Arquitectura de Sistemas de Software

Referncias

William F. Opdyke, Ph.D. diss., "Refactoring Object-Oriented Frameworks. " University of Illinois at Urbana-Champaign, 1992. Fowler, Martin. Refactoring: Improving the Design of Existing Code. Boston, MA: Addison-Wesley, 2000. Kerievsky, Joshua. Refactoring to Patterns. Addison-Wesley, 2004. http://www.refactoring.com http://www.industriallogic.com/xp/refactoring/catalog.html

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

17

Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005

18

Ademar Aguiar, FEUP, Maro de 2005

You might also like