SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
CLEAN CODE
AUGUSTO ROSA
Code Smells - Código
Fedorento
Você já foi impedido de programar bem
por conta de um código sujo/ruim?
Code Smells - Código
Fedorento
Você já foi impedido de programar bem
por conta de um código sujo/ruim?
Você já entrou em uma classe e sentiu que
algo não cheirava bem com aquele código?
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
● Frágil - Redundante - Opaco - Falso sólido
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
● Frágil - Redundante - Opaco - Falso sólido
● Impossível de ser mantido a longo prazo
Code Smells
Code Smells
Conditional Complexity (Object Orientation Abuser)
Code Smells
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
● Como resolver?
Extrair para métodos
Extrair para campos
Code Smells
Message Chain (Couplers)
Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
Um objeto que chama outro objeto que chama outro objeto para ter uma
propriedade
Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
Um objeto que chama outro objeto que chama outro objeto para ter uma
propriedade
Code Smells
● Message Chain (Couplers)
Solução 1 - Refatorando para campos próprios
Code Smells
● Message Chain (Couplers)
Solução 2 - Utilizando Hide delegate (Delegação para objeto do domínio ou intermediário)
Code Smells
● Message Chain (Couplers)
Extrair para método
Extrair para um campo
Extrair para um objeto do domínio - Hide Delegate
Só fale com vizinhos
Pense na leitura e na organização do código
Code Smells
Long parameter list (Bloaters)
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Dificulta a leitura
Orientação a objetos não está sendo bem utilizada
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Dificulta a leitura
Orientação a objetos não está sendo bem utilizada
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Dificulta a leitura
Code Smells
● Long parameter list (Bloaters)
Solução - Refatorando para uma classe
Code Smells
● Long list parameter (Bloaters)
Utilizar uma classe quando há múltiplos parâmetros
Usar no máximo 4 parâmetros por classe (Clean Code)
Utilizar parâmetros que sejam necessário para aquele método
Pensar em objeto do domínio
Pensar na leitura, limpeza e organização do código
Code Smells
Long parameter list (Bloaters)
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Repetição de tipos
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Repetição de dados
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Repetição de algoritmos
Code Smells
● Duplicate code (Dispensables)
Dicas e soluções para evitar:
Entender os cenários
Aplicar orientação a objetos
Refatorar classes e métodos para abranger o código duplicado
Manter organizado as responsabilidades (S.O.L.I.D)
Code Smells
Shotgun Surgery (Change Prevents)
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Qualquer mudança = Muitas mudanças
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Qualquer mudança = Muitas mudanças
Alterações simples = Bugs e erros
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Qualquer mudança = Muitas mudanças
Alterações simples = Bugs e erros
Toda vez que isso estiver acontecendo, significa que tem algo errado
Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
Fazer teste antes de escrever o código
Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
Fazer teste antes de escrever o código
Organizar as ideias/regras/formas de fazer antes de fazer
Aplique S.O.L.I.D
Code Smells
Concluindo
Tenha disciplina
Defenda por um código limpo
Refatore se necessário
Saiba o que você está fazendo
Não tenha medo de code review
NÃO SEJA ORGULHOSO
Code Smells
Referências
https://martinfowler.com/bliki/CodeSmell.html
https://refactoring.guru/
https://simpleprogrammer.com
https://refactoring.com/
Clean Code: A Handbook of Agile Software
Craftsmanship
Design Patterns: Elements of Reusable
Object-Oriented Software
OBRIGADO !

Mais conteúdo relacionado

Semelhante a Code smells - Um indicador de código mal feito

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Marcos Brizeno
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
CBSoft 2013 - Descrição dos Problemas (CbE)
CBSoft 2013 - Descrição dos Problemas (CbE)CBSoft 2013 - Descrição dos Problemas (CbE)
CBSoft 2013 - Descrição dos Problemas (CbE)Wildtech
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Iure Guimaraes
 
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
 

Semelhante a Code smells - Um indicador de código mal feito (20)

Clean code
Clean codeClean code
Clean code
 
Python tdc2019
Python tdc2019 Python tdc2019
Python tdc2019
 
Gisele
GiseleGisele
Gisele
 
Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017]
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
CBSoft 2013 - Descrição dos Problemas (CbE)
CBSoft 2013 - Descrição dos Problemas (CbE)CBSoft 2013 - Descrição dos Problemas (CbE)
CBSoft 2013 - Descrição dos Problemas (CbE)
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )
 
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
 

Code smells - Um indicador de código mal feito

  • 2. Code Smells - Código Fedorento Você já foi impedido de programar bem por conta de um código sujo/ruim?
  • 3. Code Smells - Código Fedorento Você já foi impedido de programar bem por conta de um código sujo/ruim? Você já entrou em uma classe e sentiu que algo não cheirava bem com aquele código?
  • 4. Code Smells ● Classes, objetos e métodos Fedorosos ( Fedorento e Horroroso )
  • 5. Code Smells ● Classes, objetos e métodos Fedorosos ( Fedorento e Horroroso ) ● Mal concebido - Mal projetado - Mal pensado
  • 6. Code Smells ● Classes, objetos e métodos Fedorosos ( Fedorento e Horroroso ) ● Mal concebido - Mal projetado - Mal pensado ● Frágil - Redundante - Opaco - Falso sólido
  • 7. Code Smells ● Classes, objetos e métodos Fedorosos ( Fedorento e Horroroso ) ● Mal concebido - Mal projetado - Mal pensado ● Frágil - Redundante - Opaco - Falso sólido ● Impossível de ser mantido a longo prazo
  • 10. Conditional Complexity (Object Orientation Abuser) Code Smells
  • 11. Code Smells ● Conditional Complexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada
  • 12. Code Smells ● Conditional Complexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas
  • 13. Code Smells ● Conditional Complexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas
  • 14. Code Smells ● Conditional Complexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas
  • 15. Code Smells ● Conditional Complexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas ● Como resolver? Extrair para métodos Extrair para campos
  • 17. Code Smells ● Message Chain (Couplers) Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
  • 18. Code Smells ● Message Chain (Couplers) Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local Um objeto que chama outro objeto que chama outro objeto para ter uma propriedade
  • 19. Code Smells ● Message Chain (Couplers) Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local Um objeto que chama outro objeto que chama outro objeto para ter uma propriedade
  • 20. Code Smells ● Message Chain (Couplers) Solução 1 - Refatorando para campos próprios
  • 21. Code Smells ● Message Chain (Couplers) Solução 2 - Utilizando Hide delegate (Delegação para objeto do domínio ou intermediário)
  • 22. Code Smells ● Message Chain (Couplers) Extrair para método Extrair para um campo Extrair para um objeto do domínio - Hide Delegate Só fale com vizinhos Pense na leitura e na organização do código
  • 23. Code Smells Long parameter list (Bloaters)
  • 24. Code Smells ● Long parameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros
  • 25. Code Smells ● Long parameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros Parâmetros repetidos em várias chamadas na classe
  • 26. Code Smells ● Long parameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros Parâmetros repetidos em várias chamadas na classe Dificulta a leitura
  • 27. Orientação a objetos não está sendo bem utilizada Code Smells ● Long parameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros Parâmetros repetidos em várias chamadas na classe Dificulta a leitura
  • 28. Orientação a objetos não está sendo bem utilizada Code Smells ● Long parameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros Parâmetros repetidos em várias chamadas na classe Dificulta a leitura
  • 29. Code Smells ● Long parameter list (Bloaters) Solução - Refatorando para uma classe
  • 30. Code Smells ● Long list parameter (Bloaters) Utilizar uma classe quando há múltiplos parâmetros Usar no máximo 4 parâmetros por classe (Clean Code) Utilizar parâmetros que sejam necessário para aquele método Pensar em objeto do domínio Pensar na leitura, limpeza e organização do código
  • 31. Code Smells Long parameter list (Bloaters)
  • 32. Code Smells ● Duplicate code (Dispensables) Códigos repetidos
  • 33. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários
  • 34. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código
  • 35. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código Código sujo e desorganizado
  • 36. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código Código sujo e desorganizado Repetição de tipos, valores e algoritmos
  • 37. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código Código sujo e desorganizado Repetição de tipos, valores e algoritmos Repetição de tipos
  • 38. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código Código sujo e desorganizado Repetição de tipos, valores e algoritmos Repetição de dados
  • 39. Code Smells ● Duplicate code (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código Código sujo e desorganizado Repetição de tipos, valores e algoritmos Repetição de algoritmos
  • 40. Code Smells ● Duplicate code (Dispensables) Dicas e soluções para evitar: Entender os cenários Aplicar orientação a objetos Refatorar classes e métodos para abranger o código duplicado Manter organizado as responsabilidades (S.O.L.I.D)
  • 41. Code Smells Shotgun Surgery (Change Prevents)
  • 42. Code Smells ● Shotgun Surgery (Change Prevents) Muitos métodos em uma classe
  • 43. Code Smells ● Shotgun Surgery (Change Prevents) Muitos métodos em uma classe Muitas classes para uma regra
  • 44. Code Smells ● Shotgun Surgery (Change Prevents) Muitos métodos em uma classe Muitas classes para uma regra Muitos métodos em uma classe Muitos testes / Testes desnecessários
  • 45. Code Smells ● Shotgun Surgery (Change Prevents) Muitos métodos em uma classe Muitas classes para uma regra Muitos métodos em uma classe Muitos testes / Testes desnecessários Qualquer mudança = Muitas mudanças
  • 46. Code Smells ● Shotgun Surgery (Change Prevents) Muitos métodos em uma classe Muitas classes para uma regra Muitos métodos em uma classe Muitos testes / Testes desnecessários Qualquer mudança = Muitas mudanças Alterações simples = Bugs e erros
  • 47. Code Smells ● Shotgun Surgery (Change Prevents) Muitos métodos em uma classe Muitas classes para uma regra Muitos métodos em uma classe Muitos testes / Testes desnecessários Qualquer mudança = Muitas mudanças Alterações simples = Bugs e erros Toda vez que isso estiver acontecendo, significa que tem algo errado
  • 48. Code Smells ● Shotgun Surgery (Change Prevents) Dicas para evitar: Mover métodos para seus contextos
  • 49. Code Smells ● Shotgun Surgery (Change Prevents) Dicas para evitar: Mover métodos para seus contextos Mover regras complexas (Message chain) para campos específicos
  • 50. Code Smells ● Shotgun Surgery (Change Prevents) Dicas para evitar: Mover métodos para seus contextos Mover regras complexas (Message chain) para campos específicos Fazer teste antes de escrever o código
  • 51. Code Smells ● Shotgun Surgery (Change Prevents) Dicas para evitar: Mover métodos para seus contextos Mover regras complexas (Message chain) para campos específicos Fazer teste antes de escrever o código Organizar as ideias/regras/formas de fazer antes de fazer
  • 52. Aplique S.O.L.I.D Code Smells Concluindo Tenha disciplina Defenda por um código limpo Refatore se necessário Saiba o que você está fazendo Não tenha medo de code review NÃO SEJA ORGULHOSO
  • 53. Code Smells Referências https://martinfowler.com/bliki/CodeSmell.html https://refactoring.guru/ https://simpleprogrammer.com https://refactoring.com/ Clean Code: A Handbook of Agile Software Craftsmanship Design Patterns: Elements of Reusable Object-Oriented Software OBRIGADO !