Copyright - Dilbert by Scott Adams

Imagem retirada de http://www.dilbert.com

Oi pessoal, no post de hoje eu procuro mostrar como os testes podem ajudar no andamento de um projeto.

Antes de falar sobre testes, vamos falar sobre a consequência da identificação de um bug no projeto. Quando um bug é detectado, ainda na fase de desenvolvimento do projeto, podemos dizer que o custo de sua correção é X. Entretanto, se esse mesmo bug nesse mesmo projeto for detectado somente quando o projeto já estiver em produção, podemos dizer que o custo de sua correção será muito maior que X. Isso é claro para todos os desenvolvedores e, infelizmente, não há como contestarmos contra isso. Deixo, então, a seguinte pergunta no ar: Por que não damos ao teste a mesma importância que damos ao código do produto?

Bem, eu não sei dar uma resposta única e correta para essa pergunta, mas tenho a minha opinião. Explico: em projetos que cujos prazos de entrega são negociados por pessoas que não entendem na lógica do negócio, existe uma grande chance de acontecer o chamado “faz nas coxas porque temos que entregar tudo semana que vem”. Em projetos desse tipo, em geral, não há conhecimento técnico sobre o custo de desenvolver aquilo que deve ser entregue. Inclusive, o tamanho da equipe pode ser definido de acordo com o “tempo que se consegue”. Tem muito tempo? Vamos com uma equipe pequena. O prazo está apertado tempo? Então enche o projeto de gente que vai dar tempo.

Bem, sabemos que as chances de erro em um cenário como o exposto acima são enormes. Podemos perceber também que, nesse tipo de projeto, o prazo é algo tão obscuro que fica difícil dizer se o projeto está tendo um bom andamento. Bem, nem preciso dizer que trabalhando nesse contexto os testes fatalmente irão ficar de lado, não é?!?

 

 

Aplicando o Scrum em nossos projetos procuramos não dar margem para esse cenário. Como trabalhamos com iterações curtas e com o auxílio do quadro de tarefas, conseguimos visualizar o andamento do projeto. Ainda, nós estimamos cada uma de nossas histórias, sempre incluindo nela o esforço necessário para a realização de testes automatizados.

Escrevemos os testes para garantir que a funcionalidade implementada está funcionando corretamente. Isto é, a funcionalidade deve gerar as saídas corretas para cada entrada possível.

Imagine um sistema enorme, dividido em vários módulos, com linhas de código na ordem de grandeza de um milhão. Agora imagine o custo da manutenção de um bug nesse sistema em produção. Pior ainda, quanto maior o sistema, maior é a chance de corrigir um bug e, por consequência, acabar gerando outro. 

Um dos objetivos dos testes automatizados é: uma vez que a funcionalidade foi implementada, o teste deve garantir que ela irá funcionar sempre. Se o teste falhar é porque algum trecho de código foi modificado e o ajuste deve ser feito nele para garantir que o teste volte a funcionar. Esse tipo de abordagem diminui bastante o custo de manutenção do projeto, pois os bugs, em sua maioria, são detectados ainda na fase de desenvolvimento.

Espero ter convencido todos a escreverem testes! Até o próximo post!