最近,我一直在推动我的团队在编写他们的代码时加入更多的测试。有几个主要的 bug 需要比说话时间更长的时间才能捕捉到,因为我们没有一个好的测试机制。
但是,我怀疑拥有适当的工具来自动化(或帮助简化)流程肯定会很有用。另一方面,我不知道 C++ 测试套件的各种选项,以及如何在它们之间做出决定?
是否有关于寻找什么的指南——是否有专门针对数值应用的指南?
最近,我一直在推动我的团队在编写他们的代码时加入更多的测试。有几个主要的 bug 需要比说话时间更长的时间才能捕捉到,因为我们没有一个好的测试机制。
但是,我怀疑拥有适当的工具来自动化(或帮助简化)流程肯定会很有用。另一方面,我不知道 C++ 测试套件的各种选项,以及如何在它们之间做出决定?
是否有关于寻找什么的指南——是否有专门针对数值应用的指南?
测试数字代码的问题在于(i)您可能并不总是知道确切的输出,您现在只能保存计算结果以供以后比较——即进行回归测试,以及(ii)由于四舍五入的不同,不同机器上的结果可能会略有不同。
要了解 deal.II 是如何做到的,请看这里: http: //www.dealii.org/developer/development/testsuite.html#regression_tests
我最近一直在使用googletest来测试我正在研究的几个数值库,并且对此非常满意。您可以非常快速地编写相当简单的测试,也可以编写需要数据初始化等的复杂测试。它还提供了(就像我相信许多其他人一样)轻松进行浮点比较而不是按位进行比较的方法。
对于我们的计算生物学 C++ 库 ( Chaste ),我们使用http://cxxtest.com/。这使用起来相当简单,效果很好,它提供了一些用于测试assert()
样式语句的宏。对于科学计算,这些通常是与 的简单直接比较TS_ASSERT_EQUALS(a,b)
或数值比较TS_ASSERT_DELTA(a,b,tolerance)
。
使用这些基本宏可以轻松编写额外的宏来比较您自己选择的向量/矩阵。有用的是,您还可以检查您的代码在给定情况下是否引发适当的警告和错误消息。test
您可以在此处浏览我们源代码文件夹中的一些示例: https ://chaste.cs.ox.ac.uk/trac/browser/trunk