8

有没有关于如何创建、维护和思考为数值分析代码编写测试例程的好的在线资源?

对于测试矩阵乘法,我可以看到的限制之一是明显的测试(比如将一个矩阵作为单位)可能无法完全测试代码的功能。

此外,您通常还要处理大型数据结构。有没有人有一些关于如何解决这个问题的好主意,或者有指向好地方的指针?

4

3 回答 3

3

听起来您至少需要考虑以两种不同的方式进行测试:

  1. 一些数值方法允许一些元思维。例如,可逆操作允许您设置测试用例以查看结果是否在原始可接受的错误范围内。例如,矩阵M-inverse乘以矩阵M * 随机向量V应该再次导致V,在一些可接受的误差测量范围内。
    显然,这个例子练习了矩阵求逆、矩阵乘法和矩阵向量乘法。我喜欢这样的链,因为你可以生成相当多的随机测试用例并获得统计覆盖率,而这将是一个不得不手工编写的过程。不过,他们不会孤立地执行单一操作。

  2. 一些数值方法对它们的错误有一个封闭形式的表达。如果您可以使用已知解决方案设置情况,则可以比较解决方案和计算结果之间的差异,寻找超出这些已知范围的差异。

从根本上说,这个问题说明了很好地测试复杂方法需要大量领域知识的问题。具体的参考资料需要关于您正在测试的内容的更具体的信息。我肯定会建议您至少手头有史蒂夫·耶格推荐的书单。

于 2008-09-24T19:47:54.393 回答
2

如果您要进行矩阵计算,请使用 LAPACK。这是经过良好测试的代码。几十年来,非常聪明的人一直在努力。他们深入思考了外行永远不会想到的问题。

一般来说,我推荐两种测试:系统测试和随机测试。我所说的系统性是指探索边缘案例等。如果您可以阅读源代码,它会有所帮助。算法通常有分支点:以这种方式计算此范围内的数字,以另一种方式计算另一个范围内的数字,等等。靠近任一侧的分支点的测试值,因为那是近似误差通常最大的地方。

随机输入值也很重要。如果你理性地选择所有的测试用例,你可能会系统地避免一些你没有意识到的问题。有时,即使您没有要测试的确切值,您也可以充分利用随机输入值。例如,如果您有计算函数及其逆的代码,您可以生成 1000 个随机值并查看应用该函数及其逆是否会让您回到开始的位置。

于 2008-10-18T19:55:09.390 回答
1

查看David Gries的一本书,名为The Science of Programming。这是关于证明程序的正确性。如果你想确定你的程序是正确的(为了证明它们的正确性),这本书是一个很好的起点。

可能不完全是您正在寻找的东西,但它是软件工程问题的计算机科学答案。

于 2008-08-19T15:55:28.263 回答