我正在为计算机视觉的论文写一个相当复杂的机器学习程序。它工作得很好,但我需要不断尝试新事物并添加新功能。这是有问题的,因为我在扩展代码或试图简化算法时有时会引入错误。单元测试机学习代码
显然,正确的做法是添加单元测试,但不清楚如何执行此操作。我的程序的许多组件产生了一个有点主观的答案,我不能自动执行完整性检查。
例如,我有一些代码使用较低分辨率的曲线来近似曲线,这样我就可以在较低分辨率曲线上进行计算密集型工作。我意外地在这段代码中引入了一个bug,并且只有在我的整个程序的结果稍微恶化的时候才发现它是一个艰苦的搜索。
但是,当我试图为它编写一个单元测试时,我不清楚该怎么做。如果我制作了一个简单的曲线,它有一个明确正确的低分辨率版本,那么我并没有真正测试出所有可能出错的东西。如果我制作一个简单的曲线,然后稍微扰动这些点,我的代码就开始产生不同的答案,即使这段代码现在看起来确实很好。
这实际上是最有用的建议。我所有成功的调试都是通过使用这样的技术手工完成的。但是这个PDF为自动化过程提供了一些很好的建议。 您的PDF链接不适用于我,但一个简单的谷歌找到它。 – forefinger 2010-02-10 21:28:27
@forefinger - 我现在已经修复了这个链接。但我很高兴你找到了这篇文章,并发现它很有用。 – APC 2010-02-10 21:38:55
该PDF的作者有一本关于同一主题的出色书籍:http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – TrueWill 2010-02-10 21:42:51