Carlos Brando

Nome do Jogo

Como vocês testam seus softwares?

Este é um assunto bem controverso. Durante muitos anos eu trabalhei sem criar um único teste, mas quando trabalhei pela primeira vez em um projeto em que todos criavam testes unitários, percebi o quão importante era aquilo.

Os benefícios dos testes são imensuráveis, mas é uma questão cultural. Muita gente considera perda de tempo, porque normalmente se gasta mais tempo criando o teste do que codificando o software. Isto é verdade, mas os testes não são criados para beneficio imediato, você só vai agradecer por ter criado os testes no futuro, quando alguém tiver de alterar algo e um teste falhar informando que um erro apareceu no meio do processo.

Seguindo a série de traduções dos artigos “Ask 37signals”, desta vez a pergunta foi:

Estou curioso para saber que metodologia de testes e ferramentas vocês usam em seus softwares. Você são fanáticos por Test Driven Development (TDD)? Vocês usam o Test::Unit do Rails, ou preferem ferramentas alternativas como o Behavior Driven Development com rspec? Uma lista com os plugins de teste que vocês usam seria bem interessante de ver.

Quem vai responder desta vez é o David Heinemeier Hansson ou DHH. Quero adiantar que a resposta dele é um pouco polêmica, como não poderia deixar de ser já que parece que ele gosta disso. Vamos à resposta:

Nós acreditamos seriamente nos benefícios dos testes, mas eu não chamaria isto de fanatismo. Raramente eu escrevo meus testes primeiro. Eu acho que escrever testes primeiro não se entra direito na minha cabeça na hora de escrever uma boa API. Sei, porém, que isto funciona perfeitamente para outros e eu respeito profundamente esta abordagem. Em nossa equipe, isto parece funcionar especialmente bem para o Jamis de vez em quando.

Também fico em cima do muro, em relação à quantidade de testes que faço. Eu não acredito que obter 100% de cobertura vale a pena na maioria dos casos. Especialmente quando se trata de testar o código de um view. Para nosso aplicativos, na maioria das vezes simplesmente mudamos o que é necessário e as chances de aparecer um erro é muito baixa e raramente isto acontece.

As áreas em que eu pessoalmente acredito que temos o máximo de beneficio com testes é na interação de objetos. Como um formulário de inscrição que cria um punhado de registros de uma só vez e que precisa propagar um erro de validação por todos os métodos.

Para quem está começando a usar testes, no entanto, eu recomendo que parta do início. A única maneira de obter uma boa compreensão sobre quando pode-se fazer menos testes é criando testes para tudo por um tempo e identificando as áreas em que pode pegar mais leve sem ferir a sua produtividade agora e no futuro. Por isto, diminuir a sua quantidade de testes deve ser feito com muito cuidado. Se você está sempre em dúvida se deve ou não gastar seu tempo testando, teste.

Em termos de ferramentas, estamos usando o Test::Unit que vem com o Rails. Pessoalmente eu não estou convencido de que o rspec seja tão bom assim, e eu sou levado a pensar que o estilo DSL foi levado um pouco a sério demais. Mas eu gosto do estilo do BDD que foca em nomear os seus testes em termos como “deve fazer” e acabo usando isto do meu jeito. De qualquer forma, para mim realmente não importa se você vai fazer de uma maneira ou de outra. O importante é que você teste, e se rspec e BDD vão fazer seus testes melhores para você, mande ver.

Além disso, enquanto eu penso que lutar para ter 100% de cobertura de teste não vale a pena na maioria dos casos, é bom saber o quanto de cobertura você tem, pelo menos. O pacote rcov proporciona uma ótima maneira de ver o quão seguro estão os seus testes e onde você não está testando.

O que eu acho?

Concordo com algumas coisas e discordo de outras, sei que é muito difícil conseguir 100% de cobertura de testes, principalmente nas Views. Mas não acho que testar menos seja o ponto. Acredito que devemos nos esforçar para testar o máximo que pudermos, talvez não vamos conseguir 100%, é verdade, mas quanto mais testes, mais seguros estamos.

Pessoalmente eu confesso que mesmo hoje, depois de entender todos os benefícios que os testes me proporcionam, ainda assim acho que faço pouco teste, deveria fazer mais, mas sempre estou me policiando para melhorar nisto. Assim como David, também não consigo criar os testes primeiro, não faz muito sentido para mim, mas acho interessante quando encontro alguém que desenvolve assim.

Na Surgeworks, todos criamos testes, mas deixamos a desejar quanto a testes na interface do usuário, principalmente quando envolve Javascript. Focamos muito mais em funcionalidades críticas ou regras de negócio complexas, onde uma pequena alteração poderia levar tudo a perder. Nestes pontos tentamos cobrir 100% do código com testes.

No projeto que estou trabalhando atualmente estamos usando além do Test::Unit, um plugin chamado Selenium on Rails.

E vocês como testam seus softwares?

Comments