Math 如何测试数学相关单元?

Math 如何测试数学相关单元?,math,tdd,Math,Tdd,我今天认真地尝试了一下TDD,发现它真的很有帮助,与它得到的所有赞扬一致 在我寻求学习Python和TDD的练习的过程中,我已经开始使用TDD技术编写SPOJ练习,我发现了一个问题: 鉴于斯波吉的所有练习大多是应用于编程的数学;如何以TDD方式测试数学过程?已知样本数据是否正确?针对已知实现进行测试 我发现,使用问题本身中给出的样本数据是有价值的,但对于可以使用控制台快速测试的东西来说,这感觉有些过分了,更不用说以可测试的方式设计算法的开销了(代理stdout和stdin对象不啻于为一个非常小的

我今天认真地尝试了一下TDD,发现它真的很有帮助,与它得到的所有赞扬一致

在我寻求学习Python和TDD的练习的过程中,我已经开始使用TDD技术编写SPOJ练习,我发现了一个问题:


鉴于斯波吉的所有练习大多是应用于编程的数学;如何以TDD方式测试数学过程?已知样本数据是否正确?针对已知实现进行测试


我发现,使用问题本身中给出的样本数据是有价值的,但对于可以使用控制台快速测试的东西来说,这感觉有些过分了,更不用说以可测试的方式设计算法的开销了(代理stdout和stdin对象不啻于为一个非常小的回报做了太多的工作),虽然这很好,因为它迫使你们用可测试的术语来思考你们的解决方案,但我认为我可能在这方面做得太努力了


欢迎提供所有指导

使用您知道结果(输出)的示例输入。使用等价划分来确定一组合适的测试用例。对于数学代码,您可能会发现无法像其他代码那样以增量方式实现:对于每个增量改进,您可能需要几个测试用例。我的意思是,非数学代码通常可以被视为具有一组“特性”,您可以一次实现一个特性,但数学代码与此不同。

测试所有边缘情况。当输入因某些原因而特殊时,程序最有可能失败:负值或零值、非常大的值、按相反顺序输入、空输入。您可能还希望进行一些破坏性测试,以了解在事情破裂或停止之前,输入可能有多大


可能不是TDD的最佳匹配。首先,输入的数据可能比真实的人输入的数据表现得更好。其次,在一些问题上存在代码大小限制。一个广泛的测试套件可能会让你超过这个极限

你可能想看一看Bob叔叔的“,”它提供了一些关于如何选择一系列测试来测试驱动算法的指导

“已知样本数据是否正确?”是。“针对已知实现进行测试?”是的。“代理stdout和stdin对象”-您不需要这样做。将您的代码分为处理IO(解析和格式化)的组件和核心算法。@OliCharlesworth在这方面,我提出了以下建议:这些测试仅供我个人使用,SPOJ提交的代码只与问题有关。顺便说一句,非常好的建议,谢谢。无法标记为答案,因为这主要是一个开放性问题-令人惊讶的是,它没有被标记为一个。我可以对“增量改进”进行一些解释吗?