金成杰 ,俎 濤 ,張煥欣
(1.上海中廣核工程科技有限公司,上海 200241;2.北京火龍果網(wǎng)絡(luò)技術(shù)有限公司,北京 100088)
嵌入式軟件常用于汽車、飛機、工業(yè)控制等領(lǐng)域,很多與人身安全密切相關(guān),為了保證軟件的質(zhì)量,會做盡可能多的測試:代碼檢查、單元測試、集成測試、系統(tǒng)測試等。 這些測試都有相應(yīng)的測試對象、工具、質(zhì)量報告,而且不同的嵌入式軟件常常具有不同的運行環(huán)境。 以上因素造成了嵌入式軟件測試的復(fù)雜性和挑戰(zhàn)性。 下面就對嵌入式軟件測試存在的問題進行解讀,并提出相應(yīng)的解決方案。
為建立完整的嵌入式軟件測試工具方案,應(yīng)全面分析其過程、角色、工具、數(shù)據(jù),發(fā)現(xiàn)各環(huán)節(jié)存在的問題[1]。 目前嵌入式軟件測試過程中存在以下問題:
(1)測試工作效率低:涉及多種測試工作,主要靠人工。
(2) 測試工具匱乏: 嵌入式軟件的測試工具與測試環(huán)境密切相關(guān),經(jīng)常找不到特定的測試工具。
(3)難以獲得完整的質(zhì)量視圖:不同測試工具輸出的報告各不相同,沒有一個綜合的質(zhì)量報告。
(4)測試工件缺乏管理:各種測試對象、測試環(huán)境、測試工具、測試腳本、測試報告,缺乏集中管理。
(5)復(fù)用率低:不同的測試項目具有類似的測試流程、工具、工件,但是需要重復(fù)搭建。
嵌入式軟件測試的5 大問題是密切相關(guān)的,應(yīng)該提供一個完整的嵌入式軟件測試平臺,目標(biāo)如下:
(1)全周期流程建模:代碼檢查、單元測試、集成測試、系統(tǒng)測試[2];
(2)提供完整工具鏈:代碼檢查工具、單元測試工具、集成測試工具、系統(tǒng)測試工具;
(3)自動化執(zhí)行全周期測試流程[3];
(4)把各測試工具輸出的報告合成完整質(zhì)量報告;
(5)建立測試工程倉庫,集中管理各種被測程序、環(huán)境配置、測試用例、測試腳本、測試報告;
(6)提供項目級的整體測試資源復(fù)用能力。
嵌入式軟件測試平臺的方案概覽如圖1 所示。
圖1 嵌入式軟件測試平臺的解決方案概覽圖
本研究項目在當(dāng)前已有的嵌入式軟件測試工具基礎(chǔ)上,研發(fā)嵌入式軟件測試平臺,為測試工作提供集成解決方案。
為將上述的方案轉(zhuǎn)化并形成最終的產(chǎn)品,需進行完整的架構(gòu)設(shè)計,嵌入式軟件測試平臺的架構(gòu)設(shè)計包括功能架構(gòu)和軟件開發(fā)架構(gòu)。
嵌入式軟件測試平臺采用客戶端和服務(wù)端的部署方式, 服務(wù)器分為管理服務(wù)器和測試服務(wù)器,相應(yīng)的功能分配到各個部署節(jié)點,系統(tǒng)功能部署圖如圖 2 所示。
圖2 嵌入式軟件測試平臺功能分配圖
對應(yīng)的子系統(tǒng)和功能分配如表1 所示。
表1 嵌入式軟件測試平臺的子系統(tǒng)和功能描述
為了實現(xiàn)開發(fā)的復(fù)用和擴展,平臺采用了基于組件和面向服務(wù)的架構(gòu)模式。 根據(jù)可復(fù)用、可擴展的原則,把公共部分提煉為應(yīng)用框架和公共組件、公共服務(wù),并提供了定制部分的接口和配置參數(shù)文件。 如下是開發(fā)架構(gòu)的簡要說明:
(1)采用可擴展的應(yīng)用框架,可以通過配置擴展功能;
(2)客戶端和服務(wù)端的接口采用 Restful 微服務(wù)技術(shù);
(3)基于GDI+開發(fā)工作流建模,支持工作流復(fù)用;
(4)工作流配置用XML 格式文件存儲,易于維護。
下面詳細列出了各個子系統(tǒng)的組件設(shè)計和功能說明。 客戶端子系統(tǒng)的組件模型如圖3 所示,組件說明如表2 所示。
表2 客戶端子系統(tǒng)的組件說明
圖3 客戶端子系統(tǒng)的組件圖
管理服務(wù)子系統(tǒng)的組件模型如圖4 所示,組件說明如表 3 所示。
表3 管理服務(wù)子系統(tǒng)的組件說明
圖4 管理服務(wù)子系統(tǒng)的組件圖
測試服務(wù)子系統(tǒng)的組件模型如圖5 所示,組件說明如表 4 所示。
表4 測試服務(wù)子系統(tǒng)的組件說明
圖5 測試服務(wù)子系統(tǒng)的組件圖
嵌入式軟件主要是基于 C、C++進行開發(fā),運行在嵌入式操作系統(tǒng)環(huán)境之上,而嵌入式操作系統(tǒng)類型眾多,包括嵌入式 Linux、VxWorks、Android、RTOS等。 這就需要構(gòu)建一套能夠滿足各種嵌入式軟件運行環(huán)境的測試工具[4-5]。 為此,本文提供了如下工具鏈:
(1)源代碼相關(guān)的檢查與測試選擇了支持C/C++的工具:代碼對比工具Beyond Compare,代碼檢查工具 CppCheck,單元測試工具 Gtest、C++Test。
(2)運行環(huán)境有關(guān)的工具提供 2 種支持[6-8]:
①針對不同的操作系統(tǒng),提供對應(yīng)的運行容器。例如,對于 VxWorks 操作系統(tǒng),提供 Simics 運行容器,虛擬軟件運行環(huán)境。
②在操作系統(tǒng)之上,構(gòu)建一個數(shù)據(jù)總線。 在測試的時候,模擬各種通信的數(shù)據(jù),屏蔽運行環(huán)境。數(shù)據(jù)總線采用了DDS 技術(shù)框架,如圖 6 所示。
圖6 軟件運行容器和數(shù)據(jù)分發(fā)服務(wù)總線(DDS)
根據(jù)實際工作需要,收集、整理并集成嵌入式軟件測試工具鏈,如表 5 所示[9-11]。
表5 完整的嵌入式軟件測試工具鏈
嵌入式軟件測試平臺需要集成各種測試工具:代碼檢查工具、單元測試工具、集成測試工具、系統(tǒng)測試工具,這就需要可擴展的適配接口,通過配置參數(shù)快速引入新的測試工具[12-13]。 測試平臺的接口關(guān)系如圖 7 所示。
圖7 嵌入式軟件測試平臺接口關(guān)系圖
各種測試工具有不同的工作界面、命令、參數(shù)和報告樣式。平臺為不同的接口建立一個統(tǒng)一的配置參數(shù)結(jié)構(gòu)。 當(dāng)出現(xiàn)新的工具的時候,用戶只需為該工具配置對應(yīng)的接口參數(shù)[14]。
工具的基本描述信息屬于基本屬性,各個工具的數(shù)據(jù)結(jié)構(gòu)都是相同的,而輸入輸出參數(shù)具體到不同的工具會有所不同,用戶可以根據(jù)工具類型自定義輸入輸出參數(shù)。輸入和輸出參數(shù)的定義采用自定義結(jié)構(gòu)的XML 數(shù)據(jù)格式,每個job 的配置信息獨立存儲為一個job 的 XML 文件。
將各個測試工具輸出的報告集成到一個質(zhì)量報告需要具備 2 個功能[15]:
(1)配置報告:建立各個測試工具輸出的測試報告到綜合質(zhì)量報告的映射關(guān)系;
(2)報告生成:能夠根據(jù)配置文件,讀取各工具的測試報告,解析其中的數(shù)據(jù),根據(jù)配置生成質(zhì)量報告。
質(zhì)量報告的配置參數(shù)包含:
(1)來源報告:來源報告名稱和來源URL;
(2)目標(biāo)報告:目標(biāo)報告名稱和輸出的URL;
(3)報告構(gòu)造器:不同的質(zhì)量報告需要不同的報告構(gòu)造器,為此抽象一個構(gòu)造器基類,實現(xiàn)可擴展框架。
統(tǒng)一的質(zhì)量報告生成流程圖如圖8 所示。
圖8 綜合質(zhì)量報告生成原理示意圖
本測試平臺軟件開發(fā)完成后進行了多個嵌入式軟件測試項目的驗證。 用戶在測試平臺操作界面上建立測試工作流,配置各個job 的工具、質(zhì)量報告的組合關(guān)系,然后啟動工作流,依次調(diào)用各個job 的工具、執(zhí)行測試、輸出測試報告,當(dāng)所有測試都完成后,合成一個綜合質(zhì)量報告。 用戶可以對測試過程的狀態(tài)進行監(jiān)控, 瀏覽最終的質(zhì)量測試報告。 各個測試工作的執(zhí)行記錄如表 6 所示。 表7是平臺使用前后的工作效果對比。
表6 嵌入式軟件測試平臺應(yīng)用實例
表7 嵌入式軟件測試平臺應(yīng)用效果表
嵌入式軟件測試平臺解決了嵌入式軟件測試散亂的問題,提供了完整嵌入式軟件測試方案:全周期測試過程建模、測試工具鏈、測試流程自動執(zhí)行、合成質(zhì)量報告,在嵌入式軟件測試領(lǐng)域具有先進性和示范作用。 本測試平臺經(jīng)過多家企業(yè)的實際應(yīng)用,有效地提升了嵌入式軟件測試的效率和質(zhì)量。同時本平臺也發(fā)現(xiàn)存在下述待加強之處,例如:應(yīng)支持更多的嵌入式測試工具,應(yīng)能夠支持更多嵌入式系統(tǒng)的測試環(huán)境,能夠支持多個測試項目的并行執(zhí)行。 針對以上的改進需求,筆者增強了平臺的功能,部分需求已經(jīng)完成改進,并計劃持續(xù)提升完善,讓測試平臺具備更好的實用性和廣泛的適用性。