O que é um oráculo de teste, e para que é utilizado?
um oráculo é um mecanismo para determinar se o programa passou ou falhou num teste.
considere o seguinte código:
// class that should be tested
public int sum(int a, int b) {
return a + b;
}
// test class
static Main tester = new Main();
@Test
public void testSum() {
assertEquals("2 + 3 is 5", 5, tester.sum(2, 3));
}
a classe que deve ser testada devolve sempre a soma de 2 inteiros.
Passo como parâmetro 2 e 3, e espero 5. 2 e 3 serão resumidos e comparados com o valor esperado (5). Neste caso, o teste suceder.
2 answers
Um oráculo de teste é uma fonte de informação sobre se a saída de um programa (ou função ou método) é correta ou não.
Um oráculo de ensaio pode especificar a saída correcta para toda a entrada possível ou apenas para uma entrada específica. Ele pode não especificar os valores reais de saída, mas apenas restrições sobre eles.
O oráculo pode ser ...- UM programa (separado do sistema em teste) que recebe a mesma entrada e produz a mesma saída
- documentação que dá Saídas específicas correctas para determinadas entradas
- um algoritmo documentado que um ser humano pode usar para calcular as saídas correctas para determinadas entradas
- um especialista em domínio humano que de alguma forma pode olhar para o resultado e dizer se está correcto
- ou qualquer outra forma de dizer que a saída está correcta.
assertEquals("2 + 3 is 5", 2 + 3, tester.sum(2, 3));
Para esta função, podemos facilmente verificar a resposta com o seguinte pseudocode (Desculpe, não é c++.):
repeat many times {
int a = randomNumber();
int b = randomNumber();
int result = sum(a, b);
assertEquals("random case", a, result - b);
}
Este oráculo usa a subtracção para verificar a função. Isso permite que milhões ou bilhões de testes sejam executados com pouco esforço humano.