王暉


摘 要:自主可控是確保我國網絡空間安全可托底的基礎,近年來,我國自主可控信息技術和產業持續跨越式前進,國產操作系統是構建自主可控的信息安全體系的關鍵,其本身的穩定性、可靠性和安全性至關重要。因此,操作系統在研發過程中,全面嚴格的測試驗證成為必需,同時,為減少手工測試的勞動量和出錯率,按照預定計劃實現自動化測試,是操作系統研發測試驗證的必然趨勢和要求。文章通過自主開發以及引入完善、綜合應用主流商用或開源軟件測試工具,研究構建由測試管理、自動化測試、缺陷管理等子系統組成的國產操作系統測試體系,實現測試全過程管理的統一高效的國產操作系統自動化測試平臺,以保證國產操作系統研發和維護時的質量可靠性,滿足建立完整的國產操作系統生態鏈的需要。
關鍵詞:操作系統;自動化;測試;自主可控
沒有網絡安全就沒有國家安全,自主可控是確保我國網絡空間安全可托底的基礎。近年來,隨著國家“863”計劃、核高基等重大科技專項的展開并逐漸取得成果,我國自主可控信息技術和產業持續跨越式前進,以龍芯等為代表的處理器,以及以中標麒麟操作系統、達夢數據庫等為代表的基礎軟件,均已初步具備與國外同類產品競爭的規模和能力,并逐漸形成國產自主可控領域基礎軟硬件生態產業鏈,為我國構建安全可靠的信息系統提供了強有力的基礎軟硬件環境支撐。
操作系統是計算機軟件的基礎和靈魂,更是軟件產業的戰略制高點。操作系統研發工程浩大,其中涉及的技術方方面面,從底層各種各樣硬件設備的適配到種類繁多的上層應用軟件的支持,過程復雜、歷時持久,整個項目中產品質量控制顯得尤其重要。操作系統在研發、使用、升級等環節,都需要對系統中每一個組件或功能模塊進行全面嚴格的測試驗證。為達到提高操作系統軟件質量的目的,減少手工測試的勞動量和出錯率,通過引用或自研工具,按照預定計劃,實現自動化測試,是操作系統研發測試驗證的必然趨勢和要求。
因此,本文將針對在研發和維護國產操作系統過程,研究并構建一個統一的、高效率的自動化測試平臺,以保證國產操作系統產品的質量可靠性,同時,進一步滿足打造和完善完整的國產操作系統生態鏈的需要。
1 體系結構
通常情況下的軟件測試,測試人員首先設計合理的測試用例,按照預定測試計劃流程,實現基于測試用例的軟件測試并得到測試結果,最后與預期結果進行比對,形成軟件測試結論。自動化測試,則實現上述軟件測試過程中盡量將手動的測試行為轉化為機器執行,以達到減輕人工勞動量、節省時間、減少手動出錯率、提高測試效率的目的。
對于滿足以下條件的軟件開發,將更有利于實現自動化測試。
(1)軟件需求明確具體、相對固化。
自動化測試腳本的編寫實質上也是一個軟件開發的過程,如果軟件需求模糊或變更頻繁,將直接造成測試腳本編寫和測試用例設計的難以形成或不斷調整,從而增加了自動化測試開發維護的成本和時間。
(2)軟件生命周期階段清晰、時間長。
軟件測試過程一般包括:測試計劃、設計開發(測試腳本編寫和測試用例設計)、測試執行和測試評估,整個過程需要一定的時間周期,這就要求被測試軟件本身的生命周期各個階段劃分清晰明確、整個開發時間較長,否則,將難以支撐軟件測試過程的時間需要。
(3)測試腳本、測試用例能夠復用。
測試腳本的重復使用率越高,構建自動化測試體系平臺的成本也就越低,效益發揮也就越明顯。另外,針對手工軟件測試無法完成或重復勞動的工作,比如性能壓力測試、大數據量測試用例輸入測試等,也可以考慮引入自動化測試。
國產操作系統作為自主可控領域的基礎軟件,研制周期長,功能需求相對明確,針對龍芯、申威等國產化硬件平臺的各種不同版本,都是基于同一個版本針對不同CPU特點和需求延伸定制而來,大部分模塊功能穩定、重用性高,測試過程中的回歸測試次數多,因此,通過自主開發以及引入完善、綜合應用主流商用或開源軟件測試工具,制定有效可行的測試計劃、執行準確完整的測試用例,構建全過程管理的統一高效的自動化測試平臺非常有必要,用以保證國產操作系統研發、使用和維護時的質量可靠性,滿足建立完整的國產操作系統生態鏈的需要。
國產操作系統自動化測試平臺由測試管理、自動化測試、缺陷管理等子系統組成,其體系結構如圖1所示,包括測試需求規格說明、測試計劃制定、測試腳本編寫和測試用例設計、測試執行結果獲取、測試評估報告撰寫和軟件缺陷改進跟蹤等過程。
2 設計實現
2.1 缺陷管理子系統
在整個缺陷的生命周期中,缺陷管理子系統實現將對缺陷進行追蹤管理。主要包括以下功能:報告軟件缺陷、檢索功能、軟件缺陷變更郵件通知功能、軟件缺陷歷史變更記錄、跟蹤和描述處理軟件缺陷、軟件缺陷的相關附件管理、產品分類管理、軟件缺陷的審核機制、支持存儲大量軟件缺陷記錄、友好的用戶界面、靈活多樣的配置設定等。軟件缺陷管理子系統與測試管理子系統組合集成一個整體的自動化測試管理平臺,缺陷管理與測試管理兩個子系統之間通過增加設計的外部接口進行彼此的關聯和統一,實現報告的軟件缺陷與操作系統的版本、測試用例多對一的對應關系,即一個測試用例可提交多個軟件缺陷。
2.2 測試管理子系統
測試管理子系統包括以下功能:測試計劃制定、測試用例管理、測試執行、測試用例與軟件缺陷關聯。測試計劃制定,實現對操作系統產品的測試規劃,劃分測試任務的范圍、方法和時間等,形成產品測試計劃,并具備測試計劃的復用機制;測試用例管理,對操作系統各個模塊的測試用例按制定的測試計劃分類創建和管理,具體包括:測試方案擬制、測試方法技術和策略選擇、測試目標確定、測試環境配置、測試數據輸入、測試步驟選定、預期結果設定、是否自動化實現設置、附件文檔管理等,測試用例管理可實現用例評審標記,并具備復用機制。
測試執行管理為動態過程,包括:手動測試執行和自動測試執行,能夠全方位地觀察測試用例的執行結果,以及加強對測試過程的全時記錄,手動執行測試利用手工記錄每一次執行測試用例后的結果,自動執行測試在配置的測試環境下,將測試用例與自動化測試子系統中的測試腳本匹配關聯,自動調用相應的測試腳本執行測試任務;同時,通過測試用例與對應的缺陷管理的關鍵字進行匹配關聯,實現缺陷管理子系統與測試管理子系統的有效整合。
標識測試用例是否能夠進行自動化測試,是否可自動化主要通過對后臺數據庫中的標記測試用例配置自動化狀態并添加唯一指定標識來實現;且優先在自動化測試腳本庫中查詢指定的測試腳本名。
配置執行自動化測試用例時測試環境,需要標明一個測試執行對應一個測試環境,一個測試環境中可包括全局測試環境與本地測試環境,可以通過IP和測試用戶配置實現多臺測試主機以及測試執行的權限管理。
2.3 自動化測試子系統
自動化測試子系統,根據測試管理子系統中是否自動化配置狀態和指定標識,實現手動測試或自動化測試。根據實際測試需求,制定出相應的測試策略,對操作系統測試環境進行配置,包括測試環境的參數配置(主機網絡地址IP、操作系統等)、測試數據管理配置(測試腳本與數據的存放位置)、郵件提醒配置、測試結果數據配置(測試結果的原始數據及測試日志的存放位置),關聯測試管理子系統提供的測試用例,支持對操作系統自動化測試腳本和測試工具的統一管理和調用。另外,實現對測試結果數據、測試日志的處理分析,得到自動化測試執行的結果,還可以對回歸測試中或者基準測試中的一些對比測試結果數據進行圖標直觀輸出。主要功能模塊包括:單元測試、GUI測試、安全測試、性能測試、設備模擬框架及硬件兼容性測試、可靠性測試、命令測試等。操作系統自動化測試子系統的系統結構如圖2所示。
(1)單元測試:對操作系統軟件中的最小可測試單元進行檢查和驗證。主要實現:提供對源代碼的3種測試方式(白盒測試、黑盒測試以及回歸測試)、提供對于主流編程語言(例如C,C++,Java,Python等)不同的自動化測試。
(2)GUI測試:對操作系統GUI界面進行測試和驗證。主要實現:支持腳本化語言、支持對操作系統界面中所有與對象的識別、支持函數的可重用、提供擴展接口。
(3)安全測試:對現有的開源或者商業工具進行研究或二次開發,實現操作系統安全測試子系統,包括分析檢查器、內存泄漏檢測、二進制代碼掃描器、應用程序痕跡檢查(Application Footprinting,AF)、模糊測試(Fuzz Testing Tools and Techniques,FTTT)、靜態代碼分析(Static Code Analyzers,SCA)等功能。主要實現:針對源代碼測試出靜態類型的弱點、對任何類型的補丁創建基線并進行回歸測試、幫助測試人員找到可能觸發或隱含惡意代碼的地方、支持處理大容量的源代碼或很大的可執行文件、不改變被測試的軟件和不影響源代碼、產生有價值的診斷預測和度量分析報告。
(4)性能測試:實現針對操作系統的性能測試,用于查找軟件性能瓶頸,進行優化,保證提升操作系統的性能;實現針對應用的性能測試,用戶常使用的應用軟件,其性能直接影響了用戶對操作系統的評價和使用意愿性。主要實現:支持對系統的整形運算、浮點運算能力和系統調用、編譯器性能、文件讀寫速度等性能參數進行測試;支持對系統進程處理能力、進程切換開銷、文件處理能力和內存調度等方面進行測試;支持針對TCP/UDP請求/響應的速率和吞吐率進行測試;支持針對SMB文件服務器負載能力和吞吐量進行測試;提供測試系統IO處理能力;支持實際用戶的操作行為模擬和實時性能監測,實現對靜態的和動態的資源(文件、Servlet,Perl腳本、數據庫、FTP服務器、HTTP服務器等)的性能進行測試;支持不同壓力類型下的整體性能分析,更快地確認和查找問題,找到系統的瓶頸。
(5)設備模擬框架及硬件兼容性測試:實現設備模擬框架,為所有設備提供一個易用的輸入輸出控制接口;該設備模擬框架可以加快測試用例的開發,使調試和測試設備代碼變得更加容易。同時,提供各種常規硬件設備的測試方法,實現相應的硬件兼容性測試;操作系統的硬件兼容性一直是困擾操作系統行業發展的一個重要問題,關于設備模擬框架和硬件兼容性測試的研究實現,將有力支撐國產操作系統對多種外圍設備的支持和優化。主要實現:支持提供設備模擬框架;支持提供操作系統內核空間到用戶空間的輸入輸出控制接口;支持內核的特定目標區域測試用例執行;支持執行可能不存在設備的驅動程序內核代碼;支持硬件兼容性測試,包括硬件設備的識別、配置、加載以及性能等方面測試。
(6)可靠性測試:驗證國產操作系統的需求是否被正確實現,并找出所有對軟件可靠性影響較大的問題,通過使可靠性測試工作自動化來幫助改進OS內核。主要實現:提供測試Linux內核和相關部件的測試套件,完善并擴充相關的測試用例集;支持實現針對系統調用、內存、IPC,I/O、文件系統和網絡等的測試。
(7)命令測試:國產操作系統中,一切都是文件,系統管理的命令(內置Shell命令和OS命令)是其正常運行的核心,實現操作系統命令測試,發現問題并改進操作系統質量可靠性。主要實現:支持覆蓋命令測試用例的測試數據文件和測試腳本編寫及復用;支持測試實際結果與預期結果比較分析。
3 結語
國產操作系統作為構建自主可控的信息安全體系的關鍵基礎,構建自動化的測試平臺,是其質量可靠性的重要保證。自動化測試平臺應支持對操作系統測試流程的全方位管理,具有嚴格控制用戶權限及系統靈活配置功能,支持測試用例可自動化設置,測試執行提供手動執行與自動執行類型選擇,軟件缺陷與測試用例存在關聯統一的機制,通過配置可以使整個項目的參與人員及時地獲取軟件缺陷變化的信息,具備測試結果的統計功能以及支持多種類型的自動化測試。
[參考文獻]
[1]蔡開元.軟件可靠性工程基礎[M]. 北京:清華大學出版社,1995.
[2]宮云戰,劉海燕,萬琳,等.軟件測試性的分析與設計技術研究[C]. 北京:2000 年全國測試學術會議,2000:271-274.
[3]JIN Z,OFFUTT J. Deriving tests from software architectures[C]. Hong Kong:International Symposium on Software Reliability Engineering,2001:308-313.
[4]楊芙清,梅宏,呂建,等. 淺論軟件技術發展[J]. 電子學報,2002(12a):1 901-1906.
[5]GAO JZ,TSAO J,WU Y. Testing and quality assurance for component-based software[M]. Boston:Artech House,2003.