2012-02-19 87 views
1

我維護一個提供某些主題建議的Python程序。它通過對輸入數據應用複雜的算法來實現這一點。「測試oracle」是一個非正式的輸出比較時的迴歸測試

定期更改程序代碼,以解決新發現的錯誤並修改底層算法。

我想使用迴歸測試。麻煩的是,除了運行程序外,沒有辦法知道某個輸入的「正確」輸出是什麼(甚至是在沒有錯誤的情況下也是如此)。

我在下面描述我目前的測試過程。我的問題是是否有工具可以幫助實現這個過程的自動化(當然,如果對我正在做的事情有任何其他反饋)。

第一次程序似乎對我所有的輸入案例都正確運行,我將它們的輸出保存在指定爲「已驗證」輸出的文件夾中。 「已驗證」表示根據我的知識,輸出是對於給定版本的程序的正確答案。

如果我發現一個bug,我會做出我認爲會修復它的任何更改。然後在所有輸入集上重新運行程序,並手動比較輸出。每當輸出改變,我盡我所能,非正式地審查這些變化,並找出是否:由於bug修復的變化

  1. 完全是或
  2. 變化是由於,至少部分地我引入了一個新的錯誤

在情況1中,我遞增內部版本計數器。我使用與版本計數器相同的後綴標記輸出文件,並將其移至「已驗證」文件夾。然後我將更改提交到Mercurial存儲庫。

如果將來,當這個版本不再是最新版本時,我決定分支它,我需要這些驗證的輸出作爲這個特定版本的「正確」輸出。

在案例2中,我當然試圖找到新引入的bug並修復它。這個過程一直持續到我相信與之前驗證的版本相比唯一的變化是由於預期的錯誤修復。

當我修改代碼來更改算法時,我遵循類似的過程。

回答

0

以下是我可能會用到的方法。

  1. 讓Mercurial管理代碼,輸入文件和迴歸測試輸出。
  2. 從某個父母版本開始。
  3. 製作和文件(最好儘可能少)修改。
  4. 運行迴歸測試。
  5. 查看與父版本回歸測試輸出的差異。
  6. 如果這些差異與預期不符,請嘗試查看是否引入了新的錯誤或期望是否不正確。要麼修復新的錯誤並轉到3,要麼更新期望並轉到4.
  7. 將回歸測試的輸出複製到指定用於驗證輸出的文件夾。
  8. 將更改提交給Mercurial(包括代碼,輸入文件和輸出文件)。