【问题标题】:What is the significance of the word "Correctness" in Software Testing?软件测试中“正确性”一词的意义是什么?
【发布时间】:2019-12-08 19:07:00
【问题描述】:

软件测试中有一个事实是这样的:

测试用于发现软件中的错误,但不能用于显示软件的正确性。 我无法在这里理解单词正确性的意义。 在软件中不可能实现正确性是真的吗?

【问题讨论】:

  • 就像你不能证明某事是“真的”一样,你只能(反复)不能证明它是假的

标签: unit-testing testing terminology


【解决方案1】:

由于足够复杂的软件可能有无数个可能的错误,因此通过测试来证明软件的正确性在逻辑上是不可能的。

没有显示的错误(错误)并不意味着没有所有错误

【讨论】:

  • 我们能不能说正确性是可能的,如果它能够满足它的设计用途。如果满足了软件设计的所有要求,并且我们能够调试所有错误,那么它对我们来说是一个正确的软件。
  • 是的,但测试无法证明您的软件在数学上是正确的,或者 100% 正确,或者它会总是返回所需的输出。您可以根据验收测试来定义软件何时经过充分测试,但严格来说,测试无法显示正确性。
  • 测试无法显示正确性。我们这么说是因为在所有输入上测试它是不可行的。我想知道我们应该将正确性与其满足要求的能力或所有可能输入的输出联系起来。
  • 在这种情况下的正确性适用于理论上不可能测试每一种可能的组合。您可以根据验收标准定义软件正确的含义。
  • 测试工具是否足以在所有输入组合上进行测试?
【解决方案2】:

测试用于发现软件中的错误,但不能用于 显示软件的正确性。

这里的单词正确性有什么意义。

一个单位的软件是functionally correct 如果它为每个可能的输入产生正确的输出。

理论计算机科学中,这个术语有很多细微差别, 例如,我们区分部分正确性全部 正确性:如果它返回的答案是部分正确 正确,如果它总是返回正确的,则 完全正确 回答。

实践中,然而,事情有点复杂。当我们 构建大型软件系统,形式化并不总是那么容易 定义一个程序的正确输出是什么,然后我们再谈 根据规范正确

我不认为声称 “测试用于发现错误但不能 用于显示正确性”,以一种很好的方式陈述。术语软件 测试 通常是指运行您的软件的小型计算机程序 在某些输入上并验证输出是否符合预期。我会 将其声明为 测试用于防止在 现有代码

在软件中不可能实现正确性是真的吗?

不,这并非不可能。尝试编写恒等函数,为 例如:f(x) → x。实际上,这很容易。越复杂 算法,越难写正确。

不仅可以编写正确的代码,还可以 prove that code is correct。然而, 这更加困难和耗时。

但是,您不能做的是证明代码在以下方面是正确的 仅测试(除非您的函数只需要有限(少量) 输入)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2010-10-04
    • 2021-07-12
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多