2013-05-29 64 views
3

我目前正在修改其他人的R-Tree實現以添加其他行爲。我想確保一旦我做出改變,樹的基本結構保持不變。如何輕鬆比較修改的代碼和參考實現?

我目前的做法是創建引用代碼的副本並將其移入它自己的包(tree_ref)中。然後我創建了一個單元測試,其中包含我的修改樹和原始樹的實例(在tree_ref中)。我用數據填充樹,然後檢查它們的字段值是否相同 - 在這種情況下,我聲明測試用例已通過。

這讓我覺得這可能不是最好的方法,並且可能有一些我不知道解決此問題的公認方法。我無法通過搜索找到一個。

任何幫助表示讚賞。謝謝。

+0

想想這個的另一種方法是:如果您是從頭開始編寫而沒有參考文件,您將如何測試您的實現? –

+0

你爲什麼不使用組合?這樣,只需測試新添加的方法即可,只要原始實現已經過測試即可。 – fge

+0

@fge感謝您的建議;我認爲我不需要修改代碼,所以我認爲這可以讓我執行比較,而只需要原始代碼的一個副本,這將是很好的。我會更多地研究它:)。 – Danny

回答

3

你在做什麼是有道理的,這是一個很好的做法。請注意,無論何時「克隆和擁有」現有軟件包,您都可能會這樣做。也許它的表現。也許這是一種行爲改變。但無論原因如何,針對參考和測試主題運行的測試都需要對這些更改不知情。

通常,這種測試可以很好地用於隨機測試 - 例如某種集合實現。

還要注意,如果參考實現具有可靠的單元測試,則不需要覆蓋這些情況 - 您只需在實現時針對測試。 (爲了完整起見,讓我毫不猶豫地陳述),您仍然必須添加自己的測試以涵蓋您在更改時引入的新行爲。

+0

非常具有啓發性;謝謝! – Danny

0

我會在兩個階段做到這一點:

首先,將隨機數據插入到樹中。 (我認爲這是你在做什麼)

二查了一些極端的情況下(不樹處理負數,爲NaN,無窮遠,上百個相同點,分佈不均衡點的?)

R樹的樂趣。請享用!

相關問題