Refatoração
Refatorar é melhorar um código existente visando aperfeiçoá-lo, sem criar funções adicionais, buscando facilitar a compreensão e futuras modificações. Ou seja, é alterar a estrutura do código sem alterar o seu comportamento.
Martin Fowler (2019) cita em seu livro “Refatoração” que um código mal feito ou mal revisado pode acarretar prejuízos temporais e até mesmo financeiros, pois demandam mais trabalho para serem analisados e suas funcionalidades podem entrar em decadência com o tempo, afetando os resultados e causando bugs que poderiam ser evitados.
A refatoração pode ser vista por muitos como uma tarefa desnecessária e repetitiva que apenas ocupa mais o tempo, muitas vezes escasso, modificando um código que ao final apresentará as mesmas funcionalidades anteriores. No entanto, se trata de uma função fundamental para a manutenção do código e para uma maior durabilidade, além de mais eficiência na execução. Segundo Wazlawick (2013), “O código deve ser escrito de acordo com padrões aceitos: os padrões de codificação mantêm o código compreensível e passível de refatoração por toda a equipe.”
A manutenção pode se tornar bastante complicada e demorada até para desenvolvedores com experiência na área quando se trata de uma estrutura confusa, com informações duplicadas ou até mesmo desnecessárias, além de termos não muito explicativos. Porém, vale lembrar que, o que faz um código ser “limpo” e compreensível não é apenas a maneira como ele foi originalmente escrito, mas também a periodicidade com que é revisado, devendo ser revisado sempre que for necessário, sem pena.
Refatorar não significa acrescentar funcionalidades, mas sim, desmistificar e melhorar o desempenho das pré-existentes, e só então novos recursos poderiam adicionados com mais facilidade. É indicado que o código a ser refatorado esteja seguindo o padrão Clean Code.
Se trata de uma melhoria do design, ajudando a localizar trechos defeituosos, além de acelerar o processo de programação.
Marco Tulio Valente (2020) explica que há diversos tipos de manutenção que podem ser realizadas em um código, como por exemplo, a manutenção corretiva, quando há a presença de bugs; a manutenção evolutiva, quando há a necessidade da revisão para que uma nova funcionalidade venha a ser inserida; e a manutenção adaptativa, quando alguma regra que norteie o negócio é alterada ou quando alguma tecnologia utilizada se modifica.
Exemplos de refatoração retirados do livro Engenharia de Software Moderna (2020):
Extração de classes:
Ocorre quando determinado sistema apresenta uma classe com muitos atributos, que, muitas vezes, podem estar relacionados. Eles são então extraídos para uma nova classe.
Código Antes da refatoração (Figura 1):
Figura 1. Antes da Refatoração - Extração de Classe.
Código após a extração de classes (Figura 2):
Figura 2. Após a Refatoração - Extração de Classe.
Renomeação:
Um dos tipos mais utilizados de refatoração e ocorre quando há a percepção de que o nome da função, variável, classe etc, não é apropriado ou quando a responsabilidade daquele atributo foi alterada.
Antes (Figura 3):
Figura 3. Antes da Refatoração - Renomeação.
Depois (Figura 4):
Figura 4. Após a Refatoração - Renomeação.
Extração de variáveis:
Quando há a necessidade de simplificar expressões.
Antes (Figura 5):
Figura 5. Antes da Refatoração - Extração de Variáveis.
Depois (Figura 6):
Figura 6. Após a Refatoração - Extração de Variáveis.
Quando Realizar a Refatoração?
Há inúmeros modelos de refatoração e não há um padrão a ser seguido, sendo indicado o que melhor se adequar à estrutura do código e às suas funcionalidades, lembrando que, um processo de refatoração bem-sucedido se condiciona à realização de bons testes. Valente (2020) cita dois tipos de situação: Refatoração Oportunista de Refatoração Planejada.
No primeiro caso, o processo é realizado assim que houver conveniência, mesmo que o desenvolvedor esteja realizando outra atividade. Geralmente é ligada a algum bug encontrado que pode ser corrigido naquele momento.
Já se tratando de Refatoração planejada, os temas são mais complexos e precisam de uma atenção especial que não deve ser dividida com outras tarefas, pois podem ser mais longas e complexas.
Refatorar é também uma maneira de evitar a quantidade excessiva de comentários em um código, já que os autores defendem que um código legível e bem estruturado pode eliminar a quantidade de comentários, já que estes passam a ser dispensáveis na estrutura apresentada e que eles não devem ser utilizados simplesmente para explicar um código que esteja ruim e que não passe entendimento por si só.
A seguir um exemplo de como os comentários podem ser substituídos:
Antes (Figura 7):
Figura 7. Antes da Refatoração - Comentários.
Depois (Figura 8):
Figura 8. Após a Refatoração - Comentários.
Referências Bibliográficas
- FOWLER, Martin. Refatoração. Aperfeiçoando o design de códigos existentes. 2ª edição. São Paulo. 2019.
- WAZLAWICK, Raul Sidnei. Engenharia de Software: Conceitos e Práticas. 1ª edição. Rio de Janeiro. 2013.
- VALENTE, Marco Tulio. Engenharia de Software Moderna. 1ª edição. 2020.