隨著軟件系統應用環境的復雜性,軟件出錯的機率越來越大了,軟件面臨著一個非常關鍵的需求就是在系統出錯后能進行恢復。我是公司軟件開發測試組負責人,今天老板在測試會議上批評我說,目前用戶最大的抱怨是我們的系統缺少自動恢復功能,出現錯誤后許多的恢復過程都要人工干預來完成,說明我們的可恢復測試仍然很混亂,而且可恢復測試是完全失敗的。
不容忽視的軟件可恢復測試
(1)什么是軟件可恢復性
隨著軟件應用的日益普及,對軟件質量的要求也不斷提高。軟件質量是指軟件產品中能滿足給定需求的各種特性的總和。ISO/IEC 9126中規定了軟件的6個質量特性,即功能性(Functionality)、可靠性(Reliability)、易用性(Usability)、效率性(Efficiency)、維護性(Maintainability)和可移植性(Portability),每個特性包含若干子特性。
可靠性是指在規定的一段時間和條件下,軟件產品維持規定的性能水平的能力。3個子特性分別為:成熟性(Maturity)、容錯性(Fault tolerance)、可恢復性(Recoverability)。其中容錯性是指與在軟件錯誤或違反指定接口的情況下,維持指定的性能水平的能力有關的軟件屬性。而可恢復性是指在故障發生后,重新建立其性能水平并恢復直接受影響數據的能力,以及為達到此目的所需的時間和努力有關的軟件屬性。
一般來說,許多基于計算機的軟件系統必須在一定的時間內從錯誤中恢復過來,然后繼續運行。也就是說在某些情況下,一個軟件系統應該是在運行過程中的出現錯誤時能自動或人工進行恢復,不能使整個系統的功能都停止運作,否則就會造成嚴重損失。因此,軟件可恢復失敗包括兩個方面:一是軟件系統沒有自動的恢復到原來的性能,這意味著恢復需要人工干預;二是即使是人工干預后,也不能恢復到原來設計性能,例如軟件所涉及的數據出現某種程度的失效和損壞。
(2)什么是可恢復測試
軟件測試是發現軟件中的大部分缺陷的一種技術。軟件測試大體上劃分為三大階段:單元測試、集成測試、系統測試。系統測試是檢驗整個系統是否滿足《需求規格說明書》所提出的所有需求。其中系統測試的非功能性測試包括可靠性測試、容錯測試和恢復性測試等。
可恢復測試(Recovery testing)是測試一個系統從災難或出錯中能否很好地恢復的過程,如遇到系統崩潰、硬件損壞或其他災難性出錯??苫謴蜏y試一般是通過人為的各種強制性手段讓軟件或硬件出現故障,然后檢測系統是否能正確的恢復(自動恢復和人工恢復)。簡單的說,可恢復測試是一種對抗性的測試過程。在測試中將把應用程序或系統置于極端的條件下或是模擬的極端條件下產生故障,然后調用恢復進程,并監測、檢查和核實應用程序和數據能否得到正確的恢復。
可恢復測試通常需要關注恢復所需的時間以及恢復的程度。例如,當系統出錯時能否在指定時間間隔內修正錯誤并重新啟動系統。對于自動恢復需驗證重新初始化(Reinitialization)、檢查點(Checkpointing mechanisms)、數據恢復(Data recovery)和重新啟動 (Restart)等機制的正確性;而對于需要人工干預的恢復系統,還需估計平均修復時間,確定其是否在可接受的范圍內。
因此,隨著網絡應用、電子商務、電子政務越來越普及,系統可恢復性也顯得越來越重要,可恢復性對系統的穩定性、可靠性影響很大。但可恢復性測試很容易被忽視,因為可恢復測試相對來說是比較難的,一般情況下是很難設想得出來讓系統出錯和發生災難性的錯誤,這需要足夠的時間和精力,也需要得到更多的設計人員、開發人員的參與。
(3)容錯測試與可恢復測試的區別
容錯測試一般是輸入異常數據或進行異常操作,以檢驗系統的保護性。如果系統的容錯性好的話,系統會給出提示或內部消化掉,而不會導致系統出錯甚至崩潰。而可恢復測試是通過各種手段,讓軟件強制性地發生故障,然后驗證系統已保存的用戶數據是否丟失、系統和數據是否能很快恢復。因此,可恢復測試和容錯測試是互補的關系,可恢復測試也是檢查系統的容錯能力的方法之一,但不能只重視其中之一。
(4)故障轉移測試和可恢復測試的關系
故障轉移測試(Failover)指當主機軟硬件發生災難時候,備份機器是否能夠正常啟動,使系統可以正常運行,這對于電信,銀行等領域的軟件是十分重要的。因此,故障轉移是確保測試對象在出現故障時,能成功地將運行的系統或系統某一關鍵部分轉移到其它設備上繼續運行,即備用系統將不失時機地“頂替”發生故障的系統,以避免丟失任何數據或事務,不影響用戶的使用。
故障轉移測試和可恢復測試也是一種互補關系的測試,它們共同可確保測試對象能成功完成故障轉移,并能從導致意外數據損失或數據完整性破壞的各種硬件、軟件或網絡故障中恢復。因此,他們兩者的關系一個是測試備用系統能否及時工作,另一個是測試系統能否恢復到正確運行狀態。
可恢復測試主要內容和步驟
(1)恢復性測試的基本內容
通過可恢復測試,一方面使系統具有異常情況的抵抗能力,另一方面使系統測試質量可控制。因此,可恢復測試包括以下幾種情況:
?、儆布坝嘘P設備故障。測試對于硬件及設備故障是否有有效的保護及恢復能力,系統是否具有診斷、故障報告及指示處理方法的能力,是否具備冗余及自動切換能力,故障診斷方法是否合理和即時。例如,設備掉電后(如客戶端和服務器端斷電)的可恢復程度。
?、谲浖到y故障。測試系統的程序及數據是否有足夠可靠的備份措施,在系統遭破壞后是否具有重新恢復正常工作的能力,對系統故障是否自動檢測和診斷的功能。故障發生時,是否能對操作人員發出完整的提示信息和指示處理方法能力,是否具有自動隔離局部故障,進行系統重組和降級使用使系統不中斷運行。還有,若系統局部故障可否進行占線維護,而不中斷系統的運行。最后,在異常情況時是否記錄故障前后的狀態,搜集有用信息供測試分析。
?、蹟祿收?。是測試數據處理周期未完成時的恢復程度,例如數據交換或同步進程被中斷,異常終止或提前終止的數據庫進程,最后還有操作異常等情況。
?、芡ㄐ殴收虾湾e誤。測試有沒有糾正通信傳輸錯誤的措施,有沒有恢復到與其他系統通信發生故障前原狀的措施,還有對通信故障所采取的措施是否滿足運行要求等。