我目前的项目相当复杂,并且进行了大量的数学运算,其中我事先并不知道结果。我正在尝试编写单元测试(在JUint中);我目前已经编写了一些测试,然后我手工查看结果,看看它们“看起来”是否正确,但由于我的程序是我如何确定复杂数学的结果,我不是我确定如何验证准确性。
我有其他单元测试用于测试非常小的代码片段,但我不确定如何为更大块的代码编写测试。有人有任何想法和指导吗?
更多信息,这不是一个数字。它更像是:“输入:100,000行csv数据”输出“100,000 csv分析”。但这些行依赖于彼此,在10行csv数据上运行代码并不足以有意义地进行数学运算。
答案 0 :(得分:5)
做数学要求你是一名数学家,即使你是一个非常糟糕的人。没有办法绕过它。考虑到这一点,以下是数学家用来检查答案的一些方法:
如果您大致知道您的程序应该输出什么答案,那么您可以检查您的程序是否接近正确的答案,然后希望它是正确的并将其用于您的单元测试。但根据我的经验(游戏开发),真实的,硬核数学是检查自己最可靠的方法。此外,您还可以轻松获得世界上最先进的计算器之一。 :)
P.S。不要忘记在单元测试中留下一些差异。特别是在进行更高级的数学运算时,有多种正确的方法可以使浮点运算产生稍微不同的答案。
答案 1 :(得分:1)
您应该能够选择特定输入并获得这些输入的预期结果。如果你不能手工完成一些测试用例结果,你应该将你正在测试的部分分解成多个可测试的部分。您还可以在测试中使用不同的技术然后在测试项目中解决数学问题。这个问题是,如果它们不同,哪一个是错的......但至少你知道该找什么。
答案 2 :(得分:0)
这很大程度上取决于你正在做的数学类型。例如,如果您正在求解微分方程,那么您将验证您获得了相同答案的一半步长,或者您将结果与已知的精确(但缓慢)方法(如反欧拉方法)进行比较。
在不知道你正在做什么类型的数学的情况下,我假设你正在使用双精度算术。尝试将结果与BigDecimal等任意精度库进行比较,以验证您是否遇到了大量的舍入和截断错误。
答案 3 :(得分:0)
以下建议可能有点微不足道: