Quando refatorar? 5

Posted by Túlio Ornelas Mon, 10 Nov 2008 15:00:00 GMT

Essa discussão é antiga. No dojo-sea nós sempre a temos e ninguém sabe ao certo quando isso deve ocorrer, no dojo-brasilia também tivemos uma discussão mas ninguém quis apontar uma solução ou fixar uma opinião. Então farei isso.

Primeiro vamos entender de fato o que significa refatorar, a Wikipédia diz: “é o processo de modificar um sistema de software para melhorar a estrutura interna do código sem alterar seu comportamento externo.”
De posse desse conceito eu digo que um código “só” deve ser refatorado quando está em seu estado final. Considerando que um código em “estado final” possui vários testes unitários, nós podemos verificar o impacto da mudança facilmente, pois pequenos erros podem ser inseridos durante a refatoração. Denomino esse caso de “polimento de código”.


Agora vamos desconstruir o raciocínio. Suponha que uma classe X está em desenvolvimento, você está escrevendo os testes antes da implementação, quando eles quebram você implementa e roda de novo, e por ai vai… Porém a cada dois minutos você tem que escrever vários comentários sobre o que aquele trecho de código esta fazendo, percebeu? O.o? O funcionamento do código não está claro o suficiente, devemos refatorá-lo! Ou quando estamos escrevendo uma classe Y que tem trechos idênticos as classes X e Z, ora por que não separamos esses trechos? Costumo chamar esses casos de “necessidade de refactoring”.


Seguindo o raciocínio proposto chegamos a dois conceitos criados por mim, não riam, que são refatorações para polimento e refatorações por necessidade. Nós ainda temos refatorações que visam desempenho, testabilidade, etc. Essas ficam para uma próxima oportunidade.


Este post está longe de definir todos os casos em que uma refatoração é necessária, mas abre a discussão, e você o que acha sobre o assunto?

Comments

Leave a comment

  1. Avatar
    Laurindo Neto about 1 hour later:

    Realmente a refatoração de código é algo que deve sempre ser aplicada no dia a dia do desenvolvedor. Além de facilitar o trabalho de outros profissionais que precisam incremetar o mesmo.

  2. Avatar
    Leandro Camargos about 1 hour later:

    As vezes ao desenvolver um projeto, chega uma hora em que não entendendo mais o que está sendo feito, isso acontece até mesmo quando o projeto é mini, e as vezes mesmo sendo progamador solo, ainda sim vai existir aquele código que vc passou 3horas para fazer, e no outro dia quando precisar do mesmo, já não vai entender mais nada do que foi feito, tendo várias vezes que parar para reentender o raciocínio, e perder mto tempo comentando linha por linha. Refatoração, com certeza ajuda bastante no desenvolvimento de sistemas e mais ainda na hora de dar mantenção do mesmo.

  3. Avatar
    Marcelo Araujo about 1 hour later:

    Conheço 2 livros muito bons sobre refatoração: Refactoring - Martin Fowler e Refactoring to Patterns - Joshua Kerievsky. Se não me engano, os exemplos citados aqui nesse post podem ser vistos no capítulo “Maus cheiros”, desse livro do Fowler. Pena que é ainda é raro ver equipes dando o devido valor a refatoração.

    Mas enfim, essa foto ficou #$&* nesse post :)

  4. Avatar
    Túlio Ornelas about 2 hours later:

    Marcelo eu comecei a ler o Rafactoring do Martin Fowler, ainda estou no início. No projeto em que estou nós seguimos fielmente o ciclo, teste -> implementação -> teste -> refactoring isso ajuda muito. Quanto a figura… hehe.

  5. Avatar
    Marcelo Araujo about 2 hours later:

    Não duvido que sigam não. Vi a apresentação da SEA no Falando em Agile 2008. Cara, essa empresa é um exemplo a ser seguido :)

Comments