no primeiro dia do teched 2011, eu e meu amigo fábio fizemos uma quick session mostrando um pouco como podemos melhorar um código. a idéia era mostrar alguns princípios importantes que o desenvolvedor deve ter em mente quando está escrevendo o seu código. mostramos a importância darmos bom nomes de variáveis, reduzir a duplicidade de código, extração de métodos e divisão de responsabilidade. estes fatores e alguns outros contribuem para legibilidade, manutenção e reduz a complexidade ciclomática.

na nossa apresentação usamos um código de validação de cpf de quase 100 linhas para um código de cerca de 10 linhas. é claro que todo o código não sumiu. foi direcionado para outros métodos. mas desta maneira o código ficou bem mais legível e de fácil manutenção. Além disto, a complexidade ciclomática de 20 no primeiro momento foi reduzida para 4. vale mencionar que o código é uma pequena alteração de um código dos muitos códigos que encontramos na internet. isto mostra que não é tão difícil você se deparar com um código com as mesmas oportunidades de aprimoramento.

o código disponiblizado tem 4 projetos em c#. o projeto “CpfVerification” é o projeto principal e contém a classe “CpfVerification”. o projeto “CpfVerificationTests” contém 2 unit test. um positivo e outro negativo. é claro que caberiam muito mais testes unitários. entretanto, como este não era o objetivo desta palestra, colocamos apenas 2 testes que nos davam a confiança para fazermos as refatorações necessárias. acredito que isto irá ajudar vocês também.

o projeto “CpfSteps” contém 7 classes. uma para cada estágio das alterações que fizemos. estas classes estão numeradas de 1 a 7 no final do nome. sendo a 1 o estado inicial do código e 7 o estado final. o projeto “cpfTestSteps” contém duas classes de testes unitários. a primeira é o estado inicial dos testes. a classe que terminar com “CpfType” contém a conversão dos testes unitários para o uso de tipo CPF. isto suporta uma das grandes mudanças deste método para dividir as responsabilidades.

é claro que este método poderia ser ainda melhor. a classe cpf poderia ser preparada para não usar mais uma string. e não queremos dizer que esta versão final é a melhor versão. mas o que gostaríamos de mostrar é como aquele código existente poderia ser melhor se algumas boas práticas fossem aplicadas.


convidamos vocês a baixarem o código e tentarem vocês mesmo fazerem a refatoração. os testes unitários ajudam vocês a garantirem que o código continua funcionando como esperado. se quiserem, podem nos enviar suas versões finais e trocamos uma idéia sobre o resultado.

[]s