Observando o comportamento em vários projetos, pude perceber que grande parte das pessoas não dão muito valor aos testes, e quando valorizam atribui a responsabilidade de testar a outras pessoas. As coisas ainda ficam piores quando chega a pequenas empresas. Pergunte ao dono da padaria que você toma café todos os dias, se eles testaram alguma funcionalidade do software que eles tem antes de colocar em produção? Se a versão tiver algum problema e corromper os dados, a culpa sem sombra de dúvidas será do time de desenvolvimento.
O problema começa no modo como as pessoas projetam o software, dentro de um processo Waterfall, onde cliente não é parte do processo. Neste contexto, o cliente diz o que deseja e depois de 9 meses ele tem um resultado: um software produzido nas “coxas”.
Mesmo em projetos onde existem práticas de testes, muitos deles ainda são ineficientes. O usuário apenas valida as “telinhas” do sistema, e muito pouco em termos funcionalidades. Infelizmente, poucos destes usuários testam o comportamento de entradas de dados inválidos, por exemplo, um campo de CPF aceitar “-1″ como valor, ou um espaço em branco ser um conteúdo válido para um campo obrigatório. Como resultado, o sistema chega a produção, dados inconsistentes são inseridos e a culpa é do desenvolvedor.
Testes unitários é algo que muitos desenvolvedores ainda acham inútil, quando fala em integração contÃnua, aà acham exagero. Quer um exemplo, pergunte à um programador PHP se ele faz teste unitários. “Faço apenas sites, não sistemas, não preciso disso”, nem fazem idéia de que existe o PHPUnit para este propósito. Mesmo dentro de um obsoleto modelo cascata, cheio de casos de usos, porque não criar testes unitários pelo menos para validar os fluxos principais e alternativos? Pelo menos o fundamental pode ser controlado por um sistema de integração contÃnua.
Meu objetivo não é falar que práticas, como TDD, são perfeitas. O que eu quero chamar a atenção é importância que o teste tem dentro de um processo de desenvolvimento de software. Aparentemente, gastar algum tempo a mais fazendo testes, pode ser mais eficaz do que ter que corrigir uma falha que foi para produção por pura falta de atenção. Testar não é fácil e rápido, porém corrigir bugs pode ser mais demorado ainda. ![]()
October 10th, 2008 at 6:01 pm
TDD não é perfeito mas é o melhor que temos hoje. É inadmissÃvel mas grande parte gritante das empresas sequer chegaram ao RUP, quanto mais um modelo mais ágil, cascata ruleia como mainstream.
October 10th, 2008 at 6:06 pm
Está demorando mais do que eu imaginava as empresas e desenvolvedores entenderem que testes não são uma perda de tempo, mas sim um *investimento* de tempo.
October 11th, 2008 at 12:14 am
Concordo sobre o valor dos testes no software (apesar de ser um dos que não gostam de testar tudo), mas não acho que somente o desenvolvedor deva fazer isso. Creio que o desenvolvedor deve fazer um teste superficial e um equipe de testes poderia realizar testes mais detalhados.
October 11th, 2008 at 3:12 pm
É Rafael uma pena mesmo que os testes ainda são valorizados como deveriam. Mas acredito que vários cases que estão surgindo irão estimular times de desenvolvimento.
Eu concordo contigo também, tanto que falei que a tarefa de testes não deve ser somente atribuÃda à equipe de desenvolvimento e sim todos devem estar envolvidos. Acredito também que, o que puder ser feito de forma automatizada deve ser feito, assim reduz tempo e aumenta a confiabilidade.
October 11th, 2008 at 10:22 pm
Ótimo post. Parabéns, Markin!