O documento discute como refatorar código legado para torná-lo mais saudável através de testes de unidade, refactoring usando padrões como GRASP, e exemplos. Os pilares para a transição incluem testes de unidade, refactoring contínuo usando técnicas como extrair métodos e classes, e aplicar padrões como especialista e variações protegidas. O objetivo é diminuir acoplamentos, simplificar manutenção e tornar o código mais limpo e flexível.
2. Apresentação
Pós – Graduando em Engenharia de Software pela InfNet/FGV
Graduado em Analise e Desenvolvimento de Sistemas pela FTECBrasil
Desenvolvedor Java
Desenvolvedor PHP
Scrum Master
PO - Product Owner
Blog: joleques.blogspot.com.br
Twitter: @jorgeoleques
GitHub : github.com/joleques
Email : joleques@gmail.com
3. Sumario
Introdução
Fatores de Risco
Sinais
Transição
Pilares Para Transição
Teste de Unidade
Refactory
Padrões GRASP
Exemplos e Discussão
Conclusão
4. Introdução
“Quando um software traz consigo um comportamento complexo e é
desprovido de um bom design, torna-se difícil refatorar ou combinar
elementos. Começam a aparecer duplicações a partir do momento em
que o desenvolvedor não mostra confiança em prever todas as
implicações de uma mudança”.(Erick Evans, 2010,DDD 2ºEd)
6. Fatores de Risco
Regras de Negócio espalhada
Código Ruim
Domínio mal modelado
Falta da Linguagem Única
Problemas na OO
7. Sinais
1. Corpo
Sensação de pressão no peito
Suor frio e intenso
Desconforto acompanhado de tontura
Desmaio
Náuseas
Falta de ar
8. Sinais
2. Software
Manutenção difícil
Código duplicado
Método longo
Classe grande
Lista de parâmetros longa
Código difícil de entender
Dificuldade de adicionar novas funcionalidades
9. Coração Saudável
Cada Coisa no seu lugar
Código Limpo
Linguagem Ubiqua
Coberto por testes
10. Transição
Escrever código que possa ser entendido e executado por uma máquina é fácil,
todavia escrever código que possa ser lido e entendido por humanos é bem
mais complexo (Joshua Kerievsky)
12. Teste de Unidade
“ Para refatorar, o primeiro passo é sempre o
mesmo. Eu preciso construir um conjunto sólido de
testes para cada sessão do código...”
“...eu sou humano e ainda cometo erros. Então, eu
preciso de testes sólidos.”
Martin Fowler, 1999
14. Benefícios do TDD
Maior qualidade do código
Diminuição dos BUGs
Orientação na criação do modelo
Maior cobertura do código
15. Refactory
“Devido à dificuldade para se manter um código considerado
ruim, um cronograma de entrega de um produto poderá atrasar
em vista do tempo extra que será necessário para realizar a
tarefa de alteração no código.”(MARTIN, 2009).
17. Tipos de Refatoração
Extrair Método (Extract Method)
Mover Método (Move Method)
Mover Atributo (Move Field')
Extrair Classe (Extract Class)
Encapsular Atributo (Encapsulate Field)
Renomear Método (Rename Method)
Subir Método (Pull Up Method)
Subir Atributo (Pull Up Field)
Descer Método (Push Down Method)
Descer Atributo (Push Down Field)
Extrair Sub-classe (Extract Subclass)
Extrair Super-classe (Extract Superclass)
18. Padrões GRASP (General
Responsibility Assignment Software
Pattern)
"Entender responsabilidades é essencial para o
bom projeto orientado a objetos". (Martin
Fowler)
19. GRASP
Princípios Fundamentais para a Atribuição de
Responsabilidades em projetos OO
Qualidade
Não sobrecarregar Objetos
20. Padrões GRASP
Especialista da Informação
Criador
Alta Coesão
Baixo Acoplamento
Controler
Polimorfismo
Invenção Pura
Indireção
Variações Protegidas
21. Exemplos e Discussão
Quem ama a prática sem teoria é como um marinheiro
navegando sem os lemes e sem bussola, não sabendo assim
nunca onde vai chegar..(Leonardo da Vinci)
22. Exemplos e Discussão - Expert
Problema: Dado que exista pelo menos uma vaga nas
salas da prova escolhida pelo candidato, quando o
candidato realizar a inscrição, então o candidato
deve ser inserido na sala e a inscrição realizada.
Especialista da Informação
Alta Coesão
Baixo Acoplamento
27. Exemplos e Discussão - Expert
5. Análise
Diminuição das dependências
Flexibilidade do Código
Código Limpo e Claro
28. Exemplos e Discussão - Variação Protegida
Problema: Dado que eu saiba o tipo de fase,
Quando eu listar as Provas ou os Candidatos, Então
o sistema pode apresentar as provas para o
candidato escolher ou montar relatório com os
candidatos
Variação Protegida
Polimorfismo
34. Exemplos e Discussão - Variação Protegida
5. Análise
Diminuição das dependências
Flexibilidade do Código
Diminuição da Complexidade
Código Limpo e Claro