Mitos sobre os Métodos Ágeis - Unit Test /ou: Test Hype!

Posted: 7 de jan de 2008 | . David Lojudice Sobrinho | tags: ,

Um dos mitos que eu mais leio e ouço por ai é que os testes unitários (unit test) vão eliminar os bugs da sua aplicação. Gostaria de dizer o contrário, mas infelizmente não vão. Veremos...

O primeiro problema é que nem todo código da sua aplicação pode ser testado. Hoje é muito fácil testar componentes, mas muito difícil testar as outras partes do software como, por exemplo, a UI. E como esse código "marginal" não vai ser testado automaticamente, as alterações lá não vão ganhar os benefícios dos métodos ágeis (refactoring, continuous integration, etc.).

A segunda pedra no caminho para detectar bugs via teste unitário é na minha opinião a pior. É a dificuldade de escrever testes. Um exemplo que vou dar é um dos muitos que está nos fazendo quebrar a cabeça aqui. Existe um requisito no sistema que diz que a segunda compra do mesmo produto pelo cliente em menos de um mês deve ter um tratamento diferenciado.

Simular a primeira compra é simples. Mas simular a segunda, como se fosse daqui a 15 dias, nem tanto. Alteramos a data do computador? Ok, mas e a data do DB de teste? Mas e se o DB está numa maquina que você não tem permissão para mudar a hora? Ou seja, se não conseguir simular esse comportamento não estou testando os possíveis bugs que podem acontecer, logo a porcentagem de código testada cai.

Outro exemplo da dificuldade de escrever teste é "o que" verificar nos testes. Quando um requisito diz que tenho que incluir um registro, o que devo verificar? Se um registro a mais foi incluído na tabela? Se os dados incluídos estão corretos? Mas e os valores "default" criados pelo DB? Devo verificá-los? Então imagine agora uma rotina que sensibiliza 7 tabelas. Conseguiu visualizar o tamanho do problema?

Com esse exemplo já dá pra ver que apenas uma pequena porção do seu código vai ser testada via teste unitário e, sendo assim, sinto dizer, mas seu software vai ter bugs!

Como resolver esse problema da maneira "Ágil"? Aqui vai minha dica para contornar o problema: Já que não temos como criar testes para todos os cenários possíveis (mesmo nos esforçando para isso), é importante responder rápido aos bugs quando eles aparecem. Por isso é importante ter (1) um otimo sistema de logs e (2) um bom bugtracker. Assim, as exceptions geradas pelos sistemas são enviadas por e-mail, via sistema de log e colocadas no bugtracker. Problemas conceituais são também reportados pelos clientes via e-mail e também colocados no bugtracker. Depois, é só priorizar e delegar os problemas no bugtracker. Em um ritmo normal de trabalho, os bugs têm prioridade. Com esse ciclo, conseguimos alcançar o que os métodos ágeis pregam: gerar softwares cada vez mais robustos, que atendem o requisito do cliente, em curtos ciclos de entrega.

Se o tempo ajudar, vamos ver se consigo escrever outros mitos dos métodos ágeis. Porque, como todo hype, tem coisas muito boas, mas tem sempre algo que eles não querem que você saiba.

0 comentários: