我今天正在认真对待TDD,并且发现它真的很有帮助,符合它所获得的所有赞誉。
在我开始学习Python和TDD的练习中,我已经开始使用TDD技术对SPOJ练习进行编码,我得到了一个问题:
鉴于所有SPOJ的练习主要是数学应用于编程;如何像TDD Fashion一样测试数学程序?对已知的正确数据进行抽样?针对已知实现进行测试?
我发现使用问题本身给出的示例数据很有价值但是对于可以使用控制台快速测试的内容感觉有些过分,更不用说以可测试的方式设计算法的开销(代理stdout)并且stdin对象对于一个非常小的奖励来说是太多的工作了,虽然它很好,因为它迫使你用可测试的术语来思考你的解决方案,我想我可能会在这方面努力。
欢迎所有指导
答案 0 :(得分:0)
使用您知道结果(输出)的样本输入。使用等价分区来标识一组合适的测试用例。使用数学代码,您可能会发现无法像其他代码那样以递增方式实现:每个增量改进可能需要多个测试用例。我的意思是,非数学代码通常可以被认为具有一组“特征”,并且您可以一次实现一个特征,但数学代码并不像那样。
答案 1 :(得分:0)
测试所有边缘情况。当输入由于某种原因特殊时,您的程序最有可能失败:负值,零值,非常大的值,反向输入,空输入。您可能还需要进行一些破坏性测试,以确定在事情中断或停止之前输入的大小。
Sphere online Judge可能不是TDD的最佳选择。首先,输入数据的表现可能比真实的人更好。其次,某些问题存在代码大小限制。广泛的测试套件可能会超过您的限制。
答案 2 :(得分:0)
你可能想看看鲍勃叔叔的“Transformation Priority Premise”。它提供了一些关于如何选择一系列测试来测试驱动算法的指导。