SlideShare uma empresa Scribd logo
Princípios da
Refatoração
Prof. Alberto Costa Neto
DComp/UFS
alberto@ufs.br
2
O modelo em cascata
a mentira – Edward Yourdon
 Primeiro, levante os requisitos
 Então, analise-os
 Então, projete o sistema
 Então, codifique
 Então, teste
 Então, você terminou (exceto para manutenção)
 O fato:
 Software nunca é “finalizado”
3
A realidade
“Build one to throw away.” - Fred Brooks
 Nunca fará tudo certo de primeira. Pode ser que
não entendamos:
 O domínio do problema
 Os requisitos do usuário
 Como o sistema irá mudar
 Resultado
 Projeto original é inadequado
 Sistema se torna intrincado e frágil
 Mudanças se tornam mais freqüentes e mais difíceis
4
Desenvolvimento Evolutivo
“Grow, don’t build software.” - Fred Brooks
 Prototipagem
 Solidifica os requisitos do usuário
 Esboço do projeto do sistema
 Expansão
 adicione funcionalidade
 Consolidação
 corrija defeitos do projeto
 Introduza novas abstrações
5
Imagine um Mundo Onde ...
 Suas tarefas começam do “zero” – não há
preocupações com compatibilidade com
sistemas pré-existentes
 Você entende o domínio
 Sua empresa pagará até que você esteja
satisfeito com os resultados
 Condições ótimas para aplicar técnicas de
orientação a objetos
Um lindo sonho, né?
6
Um Cenário Mais Realista
 Você é requisitado para estender ou
modificar uma peça de software existente
 Você não tem um entendimento completo do
que você está fazendo
 Você está pressionado por deadlines
Como enfrentar mudanças?
7
Uma abordagem para estender
software
 Re-escreva o programa!
 Aplica a experiência no projeto
 Corrija os erros do passado
 Criativo e divertido!
 Porém...
 O programa fará tudo o que já fazia?
Corretamente?
 Quem pagará a conta?
8
Outra Abordagem
 Copie e Modifique!
 Conveniente
 Demonstra reuso (sem realmente entender o que
se está reusando)!
 Porém...
 Erros são propagados
 Programas ficam inchados
 O Projeto é corrompido
 Custo incremental de mudanças escala
9
Uma Abordagem Meio Termo
 Re-estruture (refatore) o software existente:
 Comece com o software existente como base
 Aplique insights do projeto; extraia abstrações e
componentes reusáveis
 Clarifique a arquitetura do software
 Prepare o programa para que as adições sejam mais
fáceis.
 Então, adicione as novas características!
Algumas vantagens:
 Valoriza investimentos passados
 Reduz duplicação
 Simplifica o programa
10
Refatoração
 “Processo de alteração de um sistema de software
de modo que o comportamento externo do código
não mude, mas que sua estrutura interna seja
melhorada” [Fowler]
 “É uma maneira disciplinada de aperfeiçoar o
código que minimiza a chance de introdução de
falhas” [Fowler]
 “Melhora o projeto de código, após este ter sido
escrito” [Fowler]
Mudanças substanciais ao software podem ser
caracterizadas com refatorações mais adições
11
Refatoração
 Problemas comuns de projeto
 Código duplicado
 Código obscuro
 Código complicado
12
Entraves para Refatorar
 Complexidade
 Entender o projeto é difícil
 Mudar o projeto de um sistema existente pode ser difícil
 Introdução de erros frustram o propósito
 Calendários
 Todo projeto está sobre pressão de tempo
 Somos pagos para adicionar novas funcionalidades
 Se não está quebrado, não conserte
 Refatoração pode tomar muito tempo
13
Por que devo Refatorar
 Refatoração melhora o Projeto
 O software fica mais fácil de entender
 Ajuda a encontrar bugs
 Ajuda a programar mais rápido
14
Quando devo Refatorar
 A regra de três
 Refatore quando for adicionar uma função
 Quando precisa consertar um bug
 Durante revisões de código – quando está
querendo entender o código
 Existem também forças para quando não
refatorar porém haverá uma dívida a ser
paga
15
Conseqüências de não
refatorar
 Mudanças são feitas sobre o código original
 O projeto tende a se corromper
 Código fica cada vez mais obscuro
 Mudanças cada vez mais caras e freqüentes
 Big Ball of Mud (Brian Foote  Joseph Yoder)
 Sistema que parece não ter uma
arquitetura definida
16
Pré-requisitos para Refatorar
 Como você está mudando o código base, é
IMPORTANTE validar com testes
 Testar depois de Refatorar
 Também existe o tempo para refatorar e o
tempo para esperar
17
Táticas para Refatorar
 Pequenos passos
 Decomponha em pequenas Refatorações
 Teste antes e depois de cada pequeno passo
 Use ferramentas (ex. JUnit e outras)
 Adote ferramentas que automatizam
refatoração (ex. Eclipse)

Mais conteúdo relacionado

Semelhante a 04_Principios_Refatoracao.pdf

Extreme programming
Extreme programmingExtreme programming
Extreme programmingJ. C.
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
XP Programming
XP ProgrammingXP Programming
XP ProgrammingCJR, UnB
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareEmerson Henrique
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareLuciano Almeida
 
GCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS ÁgilGCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS ÁgilMisael Santos
 
Trabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de SistemasTrabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de SistemasWANDERSON JONER
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Softwareguest2f8cba
 
Integração entre times e o desafio de desenvolver uma aplicação (v2)
Integração entre times e o desafio de desenvolver uma aplicação (v2)Integração entre times e o desafio de desenvolver uma aplicação (v2)
Integração entre times e o desafio de desenvolver uma aplicação (v2)Victor Pantoja
 
Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Claudia Melo
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software PressmanSimoneinfo
 
Desenvolvimento Ágil com Scrum - Palestra Digitalks
Desenvolvimento Ágil com Scrum - Palestra DigitalksDesenvolvimento Ágil com Scrum - Palestra Digitalks
Desenvolvimento Ágil com Scrum - Palestra DigitalksRômulo Gomes
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 

Semelhante a 04_Principios_Refatoracao.pdf (20)

Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Aula 4- Engenharia de Software
Aula 4- Engenharia de SoftwareAula 4- Engenharia de Software
Aula 4- Engenharia de Software
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Tees Final
Tees FinalTees Final
Tees Final
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
GCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS ÁgilGCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS Ágil
 
Trabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de SistemasTrabalho individual 5 semestre Analise de Sistemas
Trabalho individual 5 semestre Analise de Sistemas
 
Mitos do Desenvolvimento de Software
Mitos do Desenvolvimento de SoftwareMitos do Desenvolvimento de Software
Mitos do Desenvolvimento de Software
 
Integração entre times e o desafio de desenvolver uma aplicação (v2)
Integração entre times e o desafio de desenvolver uma aplicação (v2)Integração entre times e o desafio de desenvolver uma aplicação (v2)
Integração entre times e o desafio de desenvolver uma aplicação (v2)
 
Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
Desenvolvimento Ágil com Scrum - Palestra Digitalks
Desenvolvimento Ágil com Scrum - Palestra DigitalksDesenvolvimento Ágil com Scrum - Palestra Digitalks
Desenvolvimento Ágil com Scrum - Palestra Digitalks
 
3 Scrum
3 Scrum3 Scrum
3 Scrum
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
APS - RAD x Ágeis
APS - RAD x ÁgeisAPS - RAD x Ágeis
APS - RAD x Ágeis
 

04_Principios_Refatoracao.pdf

  • 1. Princípios da Refatoração Prof. Alberto Costa Neto DComp/UFS alberto@ufs.br
  • 2. 2 O modelo em cascata a mentira – Edward Yourdon Primeiro, levante os requisitos Então, analise-os Então, projete o sistema Então, codifique Então, teste Então, você terminou (exceto para manutenção) O fato: Software nunca é “finalizado”
  • 3. 3 A realidade “Build one to throw away.” - Fred Brooks Nunca fará tudo certo de primeira. Pode ser que não entendamos: O domínio do problema Os requisitos do usuário Como o sistema irá mudar Resultado Projeto original é inadequado Sistema se torna intrincado e frágil Mudanças se tornam mais freqüentes e mais difíceis
  • 4. 4 Desenvolvimento Evolutivo “Grow, don’t build software.” - Fred Brooks Prototipagem Solidifica os requisitos do usuário Esboço do projeto do sistema Expansão adicione funcionalidade Consolidação corrija defeitos do projeto Introduza novas abstrações
  • 5. 5 Imagine um Mundo Onde ... Suas tarefas começam do “zero” – não há preocupações com compatibilidade com sistemas pré-existentes Você entende o domínio Sua empresa pagará até que você esteja satisfeito com os resultados Condições ótimas para aplicar técnicas de orientação a objetos Um lindo sonho, né?
  • 6. 6 Um Cenário Mais Realista Você é requisitado para estender ou modificar uma peça de software existente Você não tem um entendimento completo do que você está fazendo Você está pressionado por deadlines Como enfrentar mudanças?
  • 7. 7 Uma abordagem para estender software Re-escreva o programa! Aplica a experiência no projeto Corrija os erros do passado Criativo e divertido! Porém... O programa fará tudo o que já fazia? Corretamente? Quem pagará a conta?
  • 8. 8 Outra Abordagem Copie e Modifique! Conveniente Demonstra reuso (sem realmente entender o que se está reusando)! Porém... Erros são propagados Programas ficam inchados O Projeto é corrompido Custo incremental de mudanças escala
  • 9. 9 Uma Abordagem Meio Termo Re-estruture (refatore) o software existente: Comece com o software existente como base Aplique insights do projeto; extraia abstrações e componentes reusáveis Clarifique a arquitetura do software Prepare o programa para que as adições sejam mais fáceis. Então, adicione as novas características! Algumas vantagens: Valoriza investimentos passados Reduz duplicação Simplifica o programa
  • 10. 10 Refatoração “Processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada” [Fowler] “É uma maneira disciplinada de aperfeiçoar o código que minimiza a chance de introdução de falhas” [Fowler] “Melhora o projeto de código, após este ter sido escrito” [Fowler] Mudanças substanciais ao software podem ser caracterizadas com refatorações mais adições
  • 11. 11 Refatoração Problemas comuns de projeto Código duplicado Código obscuro Código complicado
  • 12. 12 Entraves para Refatorar Complexidade Entender o projeto é difícil Mudar o projeto de um sistema existente pode ser difícil Introdução de erros frustram o propósito Calendários Todo projeto está sobre pressão de tempo Somos pagos para adicionar novas funcionalidades Se não está quebrado, não conserte Refatoração pode tomar muito tempo
  • 13. 13 Por que devo Refatorar Refatoração melhora o Projeto O software fica mais fácil de entender Ajuda a encontrar bugs Ajuda a programar mais rápido
  • 14. 14 Quando devo Refatorar A regra de três Refatore quando for adicionar uma função Quando precisa consertar um bug Durante revisões de código – quando está querendo entender o código Existem também forças para quando não refatorar porém haverá uma dívida a ser paga
  • 15. 15 Conseqüências de não refatorar Mudanças são feitas sobre o código original O projeto tende a se corromper Código fica cada vez mais obscuro Mudanças cada vez mais caras e freqüentes Big Ball of Mud (Brian Foote Joseph Yoder) Sistema que parece não ter uma arquitetura definida
  • 16. 16 Pré-requisitos para Refatorar Como você está mudando o código base, é IMPORTANTE validar com testes Testar depois de Refatorar Também existe o tempo para refatorar e o tempo para esperar
  • 17. 17 Táticas para Refatorar Pequenos passos Decomponha em pequenas Refatorações Teste antes e depois de cada pequeno passo Use ferramentas (ex. JUnit e outras) Adote ferramentas que automatizam refatoração (ex. Eclipse)