segunda-feira, 11 de junho de 2012

Refactoring: torne seu código mais simples, organizado e legível


Refactoring ou refatoração é um processo que tem como principal objetivo tornar o código mais legível e com maior facilidade de manutenção. Menciona-se processo, pois refactoring não consiste em apenas alterar o código que já funciona, pois quando há qualquer tipo de alteração, há riscos de introdução de novos bugs.

Segundo o relatório de maio de 2002 do National Institute of Standards and Technology, o custo de um bug em fase de desenvolvimento é de uma 1 unidade (entenda unidade como qualquer custo, como por exemplo hora/pessoa, dólares, etc...) e após ir para produção esse mesmo bug pode custar até milhares de dólares. Por isso, a refatoração de código, quando implantada desde o inicio do projeto, terá um custo muito menor.

Além do beneficio de redução de custos, a refatoração, como tarefa diária de desenvolvimento, ajuda a manter a equipe mais cuidadosa com o código desenvolvido, pois se um código parece estranho ele logo será corrigido, corrigindo um possível problema o mais cedo possível.

Refactoring é algo maior, que envolve pequenos passos, testes, disciplina e força de vontade. Refactoring é importante quando o desenvolvedor tiver que adicionar alguma característica ao programa, e, o código não estiver estruturado para receber esta característica. Então, primeiro é aplicado o refactoring no código e depois é adicionada tal característica. É importante certificar de que tenha um bom conjunto de teste antes de fazer o refactoring.

No TDD, ou Test-Driven Development, que é uma das práticas do XP (Extreme Programming), a ideia é que primeiro sejam desenvolvidos os testes para só então escrever o código necessário para que o teste passe. Com os testes devidamente criados, temos a segurança necessária para então refatorar o código e garantir que os mesmos não quebrarão nenhuma funcionalidade.

No TDD, temos os seguintes passos: 
- Criar um teste. 
- Escrever o código 
- Executar o teste - ele não passará 
- Reescrever o código para o teste passar. 
- Rodar novamente o teste. Ele passará. 
- Refatorar o código. 
- Repetir quantas vezes forem necessárias, até você atingir o resultado desejado. 

Três características gerais identificadas nos refactorings são: 
- Estes podem ser completamente automatizadas por ferramentas de refactoring
- Quando um refactoring é corretamente aplicado, este não introduz novos erros ao sistema. 
Refactorings mais complexos podem ser criados pela composição de outros. 
- Se cada refactoring primitivo preserva o comportamento do sistema, a composição destes também irá preservar. 

Refactoring
 tem como propósito melhorar a estrutura do código de forma a fazer um programa mais reusável e fácil de ser entendido, sendo então um aspecto importante para evolução de softwares reusáveis e frameworks. Uma característica importante é que, como o refactoring preserva o comportamento observável, se houver erros semânticos no código original, também haverá erros no código reestruturado.

Nenhum comentário: