XPManager - Refactoring
A técnica de refactoring é utilizada sempre com o intuito de simplificar o código. Refactoring significa reescrever o código, melhorando e simplificando o mesmo, sempre que se tiver oportunidade.
Na XP, o refactoring é visto como uma tarefa de engenharia, pois trata da melhoria contínua do código-fonte, e conseqüentemente da documentação (uma vez que na XP o código deve falar por si, sendo a mais importante documentação, juntamente com os testes).
Deve-se aplicar esta técnica sempre que for incluída uma nova funcionalidade e for necessário “preparar” a classe para receber a mesma, quando for realizada manutenção em um código já existente, logo após implementar uma nova funcionalidade, ou a qualquer momento que se perceber que o código não está na sua forma mais simples.
Indícios de que um código precisa de refactoring são: código duplicado (a mesma rotina em dois pontos distintos do código), métodos de classes muito longos, métodos cujos nomes não indicam claramente o que fazem e excesso de comentário no código, pois se existem muitos comentários é sinal de que o código não está suficientemente claro ou os nomes dos métodos não expressam muito bem o que eles fazem. Esta técnica é tão importante dentro da XP que existe um livro que trata exclusivamente de refactoring. (FOWLER, 1999)
Para que se possa fazer um refactoring com segurança, é fundamental que se tenha implementado a técnica de testes automatizados, pois antes de se iniciar o refactoring a classe deve passar por todos os testes, e após a alteração deve continuar passando e retornando os mesmos resultados.
Refactoring, Simple Design e testes automatizados são técnicas que se complementam. Com o refactoring se consegue Simple Design e os testes automatizados dão segurança ao processo. Por outro lado, fica muito mais fácil prever testes para tudo que possa falhar se as rotinas estiverem na forma mais simples que possa funcionar, o que é conseguido pelo refactoring.
Neste ponto pode-se perceber porque se diz que cada técnica da XP individualmente traz um bom retorno para quem as aplica, mas se utilizadas em conjunto o retorno proporcionado é muito maior que a soma do retorno de cada uma.