quinta-feira, 29 de setembro de 2016

Code Smells


Fala galera que acompanha o blog...

Você já sentiu um cheiro enquanto programava, refatorava ou reutilizava o código de alguém? Aquele cheiro, que na verdade é uma sensação de código ruim, aquele trecho que você olha e pensa "humm isso aqui pode dar m3#d@!", ou então, aquele comentário explicando o código e pior ainda aquele comentário "Se remover esse trecho o sistema para de funcionar", sabe?


Code Smells

Esses exemplos citados (e vários outros) são chamados de Code Smells, ou "Mau cheiro no código".

Na literatura é possível verificar que alguns autores preferem dividir a lista de code smells em duas partes, os que estão em uma classe e os que envolvem mais de uma classe. Veja esse post sobre os Tipos de Code Smells.

Hoje existem vários padrões já identificados e difundidos. A partir destes padrões você pode avaliar seu código e verificar se ele está "muito mau cheiroso".


A Industrial Logic disponibilizou uma lista dos padrões de code smells mais conhecidos e das possíveis técnicas de refatoração que você pode utilizar para eliminar estes problemas.

É uma lista muito interessante e bastante útil para ser consultado naquele momento em que queremos alterar o código fonte e tentar melhorá-lo.


No entanto antes de iniciar o processo de refatoração, lembre-se de criar testes unitários e/ou de integração para garantir que as alterações realizadas não "quebraram" a sua aplicação.
Sem dúvida, o exemplo de code smells mais simples e corriqueiro que acontece no código, são as linhas em branco dentro de um método. Muitas vezes achamos que a linha em branco esta sendo usado para melhorar a leitura do código, usamos como uma forma de indentação, mas que na verdade, ao analisar melhor o trecho, percebemos que essa linha em branco está separando duas atividades dentro de um mesmo método, ou seja, poderíamos converter tudo que está abaixo dessa linha em branco em um outro método.

A linha em branco não é o problema em si. Ela só indica que há um problema.

Não saia refatorando todo o seu código de uma só vez, na medida que for utilizando as classes e seus métodos vá fazendo as correções necessárias.
Você pode seguir os seguintes passos:


  1. Encontre um Método;
  2. Caso não exista testes que garantam a funcionalidade, crie-os;
  3. Verifique se há linhas em branco separando blocos;
  4. Para cada bloco, extraia o código criando um novo Método;
  5. Faça a chamada do novo Método no mesmo lugar que extraiu o código;
  6. Repita o processo enquanto for necessário.

Se você gostou do assunto e se interessou em saber mais em como manter seu código limpo, pode começar lendo um livro muito bacana do autor Robert C. Martin ou "Uncle Bob" ( Tio Bob ), que é uma grande personalidade na comunidade de desenvolvimento de software, métodos ágeis e vários outros ramos, até porque o Tio Bob ai, atua na área desde 1970, e seu livro se chama Clean Code (Código Limpo).

"O renomado especialista em software, Robert C. Martin, apresenta um paradigma revolucionário com Código limpo: Habilidades Práticas do Agile Software. Martin se reuniou com seus colegas do Mentor Object para destilar suas melhores e mais ágeis práticas de limpar códigos “dinamicamente” em um livro que introduzirá gradualmente dentro de você os valores da habilidade de um profissional de softwares e lhe tornar um programador melhor –mas só se você praticar.

Que tipo de trabalho você fará? Você lerá códigos aqui, muitos códigos. E você deverá descobrir o que está correto e errado nos códigos. E, o mais importante, você terá de reavaliar seus valores profissionais e seu comprometimento com o seu ofício."

Mais informações sobre o livro acesse o site AltaBooks:


Bom pessoal é isso... parece bobeira mas a verdade é que escrever código qualquer um faz, existem diversos tutoriais sobre programação e tudo mais, mas escrever um bom código, no entanto, não é pra qualquer um. Pense no longo prazo, no acoplamento, na coesão, no design, deixe as coisas simples.



Até a próxima!
Luiz Fagner Zordan Analista de Sistemas

Graduado em Sistemas de Informação, atualmente trabalhando na Embraer pela FocusNetworks como FullStack. Sou apaixonado por tecnologia, fascinado por jogos e adoro passar o tempo assistindo séries.