O aprendiz foi até o programador mestre e disse:
“Todos os meus testes sempre passam. Não mereço um aumento?”
O mestre acertou uma tapa no rosto do aprendiz e respondeu:
“Se todos os seus testes passam, sempre que são executados,
você precisa escrever testes melhores.”
Com a bochecha vermelha, o aprendiz foi até os recursos humanos para reclamar.
Mas essa é outra estória.
É de fundamental importância que todos os envolvidos no ciclo de vida de um software entendam cada vez mais a integração entre as disciplinas de desenvolvimento e testes, o trecho destacado acima foi retirado do Guia para testes unitários, elaborado por Alberto Savioa da Agitar Software, o qual apresenta de forma simples, divertida e direta um fundamento básico a ser trabalhado em ambas as áreas.
Definir o que é um bom teste de software não é algo simples, seja ele um teste unitário feito pelos desenvolvedores ou mesmo testes funcionais ou não-funcionais elaborados pela equipe de testes. Considerando apenas os aspectos mais básicos, um bom conjunto de testes precisa alcançar uma boa cobertura da aplicação e ser eficiente na tarefa de identificar as falhas presentes no software.
No entanto, me impressiona o número de profissionais de TI, inclusive engenheiros de teste, que não se incomodam quando um ciclo de testes executado apresenta 100% dos casos de teste como passados, e ainda percebem isso como um claro indicador de que o software está “livre” de defeitos. Uma análise, que muitas vezes pode se mostrar enganosa e levar a muitos prejuízos.
Um dos princípios de Testes de Software, segundo o livro “Fundamentos de Testes de Software”, fala sobre a ilusão da ausência de defeitos, o qual tenta alertar contra o fato de que a ausência de bugs, não necessariamente significa que o sistema desenvolvido atende a um determinado padrão de qualidade ou mesmo às necessidades do usuário. Afinal, o problema pode estar nos próprios casos de teste, no planejamento ou até mesmo na maneira como os mesmos foram executados.
Princípio – Não caia na ilusão da ausência de defeitos.
Em outras palavras, um teste que não encontra falhas
é diferente de concluir que o software está livre de defeitos.
Devemos assumir que todo software contém algumas falhas,
ainda que estas estejam escondidas.
Logo, seja você um desenvolvedor ou testador, que cria testes manuais ou automáticos e os executa, é preciso ter bastante cuidado ao analisar a eficiência do seu conjunto de testes. Revisar constantemente os testes mais antigos e avaliar os defeitos escapados são boas práticas que podem contribuir na evolução dos testes.
Por fim, precisamos nos desapegar um pouco da associação teste passado e sucesso, e avaliar a cada estágio de teste o nível de confiança que podemos ter nos resultados obtidos, estando sempre atentos ao significado do termo “qualidade” para cada cliente ou projeto.