Code Smells

code_smellsO texto abaixo é a uma tradução do artigo escrito pelo Martin Fowler. Para acessar a versão original em inglês, clique aqui . Caso você tenha sugestões para tornar a tradução melhor, compartilhe através da seção de comentários no final da página.

 

Um code smell é uma indicação superficial que geralmente corresponde a problemas mais profundos no sistema. Esse termo foi primeiramente usado pelo Kent Beck quando ele me ajudou no meu livro Refactoring.

A definição acima de divide em dois pontos. Primeiro, um smell (do inglês “cheiro”) é por definição algo que é fácil identificar – ou fareijar como eu falei recentemente. Um método longo é um bom exemplo disso –  basta ver mais que uma dúzia de linhas de Java.

O segundo ponto é que smells nem sempre indicam um problema. Alguns métodos longos são simplesmente bons. Você tem que olhar mais profundamente para saber se existe um problema oculto – smells não são necessariamente ruins por si só – eles são frequentemente indicadores de um problema ao invés de serem por si só o problema.

Os smells mais comuns são algo que é fácil identificar e a maior parte do tempo nos leva a problemas interessantes. Classes de dados (classes que possuem somente dados e nenhum comportamento) são bons exemplos. Olhe para elas e pergunte a você mesmo qual comportamento deveria existir naquela classe. Então você começa a refatorar inserindo esse comportamento pra lá. Geralmente perguntas simples e refatoramentos iniciais podem ser um passo vital para transformar objetos anémicos em algo que realmente tenha importância.

Uma das boas coisas sobre smells é que eles são fáceis para pessoas inexperientes identifica-los, mesmo se eles não souberem avaliar se existe realmente um problema ou como corrigí-lo. Tenho ouvido alguns líderes de desenvolvedores que elegem o “smell da semana” e pedem as pessoas para procurar o smell e trazer aos desenvolvedores seniors da equipe. Fazer isso em um smell por vez é uma boa forma de gradualmente ensinar as pessoas do time a serem melhores programadores.