可維護性: 在工作中,我曾經使用過一個測試套,它把所有的程序輸出保存到文件中。然后,通過對比輸出文件內容和一個已有的輸出文件內容的差別,可以稱已有的輸出文件為 “ 標準文件 ” ( “gold file” )。在回歸測試中,用這個方法查找 BUG 是不是明智之舉。這種方法太過于敏感了,它會產生很多錯誤的警告。隨著時間的推移,軟件開發人員會根據需要修改產品的很多輸出信息,這會導致很多自動化測試失敗。很明顯,為了保證自動化測試的順利進行,應該在對 “ 標準文件 ” 仔細分析的基礎上,根據開發人員修改的產品輸出信息對之做相應的修改。比較好的可維護性方法是,每次只檢查選定的產品的某些特定輸出,而不是對比所有的結果輸出。產品的接口變動也會導致原來的測試無法執行或者執行失敗。對于 GUI 測試,這是一個更大的挑戰。研究由于產品接口變化引起的相關測試修改,并研究使測試修改量最小的方法,測試中采用庫是解決問題的方法。當產品發生變化的時候,只需要修改相關的庫,保證測試與產品的變動同步修改即可。
完整性: 當自動化測試執行后,報告測試執行通過,可以斷定這是真的嗎?這就是我稱之為測試套的完整性。在前面的故事中,當沒有對自動化測試完整性給予應有的關注的時候,發生了富有喜劇性的情況。我們應該在多大程度上相信自動化化測試執行結果?自動化測試執行中的誤報告警是很大的問題。測試人員特別討厭由于測試腳本自身的問題或者是測試環境的問題導致測試執行失敗,但是,對于自動化測試誤報告警的情況,大家往往無能為力。你期望自己設計的測試對 BUG 很敏感、有效,當測試發現異常的時候,能夠報告測試執行失敗。有的測試框架支持對特殊測試結果的分類方法,分類包括 PASS , FAIL 和第三種測試結果 NOTRUN 或者 UNRESOLVED 。無論你怎么稱呼第三種測試結果,它很好的說明了由于某些測試失敗導致其他測試用例無法執行而并非執行失敗的情況。得到正確的測試結果是自動化測試完整性定義的一部分,另一部分是能夠確認執行成功的測試確確實實已經執行過了。我曾經在一個測試隊列中發現一個 BUG ,這個 BUG 引起測試隊列中部分測試用例被跳過,沒有執行。當測試隊列運行完畢后,沒有上報任何錯誤,我不得不通過走讀代碼的方式發現了這個 BUG 。如果,我沒有關注到這個 BUG ,那么可能在認識到自動化測試已經出現問題之前,還在長時間運行部分測試用例。