• Save
Code Smells
Upcoming SlideShare
Loading in...5
×
 

Code Smells

on

  • 2,942 views

 

Statistics

Views

Total Views
2,942
Views on SlideShare
985
Embed Views
1,957

Actions

Likes
1
Downloads
0
Comments
0

3 Embeds 1,957

http://www.agilecode.com.br 1578
http://agilecode.com.br 378
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Code Smells Code Smells Presentation Transcript

  • Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br Code Smells
  • http://www.slideshare.net/rodrigobranas
  • @rodrigobranas rodrigo.branas@gmail.com http://www.agilecode.com.brFormação AcadêmicaCiências da Computação – UFSCGerenciamento de Projetos - FGVCertificaçõesSCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
  • Rodrigo Branas – rodrigo.branas@gmail.com10 anos de experiência na plataforma Java1000 horas em sala de aulaMais de 50 palestras em eventosLíder da área de desenvolvimento na GenneraAutor da revista Java MagazinePalestranteInstrutor da Academia Java e Agile da GlobalcodeCriador dos treinamentos de Clean Code, Selenium eMaven da Agile CodeTrabalhou com as empresas: EDS, HP, GM, Citibank,OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed,Suntech, Vale do Rio Doce, Senai, NET.
  • Um smell é um sintoma queocorre dentro do código fonte e que pode ser um indicador de problemas.
  • Qual é a relação entre code smells e defeitos?
  • Aerodinâmica ou distância da margem
  • Técnicas de refactoring aplicáveis: Todas relacionadas asimplificação de condicionais Extrair Método
  • Comentários no código
  • Autor do código acaba inserindo comentários para tentar compensar a complexidade ou nebulosidade do código
  • Técnicas de refactoring aplicáveis: Extrair Método
  • Se os comentários forem desnecessários:Simplesmente apague-os.
  • 1. ...2. public void transmitirMensagem(String mensagem) {3. // Criando um envelope para enviar a mensagem4. Envelope envelope = new Envelope();5. // Definindo a mensagem no envelope6. envelope.setMensagem(mensagem);7. // Enviando o envelope8. this.sendEnvelope(envelope);9. }10. ...
  • 1. ...2. public void transmitirMensagem(String mensagem) {3.4. Envelope envelope = new Envelope();5.6. envelope.setMensagem(mensagem);7.8. this.sendEnvelope(envelope);9. }10. ...
  • 1. ...2. public void transmitirMensagem(String mensagem) {3. Envelope envelope = new Envelope();4. envelope.setMensagem(mensagem);5. this.sendEnvelope(envelope);6. }7. ...
  • Método longo
  • Qual é o tamanho ideal?
  • Sempre deve ser o menor possível
  • Técnicas de refactoring aplicáveis: Extrair Método
  • Classes grandes
  • Por que as classes crescem tanto?
  • Coesão baixa
  • Se a sua classe possui muitos métodos longos, resolva um problema de cada vez.
  • Classes Utilitárias
  • Técnicas de refactoring aplicáveis: Extrair Classe Extrair Subclasse Mover Método
  • Longa lista de parâmetros
  • Qual é o número ideal deparâmetros de um método?
  • Técnicas de refactoring aplicáveis:Substituir Parâmetro por Método Preservar Objeto Inteiro Introduzir Objeto Parâmetro
  • Código Duplicado
  • Técnicas de refactoring aplicáveis: Extrair Método Extrair ClasseSubir Método na HierarquiaIntroduzir Template Method
  • Grupos de Dados
  • Existem alguns dados que andam sempre juntos, agrupados.É comum observar esses dados andando juntos na forma de parâmetros.
  • 1. ...2. public Extrato emitirExtrato(Date inicio, Date fim);3. public double calcularJurosPeriodo(Date inicio, Date fim);4. public boolean verificarCredito(Date inicio, Date fim);5. ...
  • Técnicas de refactoring aplicáveis: Extrair ClasseIntroduzir Objeto Parâmetro Preservar o Objeto Inteiro
  • Comandos Switch
  • Comandos switch tendem a serprocedurais e a se repetirem em diversas partes do software. Ao se deparar com um comando switch você deve considerar aintrodução de um comportamento mais polimórfico.
  • Técnicas de refactoring aplicáveis: Substituir Enumeração pelo Padrão State ou StrategySubstituir Comando Condicional por Polimorfismo
  • Generalidade Especulativa
  • “Eu acho que vamos precisar disso algum dia!”
  • Excesso de complexidade para tratar casos que ainda não existem.
  • Técnicas de refactoring aplicáveis:Condensar Hierarquia Internalizar Classe Remover Parâmetro Renomear Método
  • Cadeias de Mensagens
  • Um cliente pede algo a umobjeto, que pede a outro objeto,que pede a outro objeto e assim por diante.
  • 1. ...2. if (cliente.getCarteira().getCartao().verificarValidade()) {3. cliente.getCarteira().getCartao().comprar(valor);4. }5. ...
  • Lei de Demeter
  • Não fale com estranhos
  • Técnicas de refactoring aplicáveis: Ocultar Delegação