Artigo do tipo Exemplos Práticos
Recursos especiais neste artigo:
Conteúdo sobre boas práticas,Artigo no estilo Mentoring
Cenário
Aprimorar o código fonte existente pode proporcionar um sistema melhor organizado e legível, contribuindo para o uso eficiente dos recursos envolvidos.

Este artigo apresenta exemplos e cenários comuns no uso de refatoração, servindo como um 'guia prático' para a aplicação desta técnica no dia a dia da equipe de desenvolvimento.

Em que situação o tema útil
Aprimorar o código fonte existente pode proporcionar um sistema melhor organizado e legível, resultando no melhor entendimento de código fonte pelas equipes de desenvolvimento e manutenção como também contribui para o uso eficiente dos recursos envolvidos.

Hoje em dia, as aplicações são frequentemente alvo de diversas mudanças, aprimoramentos e até mesmo eventuais correções. Isso é motivado, principalmente, pela alteração das regras de negócio ao longo do tempo e também por eventuais atualizações tecnológicas.

O código fonte implementado em qualquer aplicação deve ter um nível de organização apropriado associado com a utilização adequada da tecnologia em que é desenvolvido. Por exemplo, na linguagem Java, deve ser difundido no código todos os conceitos da programação orientada a objetos. A organização no desenvolvimento do sistema, bem como o uso adequado de suas características, possibilita que outras equipes de trabalho, diferentes daquelas que inicialmente construíram a aplicação, sejam capazes de entender e realizar as alterações sem comprometer outras funcionalidades. Para isso, é necessário que detenham conhecimento dos conceitos e técnicas do paradigma de programação utilizado. Em resumo, quanto mais padronizado, organizado e focado na tecnologia empregada, mais independente a aplicação se torna da equipe que originalmente o criou.

Apesar de um sistema ser bem desenvolvido com uma boa organização e planejamento, nunca estará imune ao processo de refatoração. A essência da refatoração está na melhoria contínua do código atrelada à evolução da tecnologia empregada e modelo implementado. Desta forma, mesmo que sejam utilizados Padrões de Projeto (Design Patterns), sobretudo em projetos de grande porte, a necessidade de refatoração não é eliminada, apesar de sua contribuição significativa no processo de desenvolvimento e construção de um bom código. Devido a isso, independente do padrão utilizado ou mesmo em sua ausência, há uma série de características que devem ser verificadas a fim de tornar as estruturas no código legíveis e bem construídas. Tal organização tornará as rotinas de manutenção e desenvolvimento menos complexas, resultando em um melhor entendimento das equipes de desenvolvimento e, como consequência, reduzindo o tempo de análise e manutenção.

Podemos dizer que a refatoração de um código fonte é o mesmo que aprimorá-lo ou melhorá-lo constantemente sem alterar seu comportamento ou resultado final. O jargão “Em time que está ganhando não se mexe” não pode ser empregado no desenvolvimento de sistemas. Na verdade, quanto mais aprimoramentos e alterações forem realizados, visando melhorar desempenho, simplicidade e legibilidade, melhor será para a manutenção e crescimento do sistema. Isso implica também que à medida que o JDK (Java Development Kit) e o JRE (Java Runtime Environment) evoluem, pode ser interessante incorporar seus respectivos avanços e manter a aplicação sempre atualizada. Da mesma forma, é recomendável verificar se as APIs (Application Programming Interface) utilizadas possuem versões mais modernas a serem empregadas.

Apesar das modificações nos sistemas para incorporarem recursos mais atuais serem uma das formas de refatorá-lo (entenda que a refatoração não é apenas o fato de atualizar o JDK por um mais atual, mas sim incorporar e aprimorar o código existente com novas estruturas), o processo de refatoração é muito mais abrangente. Ele também envolve entender o código fonte e buscar o uso de estruturas mais simples, melhor identificadas e que consumam menos recursos, caso seja possível. Portanto, é preciso analisar o código e buscar por aperfeiçoamentos que visem torná-lo mais simples e claro.

Existem diversos indícios para promover a refatoração de um código. Dentre os principais, podemos citar a remoção de algoritmos duplicados, a divisão de métodos extensos e complexos em outros menores, facilitando a reutilização, o uso adequado dos tipos e classes, visando menor consumo de memória, entre outros.

Com base nisso, este artigo tem a finalidade de apresentar as principais características que podem indicar possíveis trechos de código candidatos a refatoração, bem como sugestões de técnicas a serem empregadas neste processo de aperfeiçoamento. Tais características foram indicadas por especialistas renomados na área, Kent Beck e Martin Fowler, no livro “Refatoração: Melhorando a Qualidade do Código Pré-Existente” (“Refactoring: Improving the Design of Existing Code”). Na seção Links há informações a respeito de ambos os autores e também do livro. Ademais, também serão analisadas algumas técnicas de refatoração baseadas nas novas funcionalidades do Java 7.

Os principais sinais para refatorar seu código fonte

O conceito de refatoração introduzido pelos especialistas, Martin Fowler e Kent Beck, é: “Uma alteração feita na estrutura interna do software para torná-lo mais fácil de entender e mais barato para modificar sem alterar seu comportamento observável. É uma forma disciplinada de limpar código que minimiza as chances de introduzir bugs.”.

A definição de refatoração dada pelos especialistas indica que a refatoração é um conjunto de modificações e aprimoramentos no código, com o objetivo de torná-lo mais simples, organizado e legível, mantendo sempre o mesmo resultado ou finalidade original. Em outras palavras, é fazer a mesma coisa (no sentido de entregar um mesmo resultado) de uma maneira diferente e simplificada.

Neste contexto também é possível contar com a avaliação do código pela própria equipe de desenvolvimento, no que podemos chamar de auto avaliação ou revisão um pouco mais aprofundada. Durante a revisão, quando for identificado qualquer sinal de desconfiança nas estruturas utilizadas no código, é preciso revê-lo e analisá-lo cuidadosamente. Neste sentido, Kent Beck ressalta que a refatoração deve ser aplicada sempre que o “código cheirar mal” (bad smell in code), ou seja, quando o código indicar algum problema, não necessariamente relativo a um bug, mas que pode representar um obstáculo para atividades de manutenção e evolução do software, como um código mal indentado, de difícil compreensão.

A seguir é apresentada a lista dos principais indícios que sinalizam a necessidade da refatoração de código, baseada nos pilares da organização, legibilidade, simplicidade e desempenho:

· Código duplicado;

· Métodos e classes extensas;

· Lista de parâmetros longa;

· Má indentação;

· Uso adequado de Strings;

· Obsessão por tipos primitivos (Primitive Obsession);

· Substituição de constantes por Enums;

· Utilização de literais em tipos numéricos.

Nos próximos tópicos serão explicadas e detalhadas as principais técnicas de refatoração para os principais indícios apresentados. Desta forma, será exibido um código com a necessidade clara de refatoração, de acordo com a característica apontada e, em seguida, será mostrado o mesmo código fonte devidamente refatorado com a explicação da técnica utilizada.

...
Quer ler esse conteúdo completo? Tenha acesso completo