我真的不理解software testing oracle的概念。它说:
oracle是一种确定程序是否通过测试的机制。
请考虑以下代码:
// 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));
}
应该测试的类总是返回2个整数的总和 我作为参数2和3传递,并期望将5. 2和3相加并与预期值(5)进行比较。在这种情况下,测试成功。
oracle究竟能帮助我吗?这个例子中有一个oracle吗?
答案 0 :(得分:14)
测试oracle是关于程序(或函数或方法)的输出是否正确的信息来源。
测试oracle可能为所有可能的输入指定正确的输出,或仅为特定输入指定正确的输出。它可能不会指定实际输出值,而只会指定它们的约束。
oracle可能是
如果不含糊,那么这个概念至少非常广泛。
oracle不是测试运行器,但是测试运行器可以使用oracle作为正确输出的来源,以比较被测系统的输出,或作为评估SUT的约束源。输出
在您的示例中,您使用个人能力执行添加算法作为您的oracle。相反,您可以使用该算法的不同实现作为oracle:
assertEquals("2 + 3 is 5", 2 + 3, tester.sum(2, 3));
答案 1 :(得分:3)
让我以这种方式提出oracle问题:我们如何检查程序是否返回正确的答案?
对于此功能,我们可以使用以下伪代码轻松检查答案(抱歉,它不是C ++。):
repeat many times {
int a = randomNumber();
int b = randomNumber();
int result = sum(a, b);
assertEquals("random case", a, result - b);
}
这个oracle使用减法来检查函数。这样就可以轻松地运行数百万或数十亿次测试。