SlideShare a Scribd company logo
1 of 53
Download to read offline
Luís Otávio Cobucci Oblonczyk - @lcobucci
Refactoring likeRefactoring like
aa BOSS!BOSS!
Programar é fácil!
Qual o problema do
código ruim?
““Como o código ruim destruiuComo o código ruim destruiu
uma empresa”uma empresa”
2 anos de desenvolvimento
+500.000 linhas de
código
2 anos de desenvolvimento
Nenhuma preocupaçãoNenhuma preocupação
com boas práticascom boas práticas
+500.000 linhas de
código
2 anos de desenvolvimento
2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos
0
20
40
60
80
100
120
Produtividade
Vamos colocarVamos colocar
pressão no time!pressão no time!
Precisamos de maisPrecisamos de mais
devs!devs!
2 meses
4 meses
6 meses
1 ano
1 ano e 6 meses
2 anos
2 anos e 3 meses
2 anos e 6 meses
0
20
40
60
80
100
120
Produtividade
2 meses
4 meses
6 meses
1 ano
1 ano e 6 meses
2 anos
2 anos e 3 meses
2 anos e 6 meses
0
20
40
60
80
100
120
Produtividade
Produtividade esperada
2 meses
4 meses
6 meses
1 ano
1 ano e 6 meses
2 anos
2 anos e 3 meses
2 anos e 6 meses
0
20
40
60
80
100
120
140
Produtividade
Produtividade esperada
Gastos
refazer tudorefazer tudo!!
Temos queTemos que
Os melhores devsOs melhores devs
foram selecionadosforam selecionados
Os outros trabalharãoOs outros trabalharão
no sistema atualno sistema atual
Solução é refatorarSolução é refatorar
O que é refatorar?
Refatoração é basicamente o
processo de alterar a
estrutura dos elementos do
software sem mudar seus
comportamentos
Para podermos
refatorar um código é
fundamental a
existência de testes
automatizados
Técnicas de refatoração
Nomes semNomes sem
sentidosentido
function z($x, $y)
{
return $x / $y;
}
RenameRename
function divide($dividend, $divisor)
{
return $dividend / $divisor;
}
RenameRename
Chamadas ouChamadas ou
expressões duplicadasexpressões duplicadas
function sendEmail($name, $email, $message)
{
getSender()->prepare($name, $email);
return getSender()->send($message);
}
Extract variableExtract variable
function sendEmail($name, $email, $message)
{
$sender = getSender()
$sender->prepare($name, $email);
return $sender->send($message);
}
Extract variableExtract variable
Classes com informaçõesClasses com informações
ou comportamentosou comportamentos
a maisa mais
class Pessoa
{
private $nome;
private $logradouro;
private $numero;
private $complemento;
private $bairro;
private $cidade;
}
Extract classExtract class
class Pessoa
{
private $nome;
private $endereco;
}
class Endereco
{
private $logradouro;
private $numero;
private $complemento;
private $bairro;
private $cidade;
}
Extract classExtract class
Métodos comMétodos com
mais de umamais de uma
tarefatarefa
class LogParser
{
const PATTERN = '([0-9]{4}-[0-9]{2}-[0-9]{2})';
public function getDayOfWeek($logLine)
{
preg_match(self::PATTERN, $logLine, $matches);
$date = new DateTime($matches[0]);
return $date->format('l');
}
}
Extract MethodExtract Method
class LogParser
{
const PATTERN = '([0-9]{4}-[0-9]{2}-[0-9]{2})';
public function getDayOfWeek($logLine)
{
return $this->getDate($logLine)->format('l');
}
protected function getDate($logLine)
{
preg_match(self::PATTERN, $logLine, $matches);
return new DateTime($matches[0]);
}
}
Extract MethodExtract Method
Herança confusaHerança confusa
class Pessoa
{
private $nome;
private $linguagensProgramacao;
}
Pull up/push downPull up/push down
class Programador extends Pessoa
{
}
class Pessoa
{
private $nome;
}
class Programador extends Pessoa
{
private $linguagensProgramacao;
}
Pull up/push downPull up/push down
Programar é fácil!
direito não é tão fácil!
Object oriented programming
Design Patterns
Object oriented programming
Design Patterns
Object oriented programming
Clean code
S.O.L.I.D. Principles
Design Patterns
Object oriented programming
Clean code
S.O.L.I.D. Principles
Design Patterns
Object oriented programming
Clean code
Software metrics
S.O.L.I.D. Principles
Design Patterns
Domain driven design
Object oriented programming
Clean code
Software metrics
S.O.L.I.D. Principles
Design Patterns
Domain driven design
Object oriented programming
Clean code
Software metrics
Precisamos treinar,Precisamos treinar,
treinar e treinar...treinar e treinar...
Considerando refatoraçãoConsiderando refatoração
comocomo obrigaçãoobrigação
Lembrando que assinamosLembrando que assinamos
tudotudo o que fazemoso que fazemos
Luís Otávio Cobucci Oblonczyk
@lcobucci
http://about.me/lcobucci
Obrigado!
http://slideshare.net/lcobucci

More Related Content

Similar to Refactoring like a BOSS!

Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroMichael Castillo Granados
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresFernando Franquini
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Rafael Ponte
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsCássio Marques
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
 
Vamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDVamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDDomingos Teruel
 
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...André Ricardo Barreto de Oliveira
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasCJR, UnB
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 

Similar to Refactoring like a BOSS! (20)

Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para DesenvolvedoresTDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
TDC2016 Boas Práticas SQL em Banco Relacional para Desenvolvedores
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Performance em javascript
Performance em javascriptPerformance em javascript
Performance em javascript
 
Relato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para RailsRelato Sobre a Migração de uma Aplicação Legada para Rails
Relato Sobre a Migração de uma Aplicação Legada para Rails
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHP
 
Vamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDVamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDD
 
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
Onde nenhum desenvolvedor jamais testou: Introduzindo testes unitários em cód...
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
Refactoring
RefactoringRefactoring
Refactoring
 
Palestra PHPSP+Locaweb 2014 - PDO
Palestra PHPSP+Locaweb 2014 - PDOPalestra PHPSP+Locaweb 2014 - PDO
Palestra PHPSP+Locaweb 2014 - PDO
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Arquitetura CSS
Arquitetura CSSArquitetura CSS
Arquitetura CSS
 
Clean Code Matters!
Clean Code Matters!Clean Code Matters!
Clean Code Matters!
 

Refactoring like a BOSS!