Refatoração para Padrões [Universidade do Porto ASS-2004-05].paper.pdf

download Refatoração para Padrões [Universidade do Porto ASS-2004-05].paper.pdf

of 9

Transcript of Refatoração para Padrões [Universidade do Porto ASS-2004-05].paper.pdf

  • 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

    [email protected]

    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