我正在阅读使用 Scala 语言进行基于属性的测试。在这张幻灯片中,他们提出了这个概念:证明函数a+b
是真的。我们只是为了证明这些陈述在随机数据上是正确的:
- a + b = b + a
- 一个 + 0 = 一个
- 一个 + 1 + 1 = 一个 + 2
我的问题是:哪些方法可以检查我们的测试用例是否足够,并且可以涵盖不同数据的所有案例。例如在前面的例子中,我们如何确定在我们的三个属性正确运行之后,我们可以确定我们的实现是正确的。
我正在阅读使用 Scala 语言进行基于属性的测试。在这张幻灯片中,他们提出了这个概念:证明函数a+b
是真的。我们只是为了证明这些陈述在随机数据上是正确的:
我的问题是:哪些方法可以检查我们的测试用例是否足够,并且可以涵盖不同数据的所有案例。例如在前面的例子中,我们如何确定在我们的三个属性正确运行之后,我们可以确定我们的实现是正确的。
首先,我假设您在 #3 中有一个错字,它应该是+
而不是*
.
要回答你的问题,如果你证明这三个属性,你肯定不能确定你的实现是正确的。例如,考虑这个实现,它满足所有三个属性,但肯定是错误的:
def wrongPlus(a: Int, b: Int) = if(a < 3 || b <3) b a+b else 0
要明确证明(整数)加法,您需要有一个独立的next
整数实现。然后,根据定义:
1. a + 0 = a
2. a + next(b) = next(a + b)
如果这些属性适用于任何 a 和 b 以及一些操作+
,那么+
确实是加法。