Definições sobre testes



Primeiro falaremos sobre verificação por testes. Apresentarei algumas definições importantes que serão bastante utilizadas ao longo dos capítulos, e então não serão estranhos ao leitor.

Os testes possuem casos de teste (test cases) e procedimentos de teste (test procedures). O caso de teste é a descrição da situação que será testada e o resultado esperado, por exemplo: "Caso de teste: testar que o airbag é acionado quando existe uma colisão com o carro em movimento.". O procedimento de teste é o passo-a-passo de como executar este teste, que pode incluir uma pre-condição (ou inicialização) do sistema. O procedimento deve possuir ações e verificações. Exemplo: "Colocar o sensor de velocidade no valor 100km/h (inicialização) /  Estimular o sensor de colisão. / Verificar o acionamento do airbag. ".

Os procedimentos de teste são, desta forma, uma implementação do teste descrito no caso de teste. Eles devem ser elaborados de forma que cada procedimento possa ser executado isoladamente, ou que procedimentos sejam executados em uma ordem qualquer. Para isto é importante que a inicialização do procedimento garanta que não foram deixados resíduos da execução anterior, o que pode ser obtido chamando uma função de reset, ou mesmo reiniciando o software.

Quando se trata de testes de software, na maioria dos casos é possível executar as ações do teste estimulando valores de variáveis do software e fazer as verificações recebendo os valores calculados pelo software. O procedimento de teste pode então fazer uso de uma planilha que contenha os valores de entrada e saída esperada, que serão automaticamente inseridas e coletadas do software. A esta planilha é dado o nome de vetor de teste (test vector) e ao mecanismo de automação é dado o nome de test driver.

O critério de passagem do test (pass criteria) mais comum é uma comparação do valor obtido da execução do teste com o valor esperado registrado no test vector. Para o caso de variáveis em ponto flutuante, onde os cálculos sofrem influência da precisão numérica, a comparação é feita utilizando uma margem de tolerância, ou seja, o teste passa se o resultado obtido é igual ao resultado esperado dentro da faixa de tolerância. Existem ainda outros critérios menos comuns, como as relações de maior e menor, por exemplo: o teste deve passar se o resultado for maior que um valor definido.

Ao agrupamento de test cases e seus respectivos procedimentos de teste (incluindo os test vectors, se aplicável) é dado o nome de test set ou test suite.

Existe ainda uma nomenclatura para os problemas encontrados no software. Um problema de implementação gera um defeito (fault) no software, que pode ser, digamos, uma condição errada. O estímulo deste defeito através do teste ou da própria operação real causa o erro (error), que é o estímulo do defeito. Caso este erro não seja contido utilizando-se técnicas de programação defensiva, ele é propagado para o sistema e causa a falha (failure), que é a manifestação observável do erro no sistema e que pode causar impactos em diversos níveis de criticalidade.

Comentários