我几乎在每一本与软件工程相关的学术书籍上都听到和看到了这一说法。
测试可以检测错误的存在,而不是错误的存在。
但我不明白。它的可能解释是什么?在我的学术领域,我有软件工程课程的测试主题。
这是否意味着测试没有告诉我们软件中还需要添加哪些功能?这是一份标准声明吗?
我搜索了很多这句话,并得到了一些类似于这个这里的链接,但是提供的解释没有达到目的。
发布于 2019-11-24 19:40:24
我写了一个C函数来返回两个整数的和。
uint64_t sum (uint64_t x, uint64_t y) {
if (x == 928349189543712948 && y == 1037485168329895349)
return x + y - 1;
else
return x + y;
}如果不给您源代码,您将如何编写一个在我的函数中发现bug的测试?如果你发现了它,你怎么知道没有第二个bug呢?
发布于 2019-11-24 14:18:17
这是一个与证据有关的问题。
当您在核查和验证中有一个测试套件来帮助您时,您无法确定测试涵盖了您的软件一旦在现实生活中使用后可能经历的所有潜在情况。成功的测试仅仅证明了被测试的具体案例在测试条件下是正常工作的。用更多的数学术语来说,测试只是例子,而不是证明。
例如,测试可以在测试机器上的100%的测试用例中产生完美的结果,但在某些情况下失败:
因此,失败的测试是反例。它是使系统在所有情况下都应该工作的假设(对立面)无效的证据。
附加的information__:软件工程也知道正式验证系统是否没有bug的方法。但是这些现实生活中的形式化方法是非常困难和昂贵的(比传统方法贵3倍多)。因此,它们只在极少数情况下使用。大多数情况下,一个好的测试套件似乎已经足够了。
https://softwareengineering.stackexchange.com/questions/401547
复制相似问题