金成杰 ,俎 濤 ,張煥欣
(1.上海中廣核工程科技有限公司,上海 200241;2.北京火龍果網絡技術有限公司,北京 100088)
嵌入式軟件常用于汽車、飛機、工業控制等領域,很多與人身安全密切相關,為了保證軟件的質量,會做盡可能多的測試:代碼檢查、單元測試、集成測試、系統測試等。 這些測試都有相應的測試對象、工具、質量報告,而且不同的嵌入式軟件常常具有不同的運行環境。 以上因素造成了嵌入式軟件測試的復雜性和挑戰性。 下面就對嵌入式軟件測試存在的問題進行解讀,并提出相應的解決方案。
為建立完整的嵌入式軟件測試工具方案,應全面分析其過程、角色、工具、數據,發現各環節存在的問題[1]。 目前嵌入式軟件測試過程中存在以下問題:
(1)測試工作效率低:涉及多種測試工作,主要靠人工。
(2) 測試工具匱乏: 嵌入式軟件的測試工具與測試環境密切相關,經常找不到特定的測試工具。
(3)難以獲得完整的質量視圖:不同測試工具輸出的報告各不相同,沒有一個綜合的質量報告。
(4)測試工件缺乏管理:各種測試對象、測試環境、測試工具、測試腳本、測試報告,缺乏集中管理。
(5)復用率低:不同的測試項目具有類似的測試流程、工具、工件,但是需要重復搭建。
嵌入式軟件測試的5 大問題是密切相關的,應該提供一個完整的嵌入式軟件測試平臺,目標如下:
(1)全周期流程建模:代碼檢查、單元測試、集成測試、系統測試[2];
(2)提供完整工具鏈:代碼檢查工具、單元測試工具、集成測試工具、系統測試工具;
(3)自動化執行全周期測試流程[3];
(4)把各測試工具輸出的報告合成完整質量報告;
(5)建立測試工程倉庫,集中管理各種被測程序、環境配置、測試用例、測試腳本、測試報告;
(6)提供項目級的整體測試資源復用能力。
嵌入式軟件測試平臺的方案概覽如圖1 所示。

圖1 嵌入式軟件測試平臺的解決方案概覽圖
本研究項目在當前已有的嵌入式軟件測試工具基礎上,研發嵌入式軟件測試平臺,為測試工作提供集成解決方案。
為將上述的方案轉化并形成最終的產品,需進行完整的架構設計,嵌入式軟件測試平臺的架構設計包括功能架構和軟件開發架構。
嵌入式軟件測試平臺采用客戶端和服務端的部署方式, 服務器分為管理服務器和測試服務器,相應的功能分配到各個部署節點,系統功能部署圖如圖 2 所示。

圖2 嵌入式軟件測試平臺功能分配圖
對應的子系統和功能分配如表1 所示。

表1 嵌入式軟件測試平臺的子系統和功能描述
為了實現開發的復用和擴展,平臺采用了基于組件和面向服務的架構模式。 根據可復用、可擴展的原則,把公共部分提煉為應用框架和公共組件、公共服務,并提供了定制部分的接口和配置參數文件。 如下是開發架構的簡要說明:
(1)采用可擴展的應用框架,可以通過配置擴展功能;
(2)客戶端和服務端的接口采用 Restful 微服務技術;
(3)基于GDI+開發工作流建模,支持工作流復用;
(4)工作流配置用XML 格式文件存儲,易于維護。
下面詳細列出了各個子系統的組件設計和功能說明。 客戶端子系統的組件模型如圖3 所示,組件說明如表2 所示。

表2 客戶端子系統的組件說明

圖3 客戶端子系統的組件圖
管理服務子系統的組件模型如圖4 所示,組件說明如表 3 所示。

表3 管理服務子系統的組件說明

圖4 管理服務子系統的組件圖
測試服務子系統的組件模型如圖5 所示,組件說明如表 4 所示。

表4 測試服務子系統的組件說明

圖5 測試服務子系統的組件圖
嵌入式軟件主要是基于 C、C++進行開發,運行在嵌入式操作系統環境之上,而嵌入式操作系統類型眾多,包括嵌入式 Linux、VxWorks、Android、RTOS等。 這就需要構建一套能夠滿足各種嵌入式軟件運行環境的測試工具[4-5]。 為此,本文提供了如下工具鏈:
(1)源代碼相關的檢查與測試選擇了支持C/C++的工具:代碼對比工具Beyond Compare,代碼檢查工具 CppCheck,單元測試工具 Gtest、C++Test。
(2)運行環境有關的工具提供 2 種支持[6-8]:
①針對不同的操作系統,提供對應的運行容器。例如,對于 VxWorks 操作系統,提供 Simics 運行容器,虛擬軟件運行環境。
②在操作系統之上,構建一個數據總線。 在測試的時候,模擬各種通信的數據,屏蔽運行環境。數據總線采用了DDS 技術框架,如圖 6 所示。

圖6 軟件運行容器和數據分發服務總線(DDS)
根據實際工作需要,收集、整理并集成嵌入式軟件測試工具鏈,如表 5 所示[9-11]。

表5 完整的嵌入式軟件測試工具鏈
嵌入式軟件測試平臺需要集成各種測試工具:代碼檢查工具、單元測試工具、集成測試工具、系統測試工具,這就需要可擴展的適配接口,通過配置參數快速引入新的測試工具[12-13]。 測試平臺的接口關系如圖 7 所示。

圖7 嵌入式軟件測試平臺接口關系圖
各種測試工具有不同的工作界面、命令、參數和報告樣式。平臺為不同的接口建立一個統一的配置參數結構。 當出現新的工具的時候,用戶只需為該工具配置對應的接口參數[14]。
工具的基本描述信息屬于基本屬性,各個工具的數據結構都是相同的,而輸入輸出參數具體到不同的工具會有所不同,用戶可以根據工具類型自定義輸入輸出參數。輸入和輸出參數的定義采用自定義結構的XML 數據格式,每個job 的配置信息獨立存儲為一個job 的 XML 文件。
將各個測試工具輸出的報告集成到一個質量報告需要具備 2 個功能[15]:
(1)配置報告:建立各個測試工具輸出的測試報告到綜合質量報告的映射關系;
(2)報告生成:能夠根據配置文件,讀取各工具的測試報告,解析其中的數據,根據配置生成質量報告。
質量報告的配置參數包含:
(1)來源報告:來源報告名稱和來源URL;
(2)目標報告:目標報告名稱和輸出的URL;
(3)報告構造器:不同的質量報告需要不同的報告構造器,為此抽象一個構造器基類,實現可擴展框架。
統一的質量報告生成流程圖如圖8 所示。

圖8 綜合質量報告生成原理示意圖
本測試平臺軟件開發完成后進行了多個嵌入式軟件測試項目的驗證。 用戶在測試平臺操作界面上建立測試工作流,配置各個job 的工具、質量報告的組合關系,然后啟動工作流,依次調用各個job 的工具、執行測試、輸出測試報告,當所有測試都完成后,合成一個綜合質量報告。 用戶可以對測試過程的狀態進行監控, 瀏覽最終的質量測試報告。 各個測試工作的執行記錄如表 6 所示。 表7是平臺使用前后的工作效果對比。

表6 嵌入式軟件測試平臺應用實例

表7 嵌入式軟件測試平臺應用效果表
嵌入式軟件測試平臺解決了嵌入式軟件測試散亂的問題,提供了完整嵌入式軟件測試方案:全周期測試過程建模、測試工具鏈、測試流程自動執行、合成質量報告,在嵌入式軟件測試領域具有先進性和示范作用。 本測試平臺經過多家企業的實際應用,有效地提升了嵌入式軟件測試的效率和質量。同時本平臺也發現存在下述待加強之處,例如:應支持更多的嵌入式測試工具,應能夠支持更多嵌入式系統的測試環境,能夠支持多個測試項目的并行執行。 針對以上的改進需求,筆者增強了平臺的功能,部分需求已經完成改進,并計劃持續提升完善,讓測試平臺具備更好的實用性和廣泛的適用性。