劉春龍 王 洋 申 彪
北京航天自動控制研究所,北京 100854
隨著航天產(chǎn)品在信息化、體系化、自主化和智能化等方面的飛速發(fā)展,軟件在整個系統(tǒng)中的重要性日益提高,軟件的規(guī)模越來越大、關(guān)鍵程度越來越高,軟件的質(zhì)量與可靠性已經(jīng)成為影響航天產(chǎn)品質(zhì)量與可靠性的重要因素。軟件測試是目前普遍采用的提高軟件質(zhì)量的重要手段,是軟件質(zhì)量保證工作中的重要環(huán)節(jié)之一[1]。
嵌入式軟件測試主要有真實環(huán)境測試、半實物仿真環(huán)境測試和全數(shù)字仿真環(huán)境測試。真實環(huán)境測試和半實物仿真環(huán)境測試依賴于嵌入式軟件的硬件環(huán)境,在硬件條件不具備的情況下很難開展軟件測試工作。因此,目前很多研究針對嵌入式軟件的全數(shù)字仿真環(huán)境測試,此類測試可以脫離嵌入式軟件的硬件環(huán)境,可以盡早的開展軟件測試工作。全數(shù)字仿真測試平臺是嵌入式軟件測試中常用的測試工具,它的優(yōu)點是透明性好、可控性強(qiáng)、易于注入測試數(shù)據(jù),對小概率、安全關(guān)鍵功能的測試可以提供有效的手段支持。另外,被測軟件代碼不需要插樁,在不做任何改動的情況下,就可以完成對被測軟件的非侵入式測試[2]。
在現(xiàn)階段,全數(shù)字仿真測試平臺都應(yīng)用于針對單處理器嵌入式軟件的配置項級的測試,并且能夠很好地仿真多種類型處理器內(nèi)核芯片、片上設(shè)備以及雙口、串口和1553等多種硬件設(shè)備。測試人員通過編寫腳本語言來注入數(shù)據(jù)和故障,能夠利用平臺高效、準(zhǔn)確地完成測試工作。現(xiàn)在大多數(shù)型號軟件的配置項級測試都在全數(shù)字仿真測試平臺上完成。雖然航天型號軟件功能越來越復(fù)雜,研制周期卻越來越短。而系統(tǒng)級軟件測試是保障整個型號的軟件系統(tǒng)能夠正常工作的一項重要工作。為了保證型號任務(wù)成功,系統(tǒng)級軟件測試也將變得越來越重要。而現(xiàn)階段航天型號系統(tǒng)級軟件測試仍然擺脫不了對硬件設(shè)備的依賴,因此,系統(tǒng)級軟件測試在整個航天型號軟件研制周期中仍占很大比例。
研究出一種針對多處理器軟件的全數(shù)字仿真測試平臺開發(fā)技術(shù)。該技術(shù)可以快速、準(zhǔn)確地為多處理器軟件搭建測試平臺,為軟件測試人員實施系統(tǒng)級軟件測試奠定了基礎(chǔ)。
全數(shù)字仿真測試平臺以真實箭載目標(biāo)代碼為對象,利用軟件仿真技術(shù)逼真地模擬物理硬件目標(biāo)系統(tǒng),原來運行于真實目標(biāo)系統(tǒng)上的嵌入式軟件,可以不加修改直接在全數(shù)字仿真測試平臺上運行,并且其運行的動態(tài)特性與在真實目標(biāo)機(jī)上一致,能夠讓硬件和軟件開發(fā)人員同時進(jìn)行系統(tǒng)定義、軟件開發(fā)、集成和部署。單處理器的嵌入式軟件測試平臺分層結(jié)構(gòu)如圖1所示:
圖1 單處理器全數(shù)字仿真測試平臺分層結(jié)構(gòu)圖
由圖1可以看出全數(shù)字仿真測試平臺是基于虛擬內(nèi)核的分層結(jié)構(gòu)。而多處理器嵌入式軟件測試是指對多個同時運行在單處理器上的嵌入式軟件進(jìn)行測試,如果用一種技術(shù)同步多個核的運行狀態(tài),并且完成多個平臺之間的數(shù)據(jù)傳輸,那么單處理器測試平臺就可以拓展到多處理器。在后續(xù)章節(jié)介紹相關(guān)的技術(shù)。
DDS是對象管理組織(OMG)制定的實現(xiàn)訂閱/發(fā)布通信模式、滿足實時性要求的軟件設(shè)計標(biāo)準(zhǔn)和規(guī)范,該規(guī)范對分布式實時系統(tǒng)中的數(shù)據(jù)發(fā)布、傳遞和接收的接口和行為進(jìn)行了標(biāo)準(zhǔn)化。DDS純粹以數(shù)據(jù)為中心來進(jìn)行數(shù)據(jù)分發(fā),并將資源狀況、對資源的期待程度及網(wǎng)絡(luò)狀況等用QoS參數(shù)來描述,大大增強(qiáng)了通信的實時性和靈活性,簡化了分布式系統(tǒng)中數(shù)據(jù)的有效發(fā)布,為實時環(huán)境下以數(shù)據(jù)為中心的分布式應(yīng)用提供高效、有用的通信服務(wù),其特點如下[3]:
1)具有開放式體系結(jié)構(gòu),提供規(guī)范的接口、服務(wù)和數(shù)據(jù)格式,使業(yè)務(wù)應(yīng)用系統(tǒng)軟件可以輕松地正確實現(xiàn)移植、互操作和交互功能;
2)具備共享數(shù)據(jù)能力,無需考慮數(shù)據(jù)生產(chǎn)者和使用者實際的物理地址和在組織架構(gòu)中的位置;
3)支持以數(shù)據(jù)為中心的、高效的訂閱/發(fā)布模式。
DDS規(guī)范描述了2個層次的接口:以數(shù)據(jù)為中心的發(fā)布/訂閱層(DCPS)和數(shù)據(jù)本地重構(gòu)層(DL-RL),其結(jié)構(gòu)如圖2所示。DCPS層是DDS的基礎(chǔ)層,為應(yīng)用軟件提供了數(shù)據(jù)發(fā)布和訂閱的功能,使發(fā)布者能夠識別數(shù)據(jù)對象并發(fā)布數(shù)據(jù);DLRL層是建立在DCPS層之上的一個可選層,能夠?qū)⒎?wù)簡單地集成到應(yīng)用層,在數(shù)據(jù)更新后自動重組數(shù)據(jù),并通知訂閱者及時更新。
圖2 DDS結(jié)構(gòu)圖
DCPS是DDS規(guī)范的基礎(chǔ)層,也是DDS規(guī)范的核心層,建立在一個共享的“全局?jǐn)?shù)據(jù)空間”概念基礎(chǔ)之上,所有數(shù)據(jù)對象均存在于此空間。訪問數(shù)據(jù)時,應(yīng)用軟件通過使用一個簡單的主題名稱來指定需要發(fā)布或訂閱的數(shù)據(jù)類別,通過QoS參數(shù)指定數(shù)據(jù)傳送保障需求,一旦發(fā)布和訂閱的主題能夠匹配并且QoS兼容,則形成了發(fā)布方至訂閱方的連接,可以進(jìn)行數(shù)據(jù)傳送。該模型中數(shù)據(jù)收發(fā)雙方均無需了解對方物理駐留位置、駐留形式,實現(xiàn)了通信雙方時間、空間和數(shù)據(jù)通信的多維松散耦合[4]。
圖3 數(shù)據(jù)傳輸模型
DDS將分布式網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)定義為主題,將數(shù)據(jù)的產(chǎn)生和接收對象分別定義為發(fā)布者和訂閱者,從而構(gòu)成數(shù)據(jù)的發(fā)布/訂閱傳輸模型。各個節(jié)點在邏輯上無主從關(guān)系,點與點之間都是對等關(guān)系,通信方式可以是點對點、點對多及多對多等。如圖3所示。數(shù)據(jù)書寫器和數(shù)據(jù)閱讀器與發(fā)布者和訂閱者配合,實現(xiàn)主題的發(fā)布與接收。
一個發(fā)布者是一個負(fù)責(zé)數(shù)據(jù)分發(fā)的對象,可以發(fā)布不同類型的數(shù)據(jù)。應(yīng)用程序通過數(shù)據(jù)書寫器通知發(fā)布者給定類型的數(shù)據(jù)對象是否存在和具體數(shù)值。當(dāng)數(shù)據(jù)書寫器將數(shù)據(jù)對象的值通知發(fā)布者后,發(fā)布者負(fù)責(zé)執(zhí)行數(shù)據(jù)分發(fā)任務(wù)。一個發(fā)布應(yīng)用就是通過數(shù)據(jù)書寫器和發(fā)布者協(xié)同實現(xiàn)的。
一個訂閱者是負(fù)責(zé)接收發(fā)布的數(shù)據(jù)并使接收應(yīng)用程序可以使用到數(shù)據(jù)對象。為了訪問收到的數(shù)據(jù),應(yīng)用程序使用訂閱者上綁定的數(shù)據(jù)閱讀器。一個訂閱應(yīng)用就是通過數(shù)據(jù)閱讀器和訂閱者協(xié)同實現(xiàn)的。
我們可以通過同時運行多個單處理器嵌入式軟件測試平臺從而形成多處理器嵌入式軟件測試平臺, 從單處理器嵌入式軟件測試平臺拓展到多處理器嵌入式軟件測試平臺需要解決下面2個問題:
1)多個平臺之間的實時數(shù)據(jù)交換
多個嵌入式軟件測試平臺是指多個單處理嵌入式軟件測試平臺同時運行,在運行中,一個測試平臺的輸出數(shù)據(jù)可能是另一個測試平臺的輸入數(shù)據(jù),因此,解決多個測試平臺之間的實時數(shù)據(jù)交換問題是多個嵌入式軟件測試平臺能否成功運行的關(guān)鍵問題之一;
2)多個處理器之間時間同步
嵌入式軟件有著自己的運行時序,因此每個單處理器嵌入式軟件測試平臺有其自己的運行時序。而多個單處理器嵌入式軟件測試平臺同時運行時,每個處理器之間的時序同步問題也是多個嵌入式測試平臺能否正確運行的關(guān)鍵問題之一。
為了解決上述問題,我們采用分布式計算方式,將全數(shù)字平臺部署在用網(wǎng)絡(luò)連接的多臺計算機(jī)。為保證網(wǎng)絡(luò)通訊的高可靠性,采用DDS網(wǎng)絡(luò)中間件作為網(wǎng)絡(luò)傳輸?shù)牡讓訕?gòu)件。在此基礎(chǔ)上設(shè)計了基于通道的系統(tǒng)模型,如圖4所示:
圖4 基于通道的系統(tǒng)模型
該模型由通道和節(jié)點構(gòu)成,代表了由多個嵌入式軟件組成的彈上系統(tǒng)。每一個單處理器軟件測試平臺代表通道上的一個節(jié)點,所有需要進(jìn)行信息交換的節(jié)點都掛接在同一個通道上。節(jié)點與節(jié)點之間通過元數(shù)據(jù)(MetaData)和心跳信號(BeatData)進(jìn)行通訊。節(jié)點可以全部部署在網(wǎng)絡(luò)中的一個物理節(jié)點上,也可以部署在網(wǎng)絡(luò)中的任意物理節(jié)點上。
我們對每個節(jié)點的描述信息分為基本信息、輸出數(shù)據(jù)、輸入數(shù)據(jù)、輸出心跳名稱和輸入心跳名稱。其中基本信息包含節(jié)點ID、通道號及節(jié)點類型等信息,這些基本信息描述了節(jié)點在平臺中的基本特征;發(fā)布信息描述了節(jié)點輸出數(shù)據(jù)的相關(guān)信息;訂閱數(shù)據(jù)描述了節(jié)點輸入數(shù)據(jù)的相關(guān)信息;輸入心跳和輸出心跳都描述了節(jié)點的運行時鐘周期。
多處理器軟件測試平臺間的數(shù)據(jù)交換技術(shù)是基于DDS發(fā)布/訂閱傳輸模型實現(xiàn)的。正如本文第3章中所述,DDS是建立在一個共享的“全局?jǐn)?shù)據(jù)空間”概念基礎(chǔ)之上,所有數(shù)據(jù)對象均存在于此空間。在多處理器軟件的測試平臺中,每個節(jié)點都有輸出數(shù)據(jù)和輸入數(shù)據(jù)信息。按照DDS規(guī)范,把節(jié)點的輸出數(shù)據(jù)稱為發(fā)布,把節(jié)點的輸入數(shù)據(jù)稱為訂閱(如表1)。在構(gòu)建多處理器測試平臺的時候,將一個節(jié)點的發(fā)布數(shù)據(jù)和另一個節(jié)點中屬于相同主題的訂閱數(shù)據(jù)捆綁起來,即可在節(jié)點需要該數(shù)據(jù)的時候快速獲取,如圖5所示。
表1 訂閱者/發(fā)布者模式
圖5 多處理器軟件測試平臺節(jié)點間數(shù)據(jù)交換示意圖
因為嵌入式軟件對實時性有較高的要求,為了不使節(jié)點間交換數(shù)據(jù)花費太多時間,把節(jié)點的發(fā)布和訂閱信息分為多個主題,并且把屬于一個主題的發(fā)布和訂閱在節(jié)點的配置信息中綁定起來。這樣,當(dāng)一個節(jié)點需要另一個節(jié)點的數(shù)據(jù)時,就能夠快速獲取。
多處理器嵌入式軟件測試平臺運行需要解決的另一個問題是多個處理器間時間同步的問題。嵌入式軟件是按照一定的時序去運行,因此,多處理器嵌入式軟件測試平臺中的每一個節(jié)點也需要統(tǒng)一步調(diào)去進(jìn)行正常運行。我們采用引入一個同步節(jié)點,專門去同步不同節(jié)點的運行周期。具體實現(xiàn)方法如下:
1)當(dāng)同一通道的所有節(jié)點已經(jīng)處于就緒狀態(tài)后,同步節(jié)點發(fā)送同步信號,當(dāng)同步節(jié)點收到所有其他節(jié)點的同步好信號后,當(dāng)前平臺初始化工作結(jié)束;
2)同步節(jié)點中設(shè)置同步周期,假設(shè)為1ms,平臺中任意一個節(jié)點先啟動運行,運行1ms后,把自己的輸出心跳輸出給同步節(jié)點,然后該節(jié)點停止運行,等待同步節(jié)點下一次心跳數(shù)據(jù)。其他節(jié)點類似,當(dāng)同步節(jié)點收到通道中所有節(jié)點的心跳數(shù)據(jù)后,平臺該周期運行完成;
3)平臺中所有節(jié)點運行完一個周期(1ms)后,同步節(jié)點輸出心跳數(shù)據(jù),通知平臺中所有節(jié)點繼續(xù)下一周期的運行。如此循環(huán)直至整個嵌入式軟件運行結(jié)束。
圖6 多處理器軟件測試平臺節(jié)點時間同步示意圖
在某型號的飛行控制軟件的測試過程中利用了多處理器軟件的測試平臺。圖7(a)和(b)分別為該型號在平臺上運行與理論仿真導(dǎo)航速度、導(dǎo)航位置的相對誤差和絕對誤差曲線。由曲線可知,由于在平臺上與理論仿真數(shù)據(jù)誤差在允許范圍之內(nèi)。
圖7(a) 某型號在平臺上運行與理論仿真導(dǎo)航速度的相對誤差和絕對誤差曲線
圖7(b) 某型號在平臺上運行與理論仿真導(dǎo)航位置的相對誤差和絕對誤差曲線
表2為該型號在平臺上運行時2個節(jié)點時間同步情況表。表中2個節(jié)點虛擬仿真時間始終保持在0.1ms內(nèi),能夠保持在同步周期內(nèi)運行。而真實運行時間由于各節(jié)點的機(jī)器性能有較大差距。
多處理器嵌入式軟件的全數(shù)字仿真測試平臺開發(fā)技術(shù)已經(jīng)在多個型號軟件的配置項軟件測試中得到了應(yīng)用,該技術(shù)準(zhǔn)確地模擬了多處理器嵌入式軟件的運行,很好地解決了多處理器間時間同步和數(shù)據(jù)同步的問題,并且支持測試人員進(jìn)行各種不同類型的故障注入。目前,已有型號軟件使用多核處理器,本文的多處理器軟件的測試平臺開發(fā)技術(shù)在這些嵌入式軟件的測試過程中也得到了應(yīng)用。隨著越來越多的型號軟件采用多核處理器,該技術(shù)的實用性將得到進(jìn)一步的提升。
表2 某型號飛行控制軟件時間同步結(jié)果統(tǒng)計表