sábado, 25 de abril de 2009

Qualidade na prática - I

Vou iniciar a série prática com um exemplo que está presente na vida de 10 entre 10 desenvolvedores: as estruturas condicionais. Esse exemplo é sobre a estrutura IF. Os códigos estão na linguagem Java.

Vemos if's o tempo todo na nossa vida. Atravessaremos a rua, se o sinal estiver fechado ou não vier carro. O mais interessante é que, normalmente, este teste, está vinculado à uma ação. Sendo assim, definiremos estratégias para as tomadas de decisão. Entretanto, não falarei em termos de OO ainda. Vou mostrar como, proceduralmente, é fácil programar uma estrutura IF mais clara, facilitando a sua vida e de quem vai manter o código.

Os IFs do nosso dia-a-dia estão encapsulados. Quando chegamos na beira de uma rua, não pensamos ou falamos em voz alta: Só vou atravessar quando o sinal fechar ou não vier carros.

Segue um exemplo clássico, ao qual todos os membros da equipe devem ter atenção, e não é nenhuma obra de gênio.

O código inicial, com o desenvolvedor pensando apenas na correção e na robustez:



Abaixo, modularizei as lógicas de teste, melhorando a clareza, facilitando a manutenção. Notem que os comentários desapareceram, pois o código é auto explicativo:


Na próxima fase, eliminei os números mágicos:


A melhora na legibilidade é clara. Possibilitamos, também, o reúso, pois, se algum outro algorítmo precisar testar status, não precisaremos reescrever a lógica. Dessa forma, evitamos a duplicação de código, que muito mal faz para a saúde do desenvolvedor.

Mesmo sem nos preocuparmos com a OO, percebemos, claramente, os benefícios de um código bem escrito. Para desenvolver dessa forma não precisamos ser nenhum doutor de Havard ou consumir muitas horas do projeto.

Esta refatoração mostra a questão do ganho de habilidade com a prática. Será muito difícil codificarmos como na fase 1 novamente, já que este tipo de boa prática é muito fácil implementar de primeira. O que está relacionado ao uso insistente do primeiro código pelos desenvolvedores é a falta da inquietação com os
maus cheiros que afloram de sua obra.

Concluindo, esta refatoração não exige horas a mais de projeto, somente vontade do desenvolvedor em sempre codificar melhor.

O livro Refactoring: Improving the Design of Existing Code do Martin Fowler, contribui sobremaneira para este tipo de pensamento no momento de codificar.

4 comentários:

  1. Opa Celso, tudo bem?
    Vi que visitou meu blog e estou deixando o local do ATOM do blog como me pediu, ainda tem muita coisa para mexer no layout o aTOM está meio escondido rs no fim da página como: Assinar: Postagens (Atom)
    Obrigado por visitar o Blog, fique a vontade para opinar, perguntar sobre o que quiser.
    Já adicionei seu blog nas minhas referências, parabéns pelos artigos.

    ResponderExcluir
  2. Obrigado, Eduardo. Realmente não vi o Atom. =)
    Aqui eu tenho o seguir no menu lateral.

    A referência no seu blog é uma honra. Obrigado pela confiança.

    Abraços

    ResponderExcluir
  3. Para melhorar sua variável deveria ser um Enum

    ResponderExcluir
  4. @Renan, que bom que está explorando o blog. =)

    Você tem razão, as constantes poderiam estar em um Enum. Mas o objetivo deste primeiro qualidade na prática foi mostrar como podemos melhorar um IF, saindo de um código com clareza zero para outro bem mais claro. Este código ainda pode ser refatorado, seguindo o caminho que você sugeriu.

    Obrigado pela participação.
    Abraços.

    ResponderExcluir