劉 捷,張維利
(電子科學研究院 軟件室,北京 100041)
近年來,軟件規模不斷擴大,復雜度不斷增加,軟件質量和可靠性備受國內外學者關注[1]。目前,軟件測試技術是保證軟件質量的最直接、最有效的手段。但是對于一些航天控制軟件、大型武器裝備軟件等安全苛刻軟件,由于其代碼量通常為百萬行數量級,系統功能非常復雜,因此測試用例數量龐大,只依靠人工測試會耗費太多的人力和物力。因此,迫切需要引入自動化測試技術,提高測試效率,縮短回歸測試時間。
大型安全苛刻軟件一般具有兩個方面的特性:分布式與異質異構。首先,安全苛刻軟件面對復雜的裝備型號任務,需要綜合多個功能子系統形成分布式系統結構,各子系統間通過有線、無線網絡互聯,依靠統一的報文格式實現信息互通。其次,由于各子系統實現目標功能不同,因此,子系統內部組織形式多樣,從硬件平臺方面,可以基于X86、PowerPC或者Spark等不同處理器或板卡結構,從軟件平臺而言,又常見構造于Windows和Linux之上。本文依據某安全苛刻軟件,對軟件功能加以抽象與提升,給出面向分布式安全苛刻軟件的自動化測試系統的設計依據、工作流程與體系結構。
安全苛刻軟件研發周期長且功能模塊構成復雜,因此,面向其的自動化測試系統設計應注重兩個基本方面[2]:
1)設計能夠反映某安全苛刻系統測試領域需求的測試流程,對測試流程的各個環節進行分析,將其設計成自動化執行的軟件過程,并通過過程的組合實現某安全苛刻系統的自動化測試。
2)自動化測試系統具備良好的可擴展性和可維護性。考慮到某安全苛刻軟件的復雜性以及擴展應用到其他相關系統中,自動化測試系統設計必須具備一定的可擴展性以靈活應對業務邏輯的變化。
基于上述目標,可以歸納出如下四條基本設計思想:
1)模塊化和層次化設計思想相結合
軟件系統的發展實踐證明,模塊化的分層設計[4]是提高系統可用性、可擴展性和可維護性的主要途徑。分層模型設計將軟件系統劃分為若干個相互獨立的層次進行描述,各層之間通過設計好的接口通訊。每層負責一個功能模塊,此功能模塊可以又包含若干粒度更小的功能模塊,這些功能模塊各自負責一個功能。分層設計方法可考慮面向過程、面向對象和面向組件的分層設計方法[5]。
2)平衡系統功能的可擴展性與設計復雜性
由于不同被測系統、同一被測系統的不同分系統,其測試流程、測試數據和測試規范均有不同,自動化測試系統必須能夠快速的對系統應用進行原有功能的修改或者擴展新的功能,因此本系統的設計必須具有一定的靈活性和前瞻性。針對此設計需求,要仔細進行接口設計并參考已有的各種設計模式。
3)界面設計的基本原則
交互界面的設計,直接關系到操作的友好度和軟件的易用性。并且測試準備人員一般具有較高的被測系統測試知識技能,但計算機知識相對薄弱。因此,自動化測試系統的界面設計必須直觀、友好和易于使用。最后,界面操作的響應時間必須在用戶的容忍范圍內,如果操作時間無法縮短,則應給出提示信息。
4)安全保障原則
由于安全苛刻系統測試環境的領域特殊性,因此系統的安全可靠運行的重要性極高。要考慮采用何種設計以保證數據的完整性和一致性,即在測試程序編輯時,根據用戶角色給與不同的權限,并且據此約束用戶行為,以避免誤操作等導致嚴重后果。
自動化測試的總體流程分為四個子流程:權限認證,測試準備,測試執行以及結果分析,主流程如圖1所示。

圖1 自動化測試流程圖
用戶權限認證可以確保當前使用軟件的用戶具有相應的操作權限,系統對用戶權限有嚴格的管理,對用戶權限的操作進行訪問控制。測試準備流程為自動化測試執行準備測試任務,測試任務是自動化測試執行過程所必須的測試資源,是自動化測試執行的數據基礎。測試準備流程屬于自動化測試流程,是自動化測試流程的最初階段,進行自動化測試的執行準備相關的數據以及相關的配置。測試執行流程為自動化測試流程的核心階段,該流程必須與被測環境進行交互實現自動化測試執行,而其他流程往往可以獨立于被測環境而進行。首先在測試執行開始之后,進行測試任務的封裝和發布過程,同時進行測試環境的監控過程,發現測試執行異常以及出錯之后進行異常處理過程,然后繼續執行剩余的用例,當測試任務包含的所有用例執行完畢之后測試執行流程結束。
結果分析流程將對此測試結果信息進行解析處理形成用戶易于理解的測試結果信息。同時展示的信息還包括測試異常出錯信息等。
自動化測試系統是一個面向信息和數據驅動的測試系統[6]。根據分布式軟件自動化測試基本原理,設計了自動化測試系統的系統結構。該系統結構與基本原理中測試過程的三個階段相符合。下面將詳細的介紹系統體系結構和功能,自動化測試系統結構如圖2所示。
測試數據準備模塊對應測試任務準備過程,它由測試數據庫和測試任務準備單元組成,其中測試數據庫包括測試腳本庫、測試用例庫、測試任務庫、測試文檔庫、測試結果庫和測試對象庫等相關內容。
測試執行控制模塊對應測試任務執行過程,包括測試過程監控單元、測試執行控制單元以及測試異常處理單元。測試過程監控單元負責在測試任務執行時對整個測試環境進行監控,通過操作日志記錄本記錄分布式測試框架系統的詳細操作過程,生成操作留痕記錄;測試異常處理單元將測試過程中異常信息進行回收并根據不同的策略進行恢復處理。
測試結果評估模塊對應測試結果評估過程,它包括結果處理單元、結果統計單元和測試評估單元。
測試中間件分別與測試數據準備模塊、測試執行控制模塊和測試結果評估模塊相連接,為整個測試系統提供基礎的服務支持?;A服務包括時間服務、文件服務、進程服務、異常服務、消息通信服務、環境檢測服務以及測試監控服務,這些服務均通過統一的測試中間件API接口提供本地和遠程無差別訪問,以適應分布式系統的特點。
本文面向航天器或大型武器裝備所用的安全苛刻軟件軟件的自動化測試問題,從一般意義上給出了自動化測試系統的實現目標、依據與基本流程,并提出了一套分布式自動化測試架構。基于本架構,作者已經完成了某安全苛刻軟件的自動化測試工作。本領域內,未來關注的目標是測試過程的實時性與時序性問題,同時,利用機器學習方法對測試結果的深度分析也是值得研究的內容。

圖2 自動化測試系統結構圖
[1] Glenford J.Myers.The Art of Software Testing (Second Edition)[M].Canada: John Wiley & Sons,Inc.2004, June.
[2] 張斌.精通QTP與自動化測試框架設計實踐[M].北京: 人民郵電出版社.2010.
[3] 金大海, 宮云戰.數據驅動自動化測試方法研究[J].裝甲兵工程學院學報, 2004, 18(2): 95-97.
[4] 李瑋.軟件自動化測試混合框架的研究與實現[D].北京交通大學, 2007.
[5] 孫秋冬.軟件系統的分層設計[J].計算機工程與應用,2001, V37(7): 110-112.
[6] 顧慶, 陳道蓄, 等.一個面向分布式程序的測試系統框架[J].軟件學報, 2000, 11(8): 1053-1059.