REFACTORY  REFATORAÇÃO
Princípios - Definição <ul><li>Refactoring  (Refatoração): mudança feita na estrutura interna do software para torná-lo fá...
Conceito <ul><li>Refatoração/ Refatoring: </li></ul><ul><ul><li>É o processo de reescrever um programa de computador para ...
Origens <ul><li>Surgiu na comunidade de Smalltalk nos anos 80/90. </li></ul><ul><li>Desenvolveu-se formalmente na Universi...
Refatoração sempre existiu? <ul><li>Não tinha nome </li></ul><ul><li>Estava implícito </li></ul><ul><li>A novidade, era po...
Refatorar... Gera: <ul><li>Simplicidade </li></ul><ul><li>Flexibilidade </li></ul><ul><li>Clareza </li></ul><ul><li>Desemp...
<ul><li>Na Engenharia de Software (E.S.), refatorar, significa:  </li></ul><ul><li>Modificar o código fonte, sem mudar seu...
Melhorias não-funcionais: <ul><li>Simplicidade </li></ul><ul><li>Clareza </li></ul><ul><li>- “O compilador não se importa ...
<ul><li>Não repara erros </li></ul><ul><li>Não adiciona novas funcionalidades </li></ul><ul><li>Melhora a compreensão, con...
Por que refatorar? <ul><li>Melhora o design </li></ul><ul><li>Facilita a compreensão </li></ul><ul><li>Ajuda a achar bugs ...
Porquê fazer refactoring? <ul><li>Facilitar a inserção de código novo e novas funcionalidades. </li></ul><ul><li>Melhorar ...
Quando refatorar? <ul><li>Quando se quer adicionar funcionalidades </li></ul><ul><li>- Para melhor compreender o código a ...
<ul><li>OBS.: A refatoração, não é feita só para os exemplos anteriores. Dependendo da empresa que trabalha e do grau de m...
<ul><li>“Qualquer tolo pode escrever código que um computador pode compreender, mas bons programadores escrevem códigos qu...
Passos de Refatoração <ul><li>Cada passo é trivial </li></ul><ul><li>Demora alguns segundos ou alguns poucos minutos para ...
Aplicações na Refatoração <ul><li>Melhorar o código antigo e/ou feito por outros programadores. </li></ul><ul><li>Desenvol...
O Primeiro Passo em Qualquer Refatoração <ul><li>Antes de começar a refatoração, verifique se você tem um conjunto sólido ...
Mais passos para testes <ul><li>Testes de unidade: ajudam (mas não garantem) a não introduzir bugs no código. </li></ul><u...
Para uma boa Refatoração  Os passos devem estar bem definidos: <ul><li>Identificar o local a ser refatorado  </li></ul><ul...
Principio Básico <ul><li>Refatoração muda o programa em passos pequenos. Se você comete um erro, é fácil consertar. </li><...
Principio Básico <ul><li>Bad-smells  =>  Refatoração a ser aplicada </li></ul><ul><li>Código duplicado => Extração do méto...
Mais Princípios Básicos <ul><li>Os testes tem que ser automáticos e ser capazes de se auto-verificarem. </li></ul><ul><li>...
Dicas... <ul><li>Quando você tem que adicionar uma funcionalidade a um programa e o código do programa não está estruturad...
Exemplos de Refatoração <ul><li>Mudanças no nome das variáveis </li></ul><ul><li>Pequenas mudanças arquiteturais </li></ul...
Direções possíveis para refactoring <ul><li>Refactoring “to” (para) ... </li></ul><ul><li>Refactoring “towards” (no sentid...
Formato dos Refactorings <ul><li>Nome </li></ul><ul><li>Resumo </li></ul><ul><li>Motivação </li></ul><ul><li>Mecânica </li...
Refactoring + Patterns <ul><li>&quot; Refatorar para padrões, é um método revolucionário para a aplicação de padrões que c...
Design patterns <ul><li>Existem muitas formas possíveis de implementar/ instanciar um padrão de software, umas mais simple...
Catálogo de “Refactorings to Patterns” <ul><li>Creation = Criação  </li></ul><ul><li>Simplification = Simplificação  </li>...
Vantagens de Refatorar:   <ul><li>Redução de código duplicado </li></ul><ul><li>Aumenta a simplicidade do código </li></ul...
<ul><li>OBS.: Aparentemente, o assunto que diz respeito à refatoração, somente apresenta vantagens em sua utilização, mas ...
Desvantagens   de Refatorar :  <ul><li>Banco de Dados  </li></ul><ul><li>Alterando interfaces  </li></ul><ul><li>OBS.: Mes...
Dificuldades de refactoring <ul><li>Bases de dados </li></ul><ul><li>- Aplicações fortemente dependentes dos esquemas das ...
Rename Marque o nome do atributo, propriedade, método ou parâmetro; clique com o botão direito do mouse em cima da marcaçã...
Será exibido a caixa de dialogo para Preview: Clique no Botão &quot;Apply&quot;.
Reordenar Parâmetros
 
 
Extrair Método Marcar o texto a ser extraído para um método
Resultado da Extração do Método
“Go To Definition”
Remover Parâmetros   Selecionar e clicar no botão “Remove”
Após o clique do botão &quot;Remove&quot; Clique do botão &quot;OK&quot;
O Parâmetro foi removido
Encapsular Campo Atributo da classe a ser encapsulada
Tela de propriedades do campo a ser encapsulado
Tela de Preview
Resultado Encapsulamento
Extrair Interface
Resultado de Extração da Interface
Interface Criada
Promover Variável Local para Parâmetros
Resultado da Variável
Refatoração... <ul><li>...Atualmente é um dos preceitos básicos de X.P. </li></ul><ul><li>...Não está limitado, qualquer u...
Referências <ul><li>M. Fowler -  Refactoring Home </li></ul><ul><li>http://www.refactoring.com </li></ul><ul><li>Joshua Ke...
<ul><li>Workshop sobre Refactory </li></ul><ul><li>Alin H. S. Rocha </li></ul><ul><ul><li>Estagiário .Net </li></ul></ul><...
Próximos SlideShares
Carregando em…5
×

Refactory Worshop

1.369 visualizações

Publicada em

Esse trabalho foi criado para realizar um workshop na empresa em que trabalho... espero que tenha ficado bom e que alguém aproveite! Valeu.

1 comentário
1 gostou
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
1.369
No SlideShare
0
A partir de incorporações
0
Número de incorporações
17
Ações
Compartilhamentos
0
Downloads
29
Comentários
1
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Refactory Worshop

  1. 1. REFACTORY REFATORAÇÃO
  2. 2. Princípios - Definição <ul><li>Refactoring (Refatoração): mudança feita na estrutura interna do software para torná-lo fácil de entender e simples de modificar, sem mudar o comportamento observável. </li></ul><ul><li>Transformações pequenas, que feitas ao longo do tempo e em seqüência, alteram a estrutura do código. </li></ul>
  3. 3. Conceito <ul><li>Refatoração/ Refatoring: </li></ul><ul><ul><li>É o processo de reescrever um programa de computador para melhorar sua estrutura ou legibilidade, preservando assim seu comportamento. (Martin Fowler) </li></ul></ul>
  4. 4. Origens <ul><li>Surgiu na comunidade de Smalltalk nos anos 80/90. </li></ul><ul><li>Desenvolveu-se formalmente na Universidade de Illinois em Urbana-Champaign. (EUA) </li></ul><ul><li>Grupo do Prof. Ralph Johnson. </li></ul><ul><li>- Tese de PhD de William Opdyke (1992). </li></ul><ul><li>- John Brant e Don Roberts: </li></ul><ul><li>- The Refactoring Browser Tool </li></ul><ul><li>Kent Beck (XP) na indústria. </li></ul>
  5. 5. Refatoração sempre existiu? <ul><li>Não tinha nome </li></ul><ul><li>Estava implícito </li></ul><ul><li>A novidade, era poder criar um vocabulário comum e catalogá-los </li></ul><ul><li>Utilizar mais sistematicamente </li></ul><ul><li>Aprender novas técnicas, ensinar uns aos outros </li></ul>Sim.
  6. 6. Refatorar... Gera: <ul><li>Simplicidade </li></ul><ul><li>Flexibilidade </li></ul><ul><li>Clareza </li></ul><ul><li>Desempenho </li></ul>
  7. 7. <ul><li>Na Engenharia de Software (E.S.), refatorar, significa: </li></ul><ul><li>Modificar o código fonte, sem mudar seu comportamento externo. E é algumas vezes informalmente referido como &quot; cleaning it up &quot; </li></ul>
  8. 8. Melhorias não-funcionais: <ul><li>Simplicidade </li></ul><ul><li>Clareza </li></ul><ul><li>- “O compilador não se importa se o código está feio ou limpo, porém os seres humanos sim&quot; </li></ul>
  9. 9. <ul><li>Não repara erros </li></ul><ul><li>Não adiciona novas funcionalidades </li></ul><ul><li>Melhora a compreensão, consistência interna, documentação e clareza do código fonte. Tornando-o mais fácil para manutenções futuras. </li></ul>Refatoring/ Refatoração
  10. 10. Por que refatorar? <ul><li>Melhora o design </li></ul><ul><li>Facilita a compreensão </li></ul><ul><li>Ajuda a achar bugs </li></ul><ul><li>Ajuda a programar mais rápido (XP) </li></ul>
  11. 11. Porquê fazer refactoring? <ul><li>Facilitar a inserção de código novo e novas funcionalidades. </li></ul><ul><li>Melhorar o desenho do código existente. </li></ul><ul><li>Compreender melhor o código. </li></ul><ul><li>Tornar o código mais agradável de manipular, menos aborrecido de lidar, tanto individualmente como colaborativamente. </li></ul><ul><li>“ Limpar e arrumar” o código. </li></ul><ul><li>Baixar o “défice de design” devido a não se fazer na altura certa e dose certa: o remover de duplicação, simplificar e clarificar o intuito do código. </li></ul><ul><li>Evoluir uma arquitetura existente. </li></ul>
  12. 12. Quando refatorar? <ul><li>Quando se quer adicionar funcionalidades </li></ul><ul><li>- Para melhor compreender o código a modificar </li></ul><ul><li>- Para melhorar o design do código existente e assim facilitar a adição das novas funcionalidades </li></ul><ul><li>Quando se precisa consertar um bug </li></ul><ul><ul><li>Para melhor compreender o código com o “bug” e assim o identificar </li></ul></ul><ul><li>Quando se está revisando o código </li></ul><ul><li>Melhorar o código existente, ou Jogar fora e começar do 0 (zero). </li></ul><ul><ul><li>“ É de sua responsabilidade analisar a situação e decidir quando será a hora exata de optar por um ou por outro”. </li></ul></ul>
  13. 13. <ul><li>OBS.: A refatoração, não é feita só para os exemplos anteriores. Dependendo da empresa que trabalha e do grau de maturidade do software que ela produz, você deve estar acostumado a usar um padrão definido para desenvolver o código, isto surge conforme o tempo. O que significa que existe código não-padronizado e já padronizado </li></ul>
  14. 14. <ul><li>“Qualquer tolo pode escrever código que um computador pode compreender, mas bons programadores escrevem códigos que os seres humanos possam compreender.&quot; [Fowler 2000] </li></ul>
  15. 15. Passos de Refatoração <ul><li>Cada passo é trivial </li></ul><ul><li>Demora alguns segundos ou alguns poucos minutos para ser realizado </li></ul><ul><li>Operações sistemáticas e óbvias </li></ul><ul><li>Ter um bom vocabulário de refatoração e aplicar criteriosamente e sistematicamente </li></ul>
  16. 16. Aplicações na Refatoração <ul><li>Melhorar o código antigo e/ou feito por outros programadores. </li></ul><ul><li>Desenvolvimento incremental... À la XP (Programação Extrema) </li></ul><ul><ul><li>O passo de refatoração é tão simples que parece que ele não ajudará muito. </li></ul></ul><ul><ul><li>Quando juntado 50 passos bem escolhidos em seqüência, o código melhora rapidamente </li></ul></ul>
  17. 17. O Primeiro Passo em Qualquer Refatoração <ul><li>Antes de começar a refatoração, verifique se você tem um conjunto sólido de testes para verificar a funcionalidade do código a ser refatorado. </li></ul><ul><li>Refatorações podem adicionar erros. </li></ul><ul><li>Os testes vão ajudá-lo a detectar erros se eles forem criados. </li></ul>
  18. 18. Mais passos para testes <ul><li>Testes de unidade: ajudam (mas não garantem) a não introduzir bugs no código. </li></ul><ul><li>Uso dos framework X-Unit : jUnit, pyUnit, cppUnit ... </li></ul><ul><li>Automação de refactorings aumentou quando as verificações formais foram feitas. </li></ul>
  19. 19. Para uma boa Refatoração Os passos devem estar bem definidos: <ul><li>Identificar o local a ser refatorado </li></ul><ul><li>Definir as refatorações a serem implementadas </li></ul><ul><li>Garantir a integridade do comportamento observável </li></ul><ul><li>Aplicar as refatorações escolhidas </li></ul><ul><li>Confirmar a preservação do comportamento observável após a implementação da refatoração </li></ul>
  20. 20. Principio Básico <ul><li>Refatoração muda o programa em passos pequenos. Se você comete um erro, é fácil consertar. </li></ul><ul><li>Três repetições? Está na hora de refatorar. </li></ul><ul><li>Quando você sente que é preciso escrever um comentário para explicar o código melhor, tente refatorar primeiro. </li></ul>
  21. 21. Principio Básico <ul><li>Bad-smells => Refatoração a ser aplicada </li></ul><ul><li>Código duplicado => Extração do método, Substituir o algoritmo </li></ul><ul><li>Método muito longo => Extract Method, Replace Temp With Query, Introduce Parameter Object </li></ul><ul><li>Classe muito grande => Extract Class, Extract Subclass, Extract Interface, Duplicate Observed Data </li></ul><ul><li>Intimidade Inapropriada => Move Method, Move Field, Replace Inheritance With Delegation </li></ul><ul><li>Comentários => Extract Method, Introduce Assertion </li></ul><ul><li>Muitos parâmetros => Replace Parameter with Method, Preseve Whole Object, Introduce Parameter Object </li></ul>Quando há “bad-smells” (código cheira) mau, refatore-o!
  22. 22. Mais Princípios Básicos <ul><li>Os testes tem que ser automáticos e ser capazes de se auto-verificarem. </li></ul><ul><li>A saída deve ser ok </li></ul><ul><ul><li>“ Ok” ou </li></ul></ul><ul><ul><li>A lista precisa das coisas que deram errado. </li></ul></ul><ul><ul><li>Quando os testes funcionam, sua saída deve ser apenas uma lista enxuta de “OKs”. </li></ul></ul><ul><li>Uma bateria de testes é um exterminador de bugs que pode lhe economizar muito tempo. </li></ul><ul><li>Quando você recebe um aviso de bug, primeiro escreva um teste que reflita esse bug. </li></ul><ul><li>Pense nas situações limítrofes onde as coisas podem dar errado e concentre os seus testes ali. </li></ul>
  23. 23. Dicas... <ul><li>Quando você tem que adicionar uma funcionalidade a um programa e o código do programa não está estruturado de uma forma que torne a implementação desta funcionalidade conveniente, primeiro refatore de modo a facilitar a implementação da funcionalidade, e só depois, implemente-a. </li></ul>
  24. 24. Exemplos de Refatoração <ul><li>Mudanças no nome das variáveis </li></ul><ul><li>Pequenas mudanças arquiteturais </li></ul><ul><li>Encapsular o código repetido em um novo método </li></ul><ul><li>Generalização de métodos </li></ul><ul><ul><li>raisQuadrada (float x) => raiz (float x, int n) </li></ul></ul>
  25. 25. Direções possíveis para refactoring <ul><li>Refactoring “to” (para) ... </li></ul><ul><li>Refactoring “towards” (no sentido de) ... </li></ul><ul><li>Refactoring “away” (de) ... </li></ul>
  26. 26. Formato dos Refactorings <ul><li>Nome </li></ul><ul><li>Resumo </li></ul><ul><li>Motivação </li></ul><ul><li>Mecânica </li></ul><ul><li>Exemplos </li></ul>
  27. 27. Refactoring + Patterns <ul><li>&quot; Refatorar para padrões, é um método revolucionário para a aplicação de padrões que combina a utilidade de padrões de design com a descoberta do desenvolvimento iterativo e refatoração continua .” </li></ul>
  28. 28. Design patterns <ul><li>Existem muitas formas possíveis de implementar/ instanciar um padrão de software, umas mais simples, outras mais complexas e mais próximas da estrutura sugerida no padrão. </li></ul><ul><li>Implementações minimalistas fazem parte de prática de design </li></ul><ul><li>Evolutivo. </li></ul><ul><li>Muitas vezes, uma implementação não-baseada em design patterns tem que evoluir para poder incluir um padrão. </li></ul><ul><li>Neste caso, pode-se fazer refactoring do design para uma implementação simples de um padrão. </li></ul><ul><li>Isto é “Refactoring to Patterns”! </li></ul>
  29. 29. Catálogo de “Refactorings to Patterns” <ul><li>Creation = Criação </li></ul><ul><li>Simplification = Simplificação </li></ul><ul><li>Generalization = Generalização </li></ul><ul><li>Protection = Defesa/ proteção </li></ul><ul><li>Accumulation = Acumulação </li></ul><ul><li>Utilities = Utilitários </li></ul>
  30. 30. Vantagens de Refatorar: <ul><li>Redução de código duplicado </li></ul><ul><li>Aumenta a simplicidade do código </li></ul><ul><li>Melhora o desempenho </li></ul><ul><li>Aumenta a legibilidade do código </li></ul><ul><li>Melhora o projeto de software </li></ul>
  31. 31. <ul><li>OBS.: Aparentemente, o assunto que diz respeito à refatoração, somente apresenta vantagens em sua utilização, mas à medida que o assunto segue se difundindo pela comunidade, desvantagens aparecem. </li></ul>
  32. 32. Desvantagens de Refatorar : <ul><li>Banco de Dados </li></ul><ul><li>Alterando interfaces </li></ul><ul><li>OBS.: Mesmo apresentando limitações, a utilização da refatoração não é invalidada, até mesmo porque as vantagens obtidas são extremamente válidas. </li></ul>
  33. 33. Dificuldades de refactoring <ul><li>Bases de dados </li></ul><ul><li>- Aplicações fortemente dependentes dos esquemas das BDs </li></ul><ul><li>Alterações na interface das classes </li></ul><ul><li> - Quando não se tem acesso a todo o código que usa uma interface, em que se pretende alterar o refactoring dessa interface, pode ser complicado. </li></ul><ul><ul><ul><ul><li>  Não publicar interfaces prematuramente. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Modificar o seu código de propriedade políticas, é um bom refactoring. </li></ul></ul></ul></ul><ul><li>O Código Não Funciona </li></ul><ul><li>- Nesta situação, de nada serve o refactoring... </li></ul>
  34. 34. Rename Marque o nome do atributo, propriedade, método ou parâmetro; clique com o botão direito do mouse em cima da marcação e selecione a opção &quot;Refactor&quot; e a sub-opção &quot;Rename&quot;;Abrirá a seguinte caixa de dialogo: No campo &quot;New name&quot; especifique o nome desejado para ser renomeado e clique em &quot;OK&quot;.
  35. 35. Será exibido a caixa de dialogo para Preview: Clique no Botão &quot;Apply&quot;.
  36. 36. Reordenar Parâmetros
  37. 39. Extrair Método Marcar o texto a ser extraído para um método
  38. 40. Resultado da Extração do Método
  39. 41. “Go To Definition”
  40. 42. Remover Parâmetros Selecionar e clicar no botão “Remove”
  41. 43. Após o clique do botão &quot;Remove&quot; Clique do botão &quot;OK&quot;
  42. 44. O Parâmetro foi removido
  43. 45. Encapsular Campo Atributo da classe a ser encapsulada
  44. 46. Tela de propriedades do campo a ser encapsulado
  45. 47. Tela de Preview
  46. 48. Resultado Encapsulamento
  47. 49. Extrair Interface
  48. 50. Resultado de Extração da Interface
  49. 51. Interface Criada
  50. 52. Promover Variável Local para Parâmetros
  51. 53. Resultado da Variável
  52. 54. Refatoração... <ul><li>...Atualmente é um dos preceitos básicos de X.P. </li></ul><ul><li>...Não está limitado, qualquer um pode e deve usar em qualquer contexto </li></ul><ul><li>...Pode ser usado em qualquer linguagem (orientada a objeto) </li></ul>
  53. 55. Referências <ul><li>M. Fowler - Refactoring Home </li></ul><ul><li>http://www.refactoring.com </li></ul><ul><li>Joshua Kerievsky - Refactoring to Patterns - </li></ul><ul><li>http://industriallogic.com/xp/refactoring/catalog.html </li></ul><ul><li>Sven Gorts e Philippe T’Seyen - Refactoring Thumbnails </li></ul><ul><li>http://www.refactoring.be/thumbnails.html </li></ul><ul><li>Gene Garcia - Smells to Refactorings http://wiki.java.net/bin/view/People/SmellsToRefactorings </li></ul><ul><li>Eclipse - http://www.eclipse.org </li></ul><ul><li>Refactoring Seminários do aSide @ UFBA </li></ul><ul><ul><li>Universidade Federal da Bahia </li></ul></ul><ul><li>Mauricio B. C. Vieira, Christina von Flach </li></ul><ul><li>Chavez (vieira|flach)@im.ufba.br </li></ul><ul><li>Bibliografia: Martin Fowler. Refactoring: improving the design of existing code. Addison-Wesley. 2000. </li></ul><ul><li>Revista .Net Magazine </li></ul><ul><ul><li>Ano 03 – 38ª edição </li></ul></ul><ul><ul><li>Matéria: Refactoring – Conceito e aplicação prática </li></ul></ul>
  54. 56. <ul><li>Workshop sobre Refactory </li></ul><ul><li>Alin H. S. Rocha </li></ul><ul><ul><li>Estagiário .Net </li></ul></ul><ul><ul><li>Email: AROCHA@DBA.COM.BR </li></ul></ul>

×