我正在爲計算機視覺的論文寫一個相當複雜的機器學習程序。它工作得很好,但我需要不斷嘗試新事物並添加新功能。這是有問題的,因爲我在擴展代碼或試圖簡化算法時有時會引入錯誤。單元測試機學習代碼
顯然,正確的做法是添加單元測試,但不清楚如何執行此操作。我的程序的許多組件產生了一個有點主觀的答案,我不能自動執行完整性檢查。
例如,我有一些代碼使用較低分辨率的曲線來近似曲線,這樣我就可以在較低分辨率曲線上進行計算密集型工作。我意外地在這段代碼中引入了一個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