余童蘭 張曌寰 周 進 徐浩杰
(1.南華大學計算機學院,湖南 衡陽 421001;2.中國核動力研究設計院核反應堆系統設計技術重點實驗室,四川 成都 61004)
近年來,軟件測試越來越受重視,隨著軟件自動化測試技術日漸成熟, 國內軟件對測試的要求也在逐漸提高, 軟件質量和測試效率提升成為軟件工程領域一個重要的課題[1];另一方面組合測試模型等可以帶來可觀測試效率提升的新興軟件測試理論在實際測試工具中的應用還十分有限[2]。
隨著核電國產化的不斷發展,核電廠核反應堆的安全問題已經引起業內人士的廣泛關注。 反應堆保護系統(Reactor Protection System, RPS)作為在核反應堆運行過程中對反應堆進行保護的第一道防線,也在不斷地研發和完善中。 我國首套自主核電軟件包和一體化軟件集成平臺(NESTOR)也以用戶界面友好、應用靈活性強、且具有很強的糾錯能力著稱。其開發的RPS 不僅能對運行中的常規異常監測數據進行報警, 以燃料性能模塊為例,統計堆芯功率分布、 冷卻劑溫度分布等諸多參數的同時, 還能基于諸多參數換算出壁表面熱流密度等值,在可能帶來風險的操作進行前給出友好的預警和提示,為反應堆提供更加全面的保護[3-4]。
多維度、 嚴格的參數驗證算法也為其組成軟件的測試帶來了挑戰。 尤其是作為與人機交互驗證直接相關的系統測試, 不僅要求對照設計說明書進行常規功能性的系統測試, 還要求基于各種場景對輸入卡值進行必要的參數替換和用例演化, 以達到更高的測試可靠性和全面性。 數量較大的輸入卡參數也給其系統測試帶來了較大的工作量和較大的執行難度, 現有的常用測試工具很難應對此種強度下的系統測試[5]。 于此同時, 近年來以組合測試為代表的測試理論研究日漸成熟。 組合測試是一種科學有效的軟件測試方法,該方法旨在通過一定算法用總體數量較少的測試用例有效地檢測和衡量軟件系統中各個因子以及因子間的相互作用對整個系統的影響[6]。
目前此類專用軟件的系統測試由于常見測試工具的兼容性問題, 多數系統測試用例執行大量依賴于人工,測試人員的工作量大,而又效率低下。
結合上述現狀,迫切需要一種具有廣泛適用性,同時能合理高效輔助用例設計, 合理控制測試用例集大小, 且能高效復用執行的系統測試工具。 設計和開發一個基于組合測試模型的系統測試工具有助于提高資源利用率,減少資源占用,縮短系統測試所用時間,使測試人員的注意力更多地集中到真正有效的軟件質量管理上來
它是一種科學有效的軟件測試方法, 該方法旨在通過一定算法用總體數量較少的測試用例有效地檢測和衡量軟件系統中各個因子以及因子間的相互作用對整個系統的影響[7]。 實踐證明組合測試相比傳統枚舉測試, 在消耗資源相對較少的前提下, 具有較高的錯誤檢測能力。
假設影響待測單元的因子共有n 個, 其因子集合為 F={f1,f2,…,fn},設 因 子 fi ∈F 經 過 等 價 類 劃 分 等前期處理后包含 ai 個合法取值,即其因子取值的集合為Vi(1 ≤i ≤n),不妨設Vi={0,1,…,ai-1}。 稱一個n 元 組 t=(v1,v2,…,vn)(v1 ∈V1,v2 ∈V2,…,vn ∈Vn)為一條測試用例。 稱一個由多個類似 n 元組所構成的集合T{t1,t2,…,tx}為待測單元的一個測試用例集。
組合測試研究的核心問題之一就是組合測試用例的生成問題, 即如何針對具體待測單元, 在滿足組合覆蓋指標的前提下, 如何生成規模盡可能小的測試用例集, 以便在保證在錯誤檢測能力達到要求的前提下, 盡可能有效地減少測試用例總數, 進而降低測試成本[8]。
它是對整個系統的一類測試,將硬件、軟件和操作人員看作一個有機整體, 檢驗其是否存在不符合系統說明書之處, 是否滿足用戶規定的需求。 此種測試可以發現系統分析和設計中的錯誤[9]。
對于經過集成測試的軟件, 系統測試主要包括功能測試和健壯性測試兩大類。 功能測試主要測試軟件系統的功能是否正確, 是否滿足需求說明書的要求。正確性是軟件最重要的質量因素, 因此功能測試在系統測試中必不可少。 健壯性測試主要測試軟件系統在異常情況下能否正常運行的能力。 健壯性有容錯能力和恢復能力兩層含義。 典型的健壯性測試包含壓力測試、恢復測試、安全測試、等幾類。 壓力測試是測試軟件系統在正常數據量以及高負荷等情況下是否還能正常地工作,而不產生嚴重、非預期的錯誤。 恢復測試主要關注可能導致軟件運行失敗的各種情況, 并驗證其恢復過程能否正確執行, 能否在規定時間內被更正,在特殊條件下, 系統也應該具備容錯能力。 安全測試是測試軟件系統安全措施是否完善, 能不能保證軟件系統不受非法侵入影響[10]。
根據系統測試需求, 分析系統測試工具功能需求劃分為如下幾個部分:總控模塊、系統通信模塊、初始化模塊、環境描述與部署模塊、用例生成模塊、用例衍生模塊、用例執行模塊、報告生成模塊、驗證模塊。 整個系統模塊劃分如下圖1 所示

圖1 系統測試工具的功能需求劃分
結合需求分析與工具開發環境現狀, 基于組合測試理論的系統測試工具的總體設計主要分為用例管理、用例生成、用例衍生和用例執行四大模塊。
啟動管理器:作為整個測試工具的引導,處理各個執行參數,并于用戶直接交互。
用例目錄初始化功能: 按照用戶的參數選擇將所選目錄格式化為對應用例模版, 方便后續的用例生成, 被初始化的各個目錄間錄制環境相互獨立, 互不影響。
數據字典: 包含整個工具的語言文件存儲和參數存儲等。
用例模版:主要包含處理用戶操作的各個操作類。
執行記錄捕獲功能: 監聽并捕獲待測系統執行和用戶對待測系統的各種操作、 被操作的節點信息、以及被操作對象的狀態,并記錄至預生成用例。
執行記錄定制功能: 支持用戶在操作被測系統過程中添加、 修改自定義節點信息和增加斷言信息,并追加至預生成用例。
執行記錄校驗功能: 在用戶操作被測系統和定制用例的過程中, 對預生成用例進行實時執行和狀態校驗。 用以保證捕獲和定制所生成用例的完整性和可用性。
生成測試腳本功能:將測試用例封裝成測試腳本。包含完整用例信息和斷言狀態。
用例節點拆解功能: 將基礎測試用例拆分成各種類型節點和對應節點值列表,便于衍生。
生成衍生節點列表功能: 利用組合測試算法對節點列表進行重組,生產衍生節點列表。
生成衍生用例功能: 將組合測試算法所得的每組節點值封裝至基礎測試用例,存儲至對應用例組。
執行環境搭建功能: 根據用戶選擇的參數搭建對應用例執行環境。
測試用例執行功能: 根據用戶選擇在指定環境執行單個、部分組、全部測試用例,并生成執行日志。 為保證執行效率,需要具有并發執行。
測試報告生成功能: 根據執行日志情況生成測試報告。 包含詳細的節點執行信息和完整清晰的斷言結果。
首先輸入測試腳本名開始用例錄制, 在錄制過程中可根據需要, 使用UI Recorder for Chrome 插件對用例進行定制。 第二,完成用例錄制后,執行用例節點拆解。 并根據測試需求對輸入卡列表進行擴增直到完成測試用例集生成。 第三步,執行用例衍生。 最后進行測試用例執行環境搭建,獲取測試報告。
如下圖4.2 所示, 對某私有云測試模塊功能測試共生成4 個手工測試用例,40 個衍生測試用例, 覆蓋率100%。 單用例一次執行通過率100%, 用例可用性100%
同比之下, 現有系統測試工具, 以使用最廣泛的Selenium Recorder 為例,為達到同樣的覆蓋率,共需手工錄制40 以上個測試用例工作量對比懸殊;為達到同樣效率, 整體測試用例設計需要進行嚴密排布, 根據經驗統計,10 左右量級的并行事件單憑肉體處理就已經十分極限; 在此基礎上額外借助輔助排布工具,又會同時引入附加時間成本和誤差; 除此之外, 手工用例的復核和復用又是一項艱巨工程。 反觀在Puirecorder工具方案中, 測試人員的注意力僅需集中于基礎的、功能性的用例設計, 以及用例演化的數量級控制上,用例的復核僅需對基礎用例負責, 基礎用例和衍生用例也由嚴謹組的邏輯和組合保證其高可用性。 整體用例的高覆蓋率對健壯性測試也有積極意義。
本文在組合測試模型的基礎上, 通過功能測試衍生性能測試, 通過性能測試強化健壯性測試, 進而通過三者的互相增進,回到提供整體系統測試中來。
最 終 實 現 的 測 試 工 具 Puirecorder, 對 windows、macos、類unix 系統具有普遍適配性,用例錄制易用、高效, 對測試用例集的合理設置和生成具有指導能力,用例執行環境包含多個通用平臺, 生成的測試報告包含多種常用格式, 內容詳細易用, 能滿足系統測試中的大部分需求。
使用此類測試工具, 能使得測試人員把測試精力真正集中到系統測試資源的合理布置上來, 減少了手工測試的消耗以及一些不必要的簡單重復勞動消耗。
結合這些成果和優點, 可以證明組合測試模型在系統測試中的應用是合理、 可行的。 不同領域測試工具和算法的交叉組合與合理利用, 對自動化測試發展有著相當大的意義。 課題和工具還有待進一步完善,自動化測試的不斷發展也必將為軟件工程領域的整體發展注入更多的新鮮血液。