Em algum momento sempre temos de parar e verificar se aquilo que desenvolvemos funciona, normalmente esta é aquela parte chata que temos de executar um enorme roteiro de testes para concluir o obvio – que funciona. O problema disso é que desenvolvedor é um bicho muito presunçoso e acha que não comete erros, mas devido ao enorme componente humano que existe na programação, vão sempre existir defeitos a serem encontrados pela equipe de QA. Automação de testes é a solução que eu considero a mais prática e, ao mesmo tempo, efetiva.
Testes que podem ser executados várias vezes são uma vantagem a partir da segunda vez que são necessários, pela minha experiência após uma certa prática no assunto, o custo de codificar um teste é quase o mesmo de executá-lo manualmente duas vezes. Esse custo diminui ao longo do projeto, quando vários elementos reusáveis dos testes aparecem, chegando a ser próximo do mesmo da execução manual.
Existem várias categorias de testes: funcionais, unitários, de integração, caixa-branca, caixa-preta, bla, bla, bla. Acho que no final das contas podemos dividir os testes em duas categorias: os que ajudam os desenvolvedores e os que medem o progresso do projeto. Os primeiros servem para verificar partes do sistema que não se traduzem em requisitos funcionais, os testes unitários de uma classe, por exemplo. Os outros são os testes funcionais, são os mais importantes também, pois, além de tudo, podem medir o nível de confiança de um projeto em entregar no prazo com qualidade.
Testes funcionais são os mais dificeis de escrever e planejar. Existem alguns cuidados que devemos tomar, o pricipal é substituir os sistemas externos por versões sob nosso controle, coisas como banco de dados e web-services são faceis o resto vai exigir mais trabalho. É crucial fazer isso em vez de usar recursos compartilhados, pois senão eles podem deixar de ser determinísticos, falhando sem motivo. Banco de dados em memoria são a melhor ferramenta que você pode querer, eu utilizo o HSQLDB eu não tenho do que reclamar.
Finalmente, temos várias ferramentas para ajudar a escrever os testes, tais como Fitnesse ou Selenium, cada um tem sua utilidade e recomendo explorá-las para saber quais ferramentas você tem a mão. Elas ajudam muito a criar os testes e permitir que eles, caso necessário, sejam reusados e integrados no processo de build da sua aplicação.
Testes funcionais, quando automatizados, são o artefato mais importante de um sistema, pois certifica que o conjunto de funcionalidades verificados funciona. O valor dessa garantia é muito grande depois que você sente a diferença.
4 responses so far ↓
1 Diego Pires Plentz // Jan 14, 2007 at 10:28 pm
Rodrigo,
“Elas ajudam muito a criar os testes e permitir que eles, caso necessário, sejam reusados e integrados no processo de build da sua aplicação.”
Só vale ressaltar que devemos tomar muito cuidado em quais testes colocar no “commit build”. Os testes mais lentos (e que normalmente envolvem banco de dados e outros recursos), devem ficar somente no build do servidor de CI.
Keep the build fast.
2 kumpera // Jan 14, 2007 at 11:18 pm
Diego, isso depende muito de como você construiu os testes. Tenho um sistema que executamos mais de 400 testes funcionais que envolvem banco de dados e todos juntos rodam em menos de 10 minutos, algo aceitavel para um build.
.
O truque é usar banco em memória e stubs para o resto dos sistemas externos. Os testes com o ambiente final só precisam ser executados pela equipe de QA.
.
Quem poderia falar mais disso, de tunnar o build para ser muito rápido, logo permitindo rodar uma suite grande de testes, é o Carlos, ele me contou por cima como fizeram isso em um projeto da TW uma vez.
3 Carlos Villela // Jan 15, 2007 at 7:36 am
O artefato mais importante de um sistema continua sendo o sistema, mas concordo que testes funcionais / de aceitacao automatizados sao a 2a coisa mais importante.
@Diego: Um build de menos de 5 minutos eh importante, mas eu preferiria que levasse 10 e me desse garantia absoluta de que eu nao quebrei nada. Depois, pra testes que realmente sao lentos e nao tem jeito, sempre existe build pipelining.
4 Ronaldo // Jul 18, 2007 at 11:41 pm
Rodrigo, estou fazendo um projeto para a faculdade mas não consegui utilizar o programa Fitnesse que foi recomendado, poderia me ajudar com um passo a passo.
Obrigado.
Leave a Comment