蘇銀科,李艷雷,周 平,常曉航
(北京機(jī)電工程研究所,北京100074)
基于故障注入的實(shí)時嵌入式軟件仿真測試技術(shù)研究
蘇銀科,李艷雷,周 平,常曉航
(北京機(jī)電工程研究所,北京100074)
摘要:由于強(qiáng)實(shí)時性、參與閉環(huán)控制、軟硬件耦合及可靠性要求高等特點(diǎn),飛行控制系統(tǒng)嵌入式軟件在軟件研制、測試及驗(yàn)收階段往往缺少動態(tài)測試環(huán)境。本文在仿真測試技術(shù)基礎(chǔ)上,針對飛行控制系統(tǒng)嵌入式軟件的特點(diǎn)與測試需求,進(jìn)行了基于故障注入技術(shù)的仿真測試技術(shù)研究,設(shè)計了一種實(shí)時嵌入式軟件仿真測試平臺方案。
關(guān)鍵詞:實(shí)時嵌入式軟件;軟件測試;故障注入;仿真測試
近年來,各種嵌入式計算機(jī)系統(tǒng)在飛行控制系統(tǒng)領(lǐng)域得到了廣泛的應(yīng)用。隨著嵌入式硬件技術(shù)的發(fā)展,硬件可靠性得到了較大的提高,與此同時飛行控制系統(tǒng)嵌入式軟件的規(guī)模及性能卻發(fā)生了很大的變化。嵌入式系統(tǒng)可靠性的瓶頸正逐漸向軟件轉(zhuǎn)移。文獻(xiàn)[1]指出目前影響嵌入式系統(tǒng)失效的因素中硬件因素已經(jīng)從50%降到10%,而軟件因素卻從3%增長到了62%。因此如何更有效地保證飛行控制系統(tǒng)嵌入式軟件的高可靠性面臨嚴(yán)峻的考驗(yàn)。
實(shí)踐證明,軟件測試對驗(yàn)證軟件的功能和性能、發(fā)現(xiàn)軟件中的缺陷具有重要的意義。飛行控制系統(tǒng)軟件是一類具有容錯機(jī)制的安全、關(guān)鍵嵌入式軟件,具有強(qiáng)實(shí)時性、參與閉環(huán)控制及硬件接口復(fù)雜與專用等特點(diǎn)。對其進(jìn)行軟件測試,尤其是系統(tǒng)測試、驗(yàn)收測試,一直以來缺少有效、可靠的測試環(huán)境。本文在飛行控制系統(tǒng)嵌入式軟件測試需求分析基礎(chǔ)上,提出將故障注入與仿真測試結(jié)合,進(jìn)行測試環(huán)境設(shè)計?;诠收献⑷氲姆抡鏈y試方法是在嵌入式軟件仿真測試研究的基礎(chǔ)上,結(jié)合故障注入過程的特點(diǎn),將故障分析、故障建模與故障注入技術(shù)有效運(yùn)用于嵌入式軟件測試的過程,有效擴(kuò)展了實(shí)時、非侵入式嵌入式軟件測試方法的靈活性。
飛行控制系統(tǒng)嵌入式軟件測試按照測試生命周期可分為單元測試、部件測試、配置項(xiàng)測試及系統(tǒng)測試四個級別,含義如表1[2]所示。
表1 飛行控制系統(tǒng)嵌入式軟件測試級別釋義Tab.1 The explication of the embedded software testing
其中軟件配置項(xiàng)是指具有完整功能、可獨(dú)立運(yùn)行的程序。配置項(xiàng)測試和系統(tǒng)測試與軟件開發(fā)需求和系統(tǒng)研制需求緊密相關(guān),要求測試必須在真實(shí)的目標(biāo)環(huán)境下開展,是一種動態(tài)的、實(shí)時的、非侵入式的黑盒測試。
飛行控制系統(tǒng)嵌入式軟件一般具有強(qiáng)實(shí)時性、參與閉環(huán)控制、軟硬件耦合及可靠性要求高等特點(diǎn),對其進(jìn)行配置項(xiàng)測試和系統(tǒng)測試(本文以下合稱動態(tài)測試),具有較大的工程難度,主要集中在以下方面:
1)飛行控制系統(tǒng)軟硬件功能耦合程度高。軟件測試時無法將軟件與硬件環(huán)境剝離,測試激勵信號需要通過目標(biāo)機(jī)硬件接口注入;
2)飛行控制系統(tǒng)往往由多個嵌入式設(shè)備、機(jī)電設(shè)備等構(gòu)成,分系統(tǒng)之間交聯(lián)關(guān)系復(fù)雜。實(shí)際中因各設(shè)備研制進(jìn)度不一,無法通過真實(shí)設(shè)備搭建測試環(huán)境。因此需要測試工具模擬各外圍設(shè)備產(chǎn)生激勵信號;
3)飛行控制系統(tǒng)具有實(shí)時性要求,因此測試環(huán)境要求及時產(chǎn)生測試激勵;而參與閉環(huán)控制的特點(diǎn)要求測試環(huán)境不能事先通過離線方式生成測試激勵,必須在線根據(jù)目標(biāo)機(jī)反饋信號生成測試激勵;同時飛行控制系統(tǒng)的高可靠性要求測試環(huán)境能夠產(chǎn)生反應(yīng)異常、故障、邊界與極限等情況的測試激勵。這些對測試激勵的生成帶來了較大的困難。
上述特點(diǎn)使得目前飛行控制系統(tǒng)嵌入式軟件的實(shí)時、非侵入式動態(tài)測試缺少靈活、通用、可靠的測試環(huán)境。一直以來,國內(nèi)飛行控制系統(tǒng)嵌入式軟件動態(tài)測試依托于專用測試平臺,測試開發(fā)難度較大;國外在這一領(lǐng)域目前已擁有一些功能強(qiáng)大,性能良好的測試平臺,卻因?yàn)轭I(lǐng)域差異、技術(shù)保護(hù)及價格昂貴,難以在國內(nèi)得到廣泛應(yīng)用。
近年來工程界針對實(shí)時嵌入式軟件的特點(diǎn),提出了多種動態(tài)測試平臺方案,比較典型的有全數(shù)字仿真測試方案、半實(shí)物仿真測試方案、全實(shí)物仿真測試方案及灰盒測試方案(是一種processor in the loop的測試方案)等。由于飛行控制系統(tǒng)嵌入式軟件的特點(diǎn),采用半實(shí)物仿真測試方案具較高的實(shí)用價值。這也是目前國內(nèi)外公認(rèn)的、行之有效的、具有廣泛應(yīng)用前景的實(shí)時嵌入式軟件的黑盒測試方案[3]。
半實(shí)物仿真測試也稱硬件在回路(hardware in the loop)仿真測試。半實(shí)物仿真測試系統(tǒng)通常由目標(biāo)機(jī)、信號調(diào)理箱、仿真計算機(jī)及測試主控機(jī)組成。半實(shí)物仿真測試系統(tǒng)的基本原理如圖1所示。
圖1 半實(shí)物仿真測試系統(tǒng)模型Fig1.The model of the HIL simulation testing
目標(biāo)機(jī)指硬件實(shí)物設(shè)備。信號調(diào)理箱與專用的目標(biāo)機(jī)進(jìn)行信號互聯(lián),并將各種不同類型的電氣信號進(jìn)行梳理,轉(zhuǎn)發(fā)給仿真計算機(jī)。仿真計算機(jī)中建立了目標(biāo)機(jī)外圍環(huán)境的仿真模型,與目標(biāo)機(jī)構(gòu)成虛擬的閉環(huán)系統(tǒng)。測試主控機(jī)通過一組人機(jī)界面為測試人員提供測試開發(fā)與過程控制接口。
這種方案能對已固化在硬件中的嵌入式軟件進(jìn)行實(shí)時的、非侵入性的閉環(huán)測試。實(shí)際根據(jù)仿真系統(tǒng)的復(fù)雜程度,可以將多臺仿真計算機(jī)聯(lián)網(wǎng),構(gòu)成實(shí)時分布式網(wǎng)絡(luò),網(wǎng)絡(luò)中每臺計算機(jī)都是一個節(jié)點(diǎn),運(yùn)行仿真模型。實(shí)時分布式網(wǎng)絡(luò)或者單個仿真計算機(jī)與目標(biāo)機(jī)之間的通信,可根據(jù)目標(biāo)機(jī)的需要進(jìn)行選擇,例如采用AD/DA、RS422、1553B等方式。
半實(shí)物仿真測試的核心是利用半實(shí)物仿真技術(shù),在仿真計算機(jī)中建立被測目標(biāo)機(jī)交聯(lián)系統(tǒng)的仿真模型,利用仿真模型代替實(shí)物設(shè)備產(chǎn)生測試激勵。這種方法有效解決了測試激勵數(shù)據(jù)在線生成的問題,也能夠保證系統(tǒng)的實(shí)時性。但這種方法中交聯(lián)系統(tǒng)的仿真模型,一般是根據(jù)交聯(lián)系統(tǒng)的功能或原理搭建,是基于正常任務(wù)剖面的,難以對飛行控制系統(tǒng)嵌入式軟件進(jìn)行如邊界、極限、異常故障情形下的測試。
由于飛行控制系統(tǒng)本身的復(fù)雜性及較高的可靠性,飛行控制系統(tǒng)嵌入式軟件的動態(tài)測試要求進(jìn)行如邊界、強(qiáng)度、極限及異常、故障等特殊情景下的測試。因此有必要研究仿真測試環(huán)境下的測試數(shù)據(jù)控制問題,即如何在仿真測試環(huán)境中模擬異常、故障現(xiàn)象,同時研究如何能夠使測試人員靈活地修改仿真測試過程數(shù)據(jù),增大測試空間,以產(chǎn)生如邊界、強(qiáng)度、極限情況下的測試激勵。
基于故障注入的仿真測試,借鑒了故障注入技術(shù)的思想原理,對仿真環(huán)境中的交聯(lián)系統(tǒng)仿真模型進(jìn)行動態(tài)干預(yù),不僅可以模擬交聯(lián)系統(tǒng)中發(fā)生的各種異常、故障,而且能夠按照用戶的設(shè)定產(chǎn)生各種邊界、強(qiáng)度、極限情況下的測試激勵。基于故障注入的仿真測試原理如圖2所示。其中OE為系統(tǒng)按照測試規(guī)格要求期望的輸出,OT為系統(tǒng)實(shí)際的輸出。嵌入式軟件仿真測試中真實(shí)交聯(lián)環(huán)境由交聯(lián)系統(tǒng)仿真模型E1與通信模型E2替代,故障注入模塊通過在仿真測試環(huán)境中動態(tài)干預(yù)仿真模型E1、E2,完成仿真測試。其中F表示故障注入模塊產(chǎn)生的故障激勵信號。
圖2 基于故障注入的仿真測試原理Fig.2 The principle of simulation testing based on fault injection
基于故障注入的仿真測試與傳統(tǒng)故障注入技術(shù)的不同在于,不是將故障注入到目標(biāo)系統(tǒng)中,而是通過采用故障注入的思想,將故障注入到交聯(lián)系統(tǒng)的仿真環(huán)境中,以實(shí)時動態(tài)地按照用戶的設(shè)定,產(chǎn)生特定情景下測試激勵,是一種故障仿真手段。
通過基于故障注入的仿真測試原理構(gòu)建測試平臺,具有以下優(yōu)點(diǎn):
1)不僅能夠通過交聯(lián)系統(tǒng)產(chǎn)生正常任務(wù)剖面內(nèi)的測試激勵,還能夠干預(yù)仿真模型運(yùn)行,產(chǎn)生各種具體故障情景下的測試激勵,可以靈活地更改測試過程中產(chǎn)生的數(shù)據(jù),為用戶提供更加有效的測試手段;
2)避免了在進(jìn)行故障、異常測試時直接修改仿真模型的弊端,將系統(tǒng)故障域與正常域分開,保證了測試過程中交聯(lián)系統(tǒng)狀態(tài)一致性,提高了結(jié)果的可信性;
3)可以將故障模型集中管理,并實(shí)現(xiàn)測試資源的重用和簡化回歸測試;
4)有助于研究故障對目標(biāo)系統(tǒng)的真實(shí)影響及相關(guān)失效行為和對目標(biāo)系統(tǒng)的容錯機(jī)制進(jìn)行有效性評估等[5]。
4.1平臺架構(gòu)設(shè)計
基于故障注入的仿真測試思想,本文設(shè)計了一種嵌入式軟件仿真測試平臺,如圖3所示。軟件以共享內(nèi)存為數(shù)據(jù)中心,主要由仿真模型解算模塊、接口收發(fā)模塊、通信協(xié)議解析模塊、測試實(shí)時顯示模塊、實(shí)時數(shù)據(jù)收集與分析模塊和測試模塊構(gòu)成。各模塊通過共享內(nèi)存實(shí)現(xiàn)數(shù)據(jù)交互。
圖3 基于故障注入的實(shí)時嵌入式軟件仿真測試平臺軟件架構(gòu)原理Fig.3 The architecture of real-time embedded software testing platform based on fault injection
仿真模型解算模塊、接口收發(fā)模塊與通信協(xié)議解析模塊共同完成目標(biāo)機(jī)交聯(lián)環(huán)境的仿真,合稱仿真模塊。架構(gòu)中各模塊的功能如下:
1)仿真模型解算模塊調(diào)用交聯(lián)系統(tǒng)數(shù)學(xué)仿真模型進(jìn)行數(shù)學(xué)仿真,這些模型只與交聯(lián)系統(tǒng)的功能或原理相關(guān),與具體硬件特性無關(guān),為系統(tǒng)的內(nèi)特性模型;
2)接口收發(fā)模塊對各個硬件接口進(jìn)行操作,負(fù)責(zé)對包數(shù)據(jù)的發(fā)送與接收;
3)通信協(xié)議解析模塊依據(jù)接口控制文檔(ICD)信息對仿真模型解算模塊輸出的數(shù)據(jù)進(jìn)行組包,或者對接口收發(fā)模塊采集的數(shù)據(jù)進(jìn)行解析;
4)測試模塊基于故障注入的仿真測試原理構(gòu)建,根據(jù)測試任務(wù)列表中當(dāng)前測試任務(wù)信息,實(shí)時地修改共享內(nèi)存的數(shù)據(jù)并干預(yù)仿真模塊的執(zhí)行結(jié)果,完成故障的仿真;
5)測試實(shí)時顯示模塊實(shí)時顯示測試過程與結(jié)果,為用戶提供一組直觀的測試顯示界面;
6)實(shí)時數(shù)據(jù)收集與分析模塊實(shí)時地進(jìn)行動態(tài)數(shù)據(jù)轉(zhuǎn)存,并實(shí)時判斷測試結(jié)果,監(jiān)測平臺工作狀態(tài)。
4.2測試模塊設(shè)計
測試模塊通過動態(tài)地修改共享內(nèi)存數(shù)據(jù)及干預(yù)各仿真模塊的運(yùn)行,實(shí)現(xiàn)對仿真測試過程的干預(yù),執(zhí)行過程為:
1)用戶通過測試腳本編輯環(huán)境編寫測試腳本(故障模型),可以直接調(diào)用保存于故障模型庫中的已有故障模型,也可以自定義故障模型;
2)腳本解釋模塊對測試腳本進(jìn)行解釋,形成一串測試任務(wù)序列,保存于測試任務(wù)列表;
3)測試控制模塊以測試任務(wù)列表為依據(jù),實(shí)時動態(tài)地判斷測試干預(yù)的條件,判斷故障的類型、動作等信息,修改共享內(nèi)存中產(chǎn)生的各種動態(tài)數(shù)據(jù)、干預(yù)仿真模塊的運(yùn)行,從而產(chǎn)生帶有故障、極限、邊界等特性的測試激勵。
4.3故障仿真模型的建立
依據(jù)實(shí)際飛行控制系統(tǒng)中故障模型之間的作用關(guān)系,對復(fù)雜故障進(jìn)行抽象,將故障模型描述為由基本模式層、模式關(guān)系層和仿測特征層三層表示的故障模型。各層之間的關(guān)系與含義如圖4所示。
圖4 故障仿真模型的三層結(jié)構(gòu)Fig.4 The three layer structure of fault model
1)基本模式層由飛行控制系統(tǒng)中底層部件的失效模式仿真模型構(gòu)成。基本模式層中各基本故障模型是系統(tǒng)表示復(fù)雜故障模型的基礎(chǔ),表示了仿真測試試驗(yàn)中故障注入的最小粒度,基本故障模型中包含了故障的基本屬性,界定了故障域范圍、故障的類型、位置等信息;
2)模式關(guān)系層對庫中基本故障模型按照特定組合關(guān)系進(jìn)行組合,形成復(fù)雜故障仿真模型,對基本故障模型實(shí)現(xiàn)了復(fù)用;
3)仿測特征層在模式關(guān)系層基礎(chǔ)上,定義了故障模型與一次測試活動之間的特定關(guān)系,目的在于故障仿真試驗(yàn)時確定故障仿真的前提條件和結(jié)束條件。
方案中測試腳本編輯環(huán)境提供了一套接口,可以對故障模型庫中的故障模型進(jìn)行特定關(guān)系組合,并設(shè)定一次測試的特征屬性,從而完成故障模型的建立。測試控制器依據(jù)這些信息,可以完成基于故障注入的仿真測試。
4.4腳本編輯環(huán)境設(shè)計
測試人員通過編寫具有一定語法格式的測試腳本來描述測試過程以及測試結(jié)果的判定條件。仿真測試平臺分析并執(zhí)行測試腳本描述的內(nèi)容,從而完成整個測試過程。這種將測試腳本作為測試人員與仿真測試平臺之間的交互方式方便靈活。
為此平臺引入了Python腳本語言,并基于此設(shè)計了測試腳本的框架。Python語法類似C和模塊化語言的雜合,并具有良好的可擴(kuò)展性,使得它能很好地適應(yīng)軟件測試的需要。使用Python語言設(shè)計的測試腳本即使作了修改,也無需重新編譯就可以調(diào)用Python解釋器直接執(zhí)行,大大節(jié)省了測試時間。
本文在實(shí)現(xiàn)測試腳本編輯模塊和框架時,采用了目前主流的C++語言作為主要實(shí)現(xiàn)語言。C++與Python的混合編程具有兩種方式:擴(kuò)展與嵌入。擴(kuò)展是指用C++語言為Python編寫擴(kuò)展模塊,以使Python可以使用C++所實(shí)現(xiàn)的函數(shù)(或類);嵌入是指C++程序調(diào)用Python解釋器執(zhí)行Python編寫的模塊。為了實(shí)現(xiàn)利用Python完成測試過程的控制,對這兩種方式進(jìn)行了有機(jī)結(jié)合,具體實(shí)施了:
1)Python解釋器在測試環(huán)境中的集成;
2)用C++為Python腳本程序編寫擴(kuò)展模塊,使其能夠訪問和控制共享內(nèi)存數(shù)據(jù)交聯(lián)系統(tǒng)仿真模型;
3)將Python腳本模塊嵌入到故障仿真框架中。
一本方案以共享內(nèi)存為數(shù)據(jù)中心,以測試模塊軟件為核心,可以完成用戶設(shè)定的各種測試激勵,并將系統(tǒng)故障域與正常域分開,保證了測試過程中交聯(lián)系統(tǒng)仿真模型狀態(tài)一致性,提高了軟件測試結(jié)果的可信性。
參考文獻(xiàn)
[1]王田苗.嵌入式系統(tǒng)設(shè)計與實(shí)例開發(fā)[M].北京:清華大學(xué)出版社.
[2]蔡建平.嵌入式軟件測試實(shí)用技術(shù)[M].北京:清華大學(xué)出版社,2010.
[3]談琳.實(shí)時計算軟件的仿真測試平臺的研究與設(shè)計[D].成都:電子科技大學(xué),2005.
[4]劉斌,艾俊,阮廉.模型驅(qū)動的實(shí)時嵌入式軟件測試方法研究[M].軟件測試學(xué)術(shù)交流論文集,2005.
[5]徐應(yīng)詩,劉斌,阮鐮.基于故障注入的仿真測試方法過程框架[J].測控技術(shù),2006,27(10):50-56.
[6]葉曉露.基于故障注入的嵌入式系統(tǒng)測試研究[D].浙江:浙江大學(xué),2008.
[7]孔文華,蘇銀科,楊麗霞.武器裝備故障模式仿真建模方法研究[M].中國仿真技術(shù)學(xué)術(shù)交流會會議論文,2012.
中圖分類號:TP273
文獻(xiàn)標(biāo)志碼:A
文章編號:2095-8110(2014)03-0069-05
收稿日期:2014–09–21;
修訂日期:2014–10–27。
作者簡介:蘇銀科(1985–),男,碩士,工程師,主要從事系統(tǒng)仿真,仿真測試等方面研究。E-mail:yinkesu@163.com
Research On Technology of the Real-time Embedded Software Simulation Test based on Fault Injection
SU Yin-ke,LI Yan-lei,ZHOU Ping,CHANG Xiao-hang
(Beijing Electromechanical Engineering Institute,Beijing 100074,China)
Abstract:Because of the characteristics of highly real-time,closed loop controlling,coupling of software with hardware,and the requirements of reliability,the embedded software of flight-control computer always runs short of dynamic testing system,especially in the phases of software developing,software testing,and acceptance testing.In this paper,a method of simulation testing based on fault injection is put forward,after analyzing the testing characteristics and demand,a blue print is designed as well.
Key words:Real-time embedded software;Software test;Fault injection;Simulation test