正确性 (计算机科学)
在理论计算机科学中,如果算法按照指定的方式运行,那么它就规范而言是正确的。 xxx的探索是功能正确性,它指的是算法的输入输出行为(即,对于每个输入,它都会产生一个满足规范的输出)。
在后一个概念中,部分正确性要求如果返回一个答案,它将是正确的,与完全正确性不同,后者还要求最终返回一个答案,即算法终止。 相应地,要证明一个程序的完全正确性,证明它的部分正确性以及它的终止性就足够了。 后一种证明(终止证明)永远无法完全自动化,因为停机问题是不可判定的。
例如,连续搜索整数 1、2、3……看我们是否能找到某种现象的例子——比如一个完全奇数——编写一个部分正确的程序是很容易的(见方框)。 但是要说这个程序是完全正确的,那就是断言一些目前在数论中未知的东西。
证明必须是数学证明,假设算法和规范都是正式给出的。 特别是,对于在给定机器上实现该算法的给定程序,它不应该是正确性断言。 这将涉及诸如对计算机内存的限制等考虑。
证明论中的一个深刻结果,即 Curry-Howard 对应,指出构造逻辑中功能正确性的证明对应于 lambda 演算中的某个程序。 以这种方式转换证明称为程序提取。
霍尔逻辑是一种特定的形式系统,用于对计算机程序的正确性进行严格推理。 它使用公理化技术来定义编程语言语义,并通过称为霍尔三元组的断言争论程序的正确性。
软件测试是旨在评估程序或系统的属性或功能并确定它是否满足其要求的结果的任何活动。 尽管对软件质量至关重要并且被程序员和测试人员广泛部署,但由于对软件原理的理解有限,软件测试仍然是一门艺术。 软件测试的难点源于软件的复杂性:我们无法完全测试一个复杂度适中的程序。 测试不仅仅是调试。 测试的目的可以是质量保证、验证和确认,或可靠性评估。 测试也可以用作通用指标。 正确性测试和可靠性测试是测试的两大领域。 软件测试是预算、时间和质量之间的权衡。