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