SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Bad SmellsBad Smells
in Codein Code
Lourdilene Souza
AgendaAgenda
✔ Bad Smells
✔ Alguns tipos de bad smells
✔ Exemplo
✔ Refatoração
O que sãoO que são
Bad Smells ?Bad Smells ?
“Maus cheiros no código são sintomas de má
concepção ou implementação de escolhas" [ Martin
Fowler ]
Por que conhecer ePor que conhecer e
evitar ?evitar ?
Compreensão
Produtividade
AlgunsAlguns Bad SmellsBad Smells
Code SmellsCode Smells
ComentáriosComentários
"Qualquer pessoa é capaz de escrever código que um
computador possa entender. Bons programadores escrevem
código que seres humanos podem entender."
[Martin Fowler, Refactoring: Improving the Design of Existing
Code]
Code SmellsCode Smells
Muitos parâmetros no MétodoMuitos parâmetros no Método
✔ Aumento da complexidade
✔ Encapsular em objeto
Heranças paralelasHeranças paralelas
✔ Hierarquia em um única classe
✔ Patterns
Code SmellsCode Smells
Código duplicadoCódigo duplicado
✔ DRY – Don’t Repeat Yourself!
✔ Retrabalho
✔ Difícil de manter
✔ Pequenas variações
Code SmellsCode Smells
Complexidade CondicionalComplexidade Condicional
✔ Grandes blocos if/else/switch
Tiro de EspingardaTiro de Espingarda
✔ Mudanças em uma classe com impacto em
inúmeras outras.
✔ Refatorar para centralizar em uma classe ou
usar herança.
Code SmellsCode Smells
Classe grandeClasse grande
✔ Classes grandes, como métodos longos,
são difíceis de ler, compreender e debugar.
✔ Será que a classe tem responsabilidades
demais?
✔ A classe grande pode ser reestruturada ou
dividida em classes menores?
Bad Code Smells [Martin Fowler]Bad Code Smells [Martin Fowler]
✔ DUPLICATED CODE
✔ LONG METHOD
✔ LARGE CLASS
✔ LONG PARAMETER LIST
✔ DIVERGENT CHANGE
✔ SHOTGUN SURGERY
✔ FEATURE ENVY
✔ DATA CLUMPS
✔ PRIMITIVE OBSESSION
✔ SWITCH STATEMENTS
✔ PARALLEL INHERITANCE HIERARCHIES
✔ LAZY CLASS
✔ SPECULATIVE GENERALITY
✔ TEMPORARY FIELD
✔ MESSAGE CHAINS
✔ MIDDLE MAN
✔ INAPPROPRIATE INTIMACY
✔ ALTERNATIVE CLASSES WITH DIFFERENT INTERFACES
✔ INCOMPLETE LIBRARY CLASS
✔ DATA CLASS
✔ REFUSED BEQUEST
✔ COMMENTS
Como evitar ?Como evitar ?
✔ Pareamento
✔ Code Review
✔ Padronização
✔ Pensar na manutenção no início do
projeto
✔ Qualificação
Classe grandeClasse grande
Classe grandeClasse grande
Classe grandeClasse grande
ReferênciasReferências
http://martinfowler.com/
https://sourcemaking.com/
Ta Safo ?!Ta Safo ?!
Obrigada.Obrigada.
http://proex.ufpa.br/PRINCIPAL/ http://lourdilene.blogspot.com.br/

Mais conteúdo relacionado

Mais procurados

Διαγώνισμα δομή ακολουθίας ΑΕΠΠ
Διαγώνισμα δομή ακολουθίας ΑΕΠΠΔιαγώνισμα δομή ακολουθίας ΑΕΠΠ
Διαγώνισμα δομή ακολουθίας ΑΕΠΠ
Eleni Kokkinou
 
C++ Function
C++ FunctionC++ Function
C++ Function
Hajar
 

Mais procurados (20)

Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code Principles
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
ΠΛΗ10 ΜΑΘΗΜΑ 1.4
ΠΛΗ10 ΜΑΘΗΜΑ 1.4ΠΛΗ10 ΜΑΘΗΜΑ 1.4
ΠΛΗ10 ΜΑΘΗΜΑ 1.4
 
Περιβάλλοντα ανάπτυξης εφαρμογών
Περιβάλλοντα ανάπτυξης εφαρμογώνΠεριβάλλοντα ανάπτυξης εφαρμογών
Περιβάλλοντα ανάπτυξης εφαρμογών
 
Clean code
Clean codeClean code
Clean code
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Decision making and branching in c programming
Decision making and branching in c programmingDecision making and branching in c programming
Decision making and branching in c programming
 
Διαγώνισμα δομή ακολουθίας ΑΕΠΠ
Διαγώνισμα δομή ακολουθίας ΑΕΠΠΔιαγώνισμα δομή ακολουθίας ΑΕΠΠ
Διαγώνισμα δομή ακολουθίας ΑΕΠΠ
 
C# Generics
C# GenericsC# Generics
C# Generics
 
golang_getting_started.pptx
golang_getting_started.pptxgolang_getting_started.pptx
golang_getting_started.pptx
 
Code smell overview
Code smell overviewCode smell overview
Code smell overview
 
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ CC++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
 
Complete C++ programming Language Course
Complete C++ programming Language CourseComplete C++ programming Language Course
Complete C++ programming Language Course
 
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
 
Βασικές έννοιες προγραμματισμού
Βασικές έννοιες προγραμματισμούΒασικές έννοιες προγραμματισμού
Βασικές έννοιες προγραμματισμού
 
Loops in C# for loops while and do while loop.
Loops in C# for loops while and do while loop.Loops in C# for loops while and do while loop.
Loops in C# for loops while and do while loop.
 
clean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English version
 
C++ Function
C++ FunctionC++ Function
C++ Function
 
ΠΛΗ10 ΜΑΘΗΜΑ 2.3: ΤΕΛΕΣΤΕΣ ΚΑΙ Η ΕΝΤΟΛΗ ΑΠΟΦΑΣΗΣ
ΠΛΗ10 ΜΑΘΗΜΑ 2.3: ΤΕΛΕΣΤΕΣ ΚΑΙ Η ΕΝΤΟΛΗ ΑΠΟΦΑΣΗΣΠΛΗ10 ΜΑΘΗΜΑ 2.3: ΤΕΛΕΣΤΕΣ ΚΑΙ Η ΕΝΤΟΛΗ ΑΠΟΦΑΣΗΣ
ΠΛΗ10 ΜΑΘΗΜΑ 2.3: ΤΕΛΕΣΤΕΣ ΚΑΙ Η ΕΝΤΟΛΗ ΑΠΟΦΑΣΗΣ
 

Destaque

Guia para pais com crianças Deficientes Mentais
Guia para pais com crianças Deficientes MentaisGuia para pais com crianças Deficientes Mentais
Guia para pais com crianças Deficientes Mentais
Veronica Cruz
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
SlideShare
 

Destaque (14)

Explicando DevOps
Explicando DevOpsExplicando DevOps
Explicando DevOps
 
Heuristicas de produtividade
Heuristicas de produtividadeHeuristicas de produtividade
Heuristicas de produtividade
 
Entregando software com DevOps Tools
Entregando software com DevOps ToolsEntregando software com DevOps Tools
Entregando software com DevOps Tools
 
Compartilhe!
Compartilhe!Compartilhe!
Compartilhe!
 
II semana do calouro indígena ufpa
II semana do calouro indígena ufpaII semana do calouro indígena ufpa
II semana do calouro indígena ufpa
 
Principais Práticas das Abordagens Ágeis
Principais Práticas das Abordagens ÁgeisPrincipais Práticas das Abordagens Ágeis
Principais Práticas das Abordagens Ágeis
 
Construção de arquitetura para software de alta performance
Construção de arquitetura para software de alta performanceConstrução de arquitetura para software de alta performance
Construção de arquitetura para software de alta performance
 
Boas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesBoas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros Macetes
 
Recuperar senha
Recuperar senhaRecuperar senha
Recuperar senha
 
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
 
Manifeste-se!
Manifeste-se!Manifeste-se!
Manifeste-se!
 
Ergonomia
ErgonomiaErgonomia
Ergonomia
 
Guia para pais com crianças Deficientes Mentais
Guia para pais com crianças Deficientes MentaisGuia para pais com crianças Deficientes Mentais
Guia para pais com crianças Deficientes Mentais
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
 

Mais de Lourdilene Souza (10)

Scrum Wars
Scrum WarsScrum Wars
Scrum Wars
 
Mindset ágil
Mindset ágilMindset ágil
Mindset ágil
 
Arquitetura Model View Controller
Arquitetura Model View ControllerArquitetura Model View Controller
Arquitetura Model View Controller
 
Retrospectiva Ágil
Retrospectiva ÁgilRetrospectiva Ágil
Retrospectiva Ágil
 
Gestão Ágil de Riscos
Gestão Ágil de Riscos Gestão Ágil de Riscos
Gestão Ágil de Riscos
 
Web form
Web formWeb form
Web form
 
Regex
RegexRegex
Regex
 
O programador php
O programador phpO programador php
O programador php
 
Advanced sql
Advanced sqlAdvanced sql
Advanced sql
 
Expressões regulares
Expressões regularesExpressões regulares
Expressões regulares
 

Último

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

Bad smells no código