Qualities of Quality

Dívidas técnicas: https://www.youtube.com/watch?v=pqeJFYwnkjE


Refatoração

A refatoração é um processo de reorganização da estrutura interna do software, sem alterar o seu comportamento externo. É um modo disciplinado de reorganizar código, facilitando a posterior depuração, eliminando código presumível de introduzir erros. De modo geral, quando se refabrica o código, melhora-se o desenho e a estruturação deste.

O que não é Refatoração

Em resumo, melhoria de cobertura e tratamento de erros não é considerado como refatoração de código.

Quando a refatoração é necessária?

Para se encontrar um bug no código

Bugs são como baratas: se escondendo nos lugares mais escuros e sujos do código. Desta forma, a limpeza do código vai tornar evidente os possíveis bugs.

Ao se adicionar uma nova funcionalidade

Ao se adicionar uma nova funcionalidade é necessário refatorar o código para um melhor entendimento do código e para que os bugs fiquem mais visíveis, pois um código desnecessariamente complexo dificulta a visualização de problemas.

Durante a visão de código

A revisão de código é sempre um bom momento para a refatoração, pois pode ser o último momento antes do código/software estar disponível para o público.

A melhor forma de revisar o código é em conjunto com o autor do código, pois pode-se decidir formas e técnicas de refatoração sem prejudicar as funcionalidades. As mudanças podem ser feita diretas ao ponto.

Qualquer hora

De tempos em tempos o código precisa ser revisado para refatoração, de forma que fique mais limpo.

Para quê utilizar a refatoração?

Bad Smells in code (mal cheiro de código)

Bad smell é uma situação na qual a estrutura do programa pode ser melhorada com refatoração, como por exemplo: Duplicação de código e classe ou métodos longos.

Identificando mal cheiro de código - métricas de código fonte

Existem vários indicativos de bad smells, abaixo deixo algumas definições desses bad smells bem como a refatoração sugerida:

Exemplo de Refatoração

A refatoração deve resultar em um código mais limpo, que seja legível, claro e com o mínimo de repetições. Na imagem abaixo podemos fazer uma analogia a refatoração:

Esta imagem retrata uma cozinha em duas situações distintas. Na esquerda, vemos uma cozinha em situação caótica, onde preparar alimentos, lavar e encontrar utensílios, que são o objetivo principal da cozinha, se tornaram tarefas difíceis. Já na direita, vemos uma cozinha limpa e organizada, onde pode-se realizar as mesmas tarefas da anterior, porém com muito mais facilidade.

A refatoração deve funcionar desta mesma forma: fazer com que um código inadequado se torne limpo, facilitando seu entendimento, e tornando a detecção de bugs mais simples. A refatoração não pode alterar o comportamento do código.

Ferramentas das métricas

Relação entre Testes e Refatoração

Refatoração e Testes

Os testes estão intrinsecamente relacionados à refatoração. Como a refatoração não pode alterar o funcionamento do código, os testes são a perfeita ferramenta para garantir o funcionamento correto do código antes e depois da refatoração.

Refatoração e TDD

O TDD também está relacionado à refatoração, pois a refatoração dos testes é parte básica do ciclo de desenvolvimento direcionado à testes. Pode-se entender essa relação através da figura abaixo:

Tipos de Refatoração

Treinamento

Referências

Engenharia de software. Refactoring.

Ian Sommerville. Engenharia de Software, 9ª Edição. Pearson Education, 2011.