Visões sobre teste de software
Um testador de software é qualquer ser humano que testa o software. Então, o que responderiamos se alguém perguntar
"O teste de software precisa de uma habilidade especializada"?
Parece muito simples responder a essa pergunta, não é? Mas claro que não é. O teste de software não é tão fácil quanto comumente se imagina. Desnecessário dizer que é uma das tarefas mais importantes e difíceis em toda a gama de processos do ciclo de vida de desenvolvimento de software.
A reação dos seres humanos neste mundo complexo de acontecimentos varia amplamente com respeito a situações, ambientes, emoções, necessidades, requisitos, período de tempo, dinheiro, crenças, educação, conhecimento, especialização, intuição e assim por diante. A natureza do ser humano é complexa e certamente não existe exceção quando estamos no local de trabalho. Portanto, é simplório dizer que o trabalho que está sendo feito (teste de software) por um testador de software é simples.
No entanto, a qualidade do trabalho de um testador de software é diretamente proporcional a sua maturidade psicológica e profundidade adquirida, adotada e desenvolvida com a idade e principalmente, experiência.
Em "The Art of Software Testing" (1979), Meyers afirma que "A psicologia das pessoas que realizam o teste terá um impacto no processo de teste" (tradução nossa). Nesse mesmo livro, Mayers diz ainda que uma das principais causas de testes insatisfatórios é o fato de que a maioria dos programadores começa com uma definição falsa do termo. Definições do tipo:
"Teste é o processo de demonstrar que os erros não estão presentes."
"O objetivo do teste é mostrar que um programa executa o seu objetivo funciona corretamente."
"Teste é o processo de estabelecer a confiança de que um programa faz o que é suposto fazer."
Aparentemente são falsas ou estão dizendo exatamente o inverso do que é um teste. Ao testar um programa, você deseja adicionar algum valor a dele. Agregar valor por meio de testes significa aumentar a qualidade ou confiabilidade do programa. Aumentar a confiabilidade do programa significa encontrar e remover erros. Portanto, não teste um programa para mostrar que ele funciona; em vez disso, comece com a suposição de que o programa contém erros (uma suposição válida para quase todos os programas) e, em seguida, teste o programa para encontrar o maior número possível de erros.
Assim, uma definição mais adequada, segundo Meyers, seria:
Teste é o processo de execução de um programa com a intenção de encontrar erros.
Embora isso possa soar como um jogo de semântica sutil, é realmente uma distinção importante. Compreender a verdadeira definição de teste de software pode fazer uma grande diferença no sucesso de seus testes.
Os seres humanos tendem a ser altamente orientados para um objetivo e estabelecer o objetivo adequado tem um importante efeito psicológico sobre eles. Se nosso objetivo é demonstrar que um programa não tem erros, então seremos subconscientemente direcionados para esse objetivo; ou seja, tendemos a selecionar dados de teste que têm baixa probabilidade de fazer com que o programa falhe. Por outro lado, se nosso objetivo é demonstrar que um programa possui erros, nossos dados de teste terão uma probabilidade maior de encontrar erros.
A última abordagem agregará mais valor ao programa do que a primeira. Por exemplo, isso implica que o teste é um processo destrutivo, até sádico, o que explica por que a maioria das pessoas acha isso difícil. A definição também tem implicações sobre como os casos de teste (dados de teste) devem ser projetados e quem deve e quem não deve testar um determinado programa. Outra maneira de reforçar a definição adequada de teste é analisar o uso das palavras ''bem-sucedido'' e "malsucedido" - em particular, seu uso por gerentes de projeto na categorização dos resultados dos casos de teste. A maioria dos gerentes de projeto referem-se a um caso de teste que não encontrou um erro de "execução de teste bem-sucedida", enquanto um teste que descobre um novo erro é geralmente chamado de "malsucedido".
Mais uma vez, isso está ao contrário. "Malsucedido" denota algo indesejável ou decepcionante. Em nossa maneira de pensar, um teste de software bem construído e executado é bem-sucedido quando encontra erros que podem ser corrigidos. Esse mesmo teste também é bem-sucedido quando, eventualmente, indica que não há mais erros a serem encontrados. O único teste malsucedido é aquele que não examina corretamente o software; e, na maioria dos casos, um teste que não encontrou erros prováveis seria considerado malsucedido, uma vez que o conceito de um programa sem erros é basicamente irreal.
Um caso de teste que encontra um novo erro não deveria ser considerado malsucedido; em vez disso, ele provou ser um investimento bem feito. Um caso de teste malsucedido deve ser aquele que faz com que um programa produza o resultado correto sem encontrar nenhum erro.
Referências
MYERS, Glenford J. et al. The art of software testing. Chichester: John Wiley & Sons, 2004.
Paper - Why software testing is sometimes ineffective: Two applied studies of positive test strategy. https://psycnet.apa.org/record/1994-31744-001
Last updated
Was this helpful?