【发布时间】:2019-12-08 19:07:00
【问题描述】:
软件测试中有一个事实是这样的:
测试用于发现软件中的错误,但不能用于显示软件的正确性。 我无法在这里理解单词正确性的意义。 在软件中不可能实现正确性是真的吗?
【问题讨论】:
-
就像你不能证明某事是“真的”一样,你只能(反复)不能证明它是假的
标签: unit-testing testing terminology
软件测试中有一个事实是这样的:
测试用于发现软件中的错误,但不能用于显示软件的正确性。 我无法在这里理解单词正确性的意义。 在软件中不可能实现正确性是真的吗?
【问题讨论】:
标签: unit-testing testing terminology
由于足够复杂的软件可能有无数个可能的错误,因此通过测试来证明软件的正确性在逻辑上是不可能的。
没有显示的错误(错误)并不意味着没有所有错误。
【讨论】:
测试用于发现软件中的错误,但不能用于 显示软件的正确性。
这里的单词正确性有什么意义。
一个单位的软件是functionally correct 如果它为每个可能的输入产生正确的输出。
在理论计算机科学中,这个术语有很多细微差别, 例如,我们区分部分正确性和全部 正确性:如果它返回的答案是部分正确 正确,如果它总是返回正确的,则 完全正确 回答。
在实践中,然而,事情有点复杂。当我们 构建大型软件系统,形式化并不总是那么容易 定义一个程序的正确输出是什么,然后我们再谈 根据规范正确。
我不认为声称 “测试用于发现错误但不能 用于显示正确性”,以一种很好的方式陈述。术语软件 测试 通常是指运行您的软件的小型计算机程序 在某些输入上并验证输出是否符合预期。我会 将其声明为 测试用于防止在 现有代码。
在软件中不可能实现正确性是真的吗?
不,这并非不可能。尝试编写恒等函数,为
例如:f(x) → x。实际上,这很容易。越复杂
算法,越难写正确。
不仅可以编写正确的代码,还可以 prove that code is correct。然而, 这更加困难和耗时。
但是,您不能做的是证明代码在以下方面是正确的 仅测试(除非您的函数只需要有限(少量) 输入)。
【讨论】: