algorithm - 未知正确输出时有效验证程序逻辑的方法

标签 algorithm testing logic verification

在今年 Google 的 Code Jam 资格赛中做“Djikstra”问题时,我遇到了试图验证我的程序的问题。我用来完成这类任务的标准方法是编写两个程序,它们以完全不同的方式做同样的事情。然后你在输入上运行这两个。如果两个程序的输出不同,您就知道其中一个或两个程序中存在错误。这种方法的缺点是程序员必须创建两个程序,实际上使花费的时间加倍。

与编写多个版本的程序并相互运行相比,是否有更好/更有效的方法来验证程序是否正确?

请注意,只有当正确的输出未知并且您无法生成验证输入-输出集时,您才会遇到此问题。如果您先验知道任何给定输入集的输出应该是什么,那么验证程序就很容易了。所以,这个问题只适用于你不知道正确的输出应该是什么的情况,你只知道程序应该做的过程的规范。

在 Dijkstra 问题的情况下,我可以编写一个“测试数据生成器”,它从输出向后生成一个已知的输入状态。通过这样做,我可以通过编写第二个程序来创建测试数据集,但是这个程序会比求解器简单得多,因此比编写两个求解器要少得多,但是,为了争论,让我们假设这个选项不可用。

最佳答案

找不到更好的测试方法。通常,其中一个程序应该是一种蛮力算法,您可以确保在任何输入集上都能正确输出。然后你验证具有最佳内存和时间复杂度的程序是否提供相同的输出(你没有提到它们有什么不同,但我认为这就是你的意思)。

关于algorithm - 未知正确输出时有效验证程序逻辑的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594199/

相关文章:

c# - 负载平衡值到 8 "silos"

java - 从其他字符串集合的示例中拆分字符串

testing - 如何滚动 PreferenceScreen?

ruby-on-rails - 在 rails TestCase 中检查正则表达式

c - C 中的合并排序编译,但不排序

algorithm - 如何以迭代方式按顺序遍历 BTree 而无需递归?

algorithm - 如何将 RGB 代码转换为 8 个简单间隔(可能?)

javascript - 如何使用 Protractor 测试来确定是否发布我的应用程序?

c# - 如果文本框为空白或空,如何将文本框的值设置为 "0"?

sql - 使用 BETWEEN 子句 SQL 输出缺少名称