Refatoração de Software
Refatoração nada mais é do que alterar um sistema de software de modo que essa alteração não comprometa o comportamento externo do código, sendo assim é uma maneira disciplinada de aperfeiçoar o código onde as chances de falhas são minimizadas. Então, quando você refatora um código você está melhorando o projeto deste após o mesmo ter sido escrito. O propósito da refatoração é tornar o software legível a ponto que qualquer pessoa entende-lo, apenas estas mudanças são consideradas refatorações.
Kent Beck utiliza uma metáfora, denominada de os dois chapéus, onde diz que quando você desenvolve um sistema você utiliza basicamente duas atividades distintas: adicionar funções e refatorá-las. Neste desenvolvimento você geralmente se descobre trocando de chapéu, onde você começa adicionando uma nova função e após troca de chapéu e refatora esta funcionalidade.
Porque você deve refatorar?
- Melhora o projeto do software: Um sistema não refatorado normalmente necessita de mais códigos para as mesmas funções, sendo esses replicados diversas vezes.
-Torna o software legível: Ao desenvolver um sistema geralmente após um tempo outros programadores fazem alterações nesse código, então faz muita diferença o programador usar uma semana para entender o código e fazer a modificação ao invés de utilizar horas se o código fosse legível.
-Ajuda a encontrar falhas: Ao refatorar um código, você clareia certas suposições que havia feito até chegar ao ponto de não conseguir evitar de encontrar falhas.
-Ajuda a desenvolver mais rápido: Sem um bom projeto você progride rapidamente durante um certo tempo, porém ao longo de um projeto mau estruturado, você acaba perdendo mais tempo procurando e consertando falhas do que adicionando novas funcionalidades.
Quando você deve refatorar?
-Acrescentando novas funções: Um motivo que conduz a refatoração é quando você tem dificuldade em adicionar novas funcionalidades. Quando você precisa pensar muito tempo para saber o que o código faz é hora de refatorá-lo.
-Precisa consertar falhas: Quando você é notificado de uma falha é o sinal de que o código precisa ser refatorado, já que esse não estava claro o suficiente para detectar a falha.
-Enquanto revisa o código: As revisões de código regulares facilitam o entendimento de outros desenvolvedores em aspectos de um sistema grande e também a transmissão do conhecimento dos mais para os menos experientes.
Porque a refatoração funciona?
Programas que são difíceis de ler, que tem lógica duplicada, que para incluir novas funcionalidades requer modificação no código existente e com lógicas condicionais complexas, são difíceis de modificar.
Quando você não deve refatorar?
Há vezes em que o código está tão confuso que você até poderia refatorá-lo, porém é mais fácil reescrevê-lo. Outras vezes você se encontra muito perto do prazo final da entrega do software, então acaba adiando a refatoração.
Exemplo de refatoração:
Código não refatorado.:
public class StringUtil{ private StringUtil(){} public static String us(String a){ if(a==null){ throw new NullPointerException("O campo não pode ser nulo"); } char[] c = a.toCharArray(); for (int i=0; i < a.length; i++){ if((a[i] >= 97 && a[i] <= 122) || a[i]==231){ a[i] -= 32; } } } }
Código refatorado.:
public class StringUtil{ private static final String EXCEPTION_MESSAGE = "O campo não pode ser nulo"; private static final int DIF_MIN_MAIUS = 32; private StringUtil(){} /** * Converte uma String Minuscula para Maiuscula * * * @param str - A String em minusculo * @return Retorna uma nova String em maiusculo * @throw Lanca uma excecao quando o campo eh nulo */ public static String upperString(String str){ if(str == null) throw new NullPointerException(EXCEPTION_MESSAGE); char[] chars = str.toCharArray(); for(int i = 0;i < chars.length;i++) chars[i] = if((chars[i] >= 97 && chars[i] <= 122) || chars[i]==231) chars[i] -= DIF_MIN_MAIUS; return new String(chars); }
Você pode notar que agora o código contém as seguintes alterações:
- O código está comentado, o que possibilita saber qual a função do método.
- O código possui duas variáveis contantes (EXCEPTION_MESSAGE,DIF_MIN_MAIUS) para não utilizar números ou símbolos mágicos.
- O código se torna legível, pois ao colocar o nome do método de 'upperString' ao invés de 'us', o nome da variável passada como parâmetro 'str' ao invés de 'a' e a variável do array 'chars' ao invés d 'c' possibilitam saber direto o que o método faz.
- O código evita '{}' desnecessárias.
Referência: Refatoração, de Martin Fowler.
Nenhum comentário:
Postar um comentário