refatoração para padrões [universidade do porto ass-2004-05].paper.pdf
TRANSCRIPT
-
1Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 11
Arquitectura de Arquitectura de Sistemas de SoftwareSistemas de Software
Ademar Aguiarwww.fe.up.pt/~aaguiar
ArquitecturaArquitectura de de SistemasSistemas de Software, LEIC/MEI, 2004/2005de Software, LEIC/MEI, 2004/2005 22
Refactoring
-
2Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 33
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/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 44
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.
-
3Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 55
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/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 66
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
-
4Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 77
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/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 88
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.
-
5Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 99
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/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1010
Formato dos Refactorings
Nome
Resumo
Motivao
Mecnica
Exemplos
-
6Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1111
Catlogo de Refactorings 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
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
http://www.refactoring.com/catalog/index.html
ArquitecturaArquitectura de de SistemasSistemas de Software, LEIC/MEI, 2004/2005de Software, LEIC/MEI, 2004/2005 1212
Refactoring to Patterns
-
7Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1313
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/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1414
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!
-
8Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1515
Direces possveis para refactoring
Refactoring to (para) ...
Refactoring towards (no sentido de) ...
Refactoring away (de) ...
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1616
Catlogo de Refactorings to Patterns
Creation
Simplification
Generalization
Protection
Accumulation
Utilities
http://www.industriallogic.com/xp/refactoring/catalog.html
-
9Ademar Aguiar, FEUP, Maro de 2005
Disciplina Arquitectura de Sistemas de Software
Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1717
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/2005Arquitectura de Sistemas de Software, LEIC/MEI, 2004/2005 1818