在软件测试中有一个事实说:
测试用于查找软件中的错误,但不能用于显示软件的正确性。 在这里,我无法理解“单词正确性”的意义。 难道在软件中无法实现正确性吗?
答案 0 :(得分:2)
由于足够复杂的软件可能包含无数个可能的错误,因此从逻辑上讲不可能通过测试来证明软件的正确性。
缺少 已显示的错误 (错误)并不表示不存在 所有错误 。
答案 1 :(得分:0)
软件的测试用于发现软件中的错误,但不能用于 显示软件的正确性。
这里的单词正确性的意义是什么。
一个单元是functionally correct 如果它会为每个可能的输入产生正确的输出。
在理论计算机科学中,此术语有很多细微差别, 例如,我们区分部分正确性和总和 正确性:如果返回的答案是部分正确 正确,如果它总是返回正确的,则为完全正确 答案。
在实践中,事情要复杂一些。当我们 建立大型软件系统,要正式地实现它并不总是那么容易 定义什么是程序的正确输出,然后我们讨论 根据说明正确。
我不认为“ ”测试声称可用于发现错误,但不能 用来表示正确性”的一种很好的说法。 测试通常是指运行您的软件的小型计算机程序 在某些输入上,并验证输出是否符合预期。我会 将其声明为 testing,以防止错误引入 现有代码。
在软件中无法实现正确性是真的吗?
不,这并非不可能。尝试编写 identity函数,
例如:f(x) → x
。实际上,这很容易。更复杂
算法,正确编写就越困难。
不仅可以编写正确的代码,还可以 prove that code is correct。然而, 这更加困难且耗时。
但是,您不能做的是证明代码在以下方面是正确的: 仅测试(除非您的函数仅需要有限(少量)数量的 输入)。