软件测试中有一个事实:
测试用于发现软件中的错误,但不能用于证明软件的正确性。 我无法理解这里单词正确性的意义。 另外,正确性是不可能在软件中实现的吗?
由于足够复杂的软件可能存在无限多个可能的错误,因此从逻辑上讲不可能通过测试来证明软件的正确性。
不存在已发现的错误(错误)并不意味着不存在所有错误。
测试用于发现软件中的错误,但不能用于 显示软件的正确性。
这里的单词正确性有什么意义。
软件的单元在功能上是 正确 如果它为每个可能的输入生成正确的输出。
在理论计算机科学中,这个术语有很多细微差别, 例如,我们区分部分正确性和全部正确性 正确性:如果它返回的答案是部分正确 正确,如果它总是返回正确的,那么它是完全正确 回答。
然而,在实践中,事情有点复杂。 当我们在 构建大型软件系统,正式地并不总是容易的 定义程序的正确输出是什么,然后我们讨论 根据规格正确。
我不认为这种说法 “测试是用来发现错误但不能 用于显示正确性”,以一种很好的方式表述。术语软件 测试通常意味着运行您的软件的小型计算机程序 某些输入并验证输出是否符合预期。 我会 声明它为 测试用于防止在中引入错误 现有代码。
软件中真的不可能实现正确性吗?
不,这并非不可能。 尝试编写恒等函数,对于 例如:
f(x) → x
。 实际上,这很容易。 越复杂
算法越难写正确。
不仅可以编写正确的代码,还可以 证明代码是 正确。 然而, 这更加困难且耗时。
但是,你不能做的是证明代码在以下方面是正确的: 仅测试(除非您的函数仅需要有限(少量)的 输入)。
正确性可以指应用程序的预期行为。应用程序的行为应该符合其预期的正确性。
其次,让软件变得完美并非不可能,但我们永远不能确定这一点。这正是我们应该使用不同类型的测试技术继续寻找错误的原因。 QA 之所以重要的唯一原因是它的工作是防止在版本结束时未检测到的错误。