C# - A refatoração rumo ao código limpo - I


Hoje vamos iniciar a abordagem do conceito de refatoração tendo como objetivo obter um código limpo.

Podemos entender a refatoração como sendo o processo de reestruturação de um sistema com o objetivo de simplificar, tornar mais legível e diminuir o custo de manutenção do código sem alterar as funcionalidades do sistema.

Usando técnicas de refatoração você pode reestruturar partes do código do seu sistema alterando sua estrutura interna sem mudar o seu comportamento externo.

Assim, Refatorar é melhorar a estrutura do código de um sistema preservando as suas funcionalidades.  Os objetivos básicos de efetuar uma refatoração seriam:

  • Obter um código-fonte claro e de fácil manutenção;
  • Reduzir a  complexidade da aplicação;
  • Remover redundâncias desnecessárias;
  • Reutilizar código;
  • Otimizar o desempenho do software.
  • O principal objetivo da refatoração é combater o que se chama de 'dívidas técnicas' transformando uma bagunça em um código limpo e um design simples.

    Segundo a  wikipédia,  Dívida técnica é um conceito no desenvolvimento de software que reflete o custo implícito de retrabalho adicional causado pela escolha de uma solução fácil agora, em vez de usar uma abordagem melhor que levaria mais tempo.

    Precisamos deixar claro o que é esse tal de código limpo. A seguir temos uma relação das principais características de um código que pode ser considerado código limpo:

    1- Ele é óbvio para outros programadores

    Um código com nomenclatura confusa e ineficiente com nomes não significativos, números mágicos, classes e métodos inchados  são o que tornam o código difícil de entender.

    2- Ele não contém duplicação

    Código duplicado esparramado pelo projeto faz com que a manutenção seja difícil de ser feita pois você tem que fazer o acerto em mais de um local no seu código. Isso aumenta o trabalho e retarda o progresso do desenvolvimento do seu projeto.

    3- Ele contém um número mínimo de classes

    Quanto menos código você tem menos código requer manutenção e isso implica em ter menos bugs. Um código limpo é simples, objetivo e focado na tarefa que tem que realizar.

    4- Ele passa em todos os testes

    Um código limpo vai passar em todos os testes, isso significa 100%.  Um código que passa em 95% dos testes não é um código limpo.

    5- Ele é mais fácil e barato de manter

    Um código limpo vai ser mais fácil manter e com isso o custo de manutenção cai.

    Dívida Técnica - Conceito e causas

    Como o objetivo da refatoração é combater as dívidas técnicas vamos entender o que isso significa e o que causa uma dívida técnica.

    A princípio nenhum desenvolvedor escreve um código sujo de propósito. Todos querem fazer o melhor desde o princípio mas, seja por falta de conhecimento ou por inabilidade, muito código sujo acaba sendo produzido.

    Mas em que ponto o código limpo se torna sujo ou impuro ?

    A metáfora de “dívida técnica” em relação ao código impuro foi originalmente sugerida por Ward Cunningham.

    Uma das principais causas da criação do código sujo é a pressa. Sim, isso mesmo, você pode acelerar temporariamente a criação do seu código escolhendo um caminho mais fácil e com menos esforço onde a criação de testes não é utilizada e assim aparentemente você esta ganhando tempo e seu projeto vai ser entregue mais rápido.

    Acontece que isso vai apenas retardar a aparição dos problemas e quando eles surgirem o custo com certeza será maior para corrigir e realizar os testes.

    Vejamos a seguir as principais causas das 'dívidas técnicas' :

    1-Pressão dos negócios

    Às vezes, as circunstâncias de negócios podem forçar você a implementar recursos antes que eles estejam completamente concluídos. Nesse caso, correções e gambiarras aparecerão no código para ocultar as partes não concluídas do projeto.

    2-Falta de compreensão das conseqüências do código sujo

    Às vezes, sua gerência pode não entender que a dívida técnica tem “juros”, na medida em que diminui o ritmo de desenvolvimento à medida que a dívida se acumula. Isso pode tornar muito difícil dedicar o tempo da equipe à refatoração, porque a gerência não vê o valor disso.

    3-Falta de testes

    A falta de feedback imediato incentiva soluções alternativas ou desastres rápidos, mas arriscados. Na pior das hipóteses, essas mudanças são implementadas e implantadas na produção, sem nenhum teste prévio. As consequências podem ser catastróficas. Assim, um simples código de aparência inocente pode enviar um estranho e-mail de teste para milhares de clientes ou, pior ainda, liberar ou corromper um banco de dados inteiro.

    4-Falta de documentação

    Isso retarda a introdução de novas pessoas no projeto e pode paralisar o desenvolvimento se pessoas importantes deixarem o projeto.

    5-Falta de interação entre os membros da equipe

    Se a base de conhecimento não for distribuída por toda a equipe, as pessoas vão acabar trabalhando com uma compreensão desatualizada dos processos e informações sobre o projeto. Esta situação pode ser exacerbada quando os desenvolvedores juniores são treinados incorretamente por seus mentores.

    6-Refatoração adiada ou retardada

    Os requisitos do projeto estão mudando constantemente e em algum ponto pode se tornar óbvio que partes do código estão obsoletas, se tornaram pesadas e devem ser reprojetadas para atender a novos requisitos.

    Por outro lado, os programadores do projeto estão escrevendo novos códigos todos os dias que funcionam com as partes obsoletas. Portanto, quanto mais a refatoração for adiada, mais código dependente terá que ser retrabalhado no futuro.

    7-Falta de monitoramento de conformidade

    Isso acontece quando todos que trabalham no projeto escrevem o código como acham adequado (ou seja, da mesma forma que escreveram no último projeto).

    8-Incompetência

    Isso ocorre quando o desenvolvedor simplesmente não sabe como escrever um código decente.

    Assim o objetivo da refatoração é evitar e também resolver os problemas decorrente das dívidas técnicas.

    A seguir veremos quando devemos iniciar a refatoração.

    "Mas, se o nosso evangelho ainda está encoberto, é para os que se perdem que está encoberto, nos quais o deus deste século cegou o entendimento dos incrédulos, para que lhes não resplandeça a luz do evangelho da glória de Cristo, o qual é a imagem de Deus."
    2 Coríntios 4:3,4
     


    Referências:


    José Carlos Macoratti