gpt4 book ai didi

unit-testing - 如何进行不确定性的单元测试?

转载 作者:行者123 更新时间:2023-12-01 23:32:42 24 4
gpt4 key购买 nike

我们有几种不同的优化算法,每次运行都会产生不同的结果。例如,优化的目标可能是找到函数的最小值,其中 0 是全局最小值。优化运行返回的数据如下:

[0.1, 0.1321, 0.0921, 0.012, 0.4]

这非常接近全局最小值,所以这是可以的。我们的第一个方法是只选择一个阈值,如果结果太高,则让单元测试失败。不幸的是,这根本不起作用:结果似乎具有高斯分布,因此,尽管不太可能,但有时测试会失败,即使算法仍然很好,而且我们只是运气不好。

那么,我该如何正确测试呢?我认为这里需要相当多的统计数据。还有一点很重要,测试仍然要快,仅仅让测试运行几百次然后取平均值会太慢。

以下是一些进一步的说明:

  • 例如,我有一个算法可以将圆拟合到一组点中。它非常快,但并不总是产生相同的结果。我想编写一个单元测试来保证在大多数情况下它足够好。

  • 不幸的是,我无法为随机数生成器选择固定种子,因为我不想测试算法是否产生与以前完全相同的结果,但我想测试类似“以 90% 的确定性我获得 0.1 或更好的结果”。

最佳答案

听起来您的优化器需要两种测试:

  1. 测试算法的整体有效性
  2. 测试算法实现的完整性

由于算法涉及随机化,(1) 很难进行单元测试。任何随机过程的测试都会在一定比例的时间内失败。您需要了解一些统计数据才能了解它应该失败的频率。有多种方法可以在测试的严格程度和失败频率之间进行权衡。

但是有一些方法可以为 (2) 编写单元测试。例如,您可以在运行单元测试之前将种子重置为特定值。那么输出是确定性的。这将不允许您评估算法的平均有效性,但这是针对 (1) 的。这样的测试将充当绊线:如果有人在维护期间向代码中引入了错误,确定性单元测试可能会捕获该错误。

可能还有其他可以进行单元测试的东西。例如,无论随机部分发生什么情况,您的算法都可以保证返回特定范围内的值。也许某些值应该始终是正数,等等。

更新:我在《美丽测试》一书中写了一章关于这个问题的内容。请参阅第 10 章:Testing a Random Number Generator .

关于unit-testing - 如何进行不确定性的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/443000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com