劉春龍 王 洋 申 彪
北京航天自動(dòng)控制研究所,北京 100854
隨著航天產(chǎn)品在信息化、體系化、自主化和智能化等方面的飛速發(fā)展,軟件在整個(gè)系統(tǒng)中的重要性日益提高,軟件的規(guī)模越來越大、關(guān)鍵程度越來越高,軟件的質(zhì)量與可靠性已經(jīng)成為影響航天產(chǎn)品質(zhì)量與可靠性的重要因素。軟件測(cè)試是目前普遍采用的提高軟件質(zhì)量的重要手段,是軟件質(zhì)量保證工作中的重要環(huán)節(jié)之一[1]。
嵌入式軟件測(cè)試主要有真實(shí)環(huán)境測(cè)試、半實(shí)物仿真環(huán)境測(cè)試和全數(shù)字仿真環(huán)境測(cè)試。真實(shí)環(huán)境測(cè)試和半實(shí)物仿真環(huán)境測(cè)試依賴于嵌入式軟件的硬件環(huán)境,在硬件條件不具備的情況下很難開展軟件測(cè)試工作。因此,目前很多研究針對(duì)嵌入式軟件的全數(shù)字仿真環(huán)境測(cè)試,此類測(cè)試可以脫離嵌入式軟件的硬件環(huán)境,可以盡早的開展軟件測(cè)試工作。全數(shù)字仿真測(cè)試平臺(tái)是嵌入式軟件測(cè)試中常用的測(cè)試工具,它的優(yōu)點(diǎn)是透明性好、可控性強(qiáng)、易于注入測(cè)試數(shù)據(jù),對(duì)小概率、安全關(guān)鍵功能的測(cè)試可以提供有效的手段支持。另外,被測(cè)軟件代碼不需要插樁,在不做任何改動(dòng)的情況下,就可以完成對(duì)被測(cè)軟件的非侵入式測(cè)試[2]。
在現(xiàn)階段,全數(shù)字仿真測(cè)試平臺(tái)都應(yīng)用于針對(duì)單處理器嵌入式軟件的配置項(xiàng)級(jí)的測(cè)試,并且能夠很好地仿真多種類型處理器內(nèi)核芯片、片上設(shè)備以及雙口、串口和1553等多種硬件設(shè)備。測(cè)試人員通過編寫腳本語言來注入數(shù)據(jù)和故障,能夠利用平臺(tái)高效、準(zhǔn)確地完成測(cè)試工作。現(xiàn)在大多數(shù)型號(hào)軟件的配置項(xiàng)級(jí)測(cè)試都在全數(shù)字仿真測(cè)試平臺(tái)上完成。雖然航天型號(hào)軟件功能越來越復(fù)雜,研制周期卻越來越短。而系統(tǒng)級(jí)軟件測(cè)試是保障整個(gè)型號(hào)的軟件系統(tǒng)能夠正常工作的一項(xiàng)重要工作。為了保證型號(hào)任務(wù)成功,系統(tǒng)級(jí)軟件測(cè)試也將變得越來越重要。而現(xiàn)階段航天型號(hào)系統(tǒng)級(jí)軟件測(cè)試仍然擺脫不了對(duì)硬件設(shè)備的依賴,因此,系統(tǒng)級(jí)軟件測(cè)試在整個(gè)航天型號(hào)軟件研制周期中仍占很大比例。
研究出一種針對(duì)多處理器軟件的全數(shù)字仿真測(cè)試平臺(tái)開發(fā)技術(shù)。該技術(shù)可以快速、準(zhǔn)確地為多處理器軟件搭建測(cè)試平臺(tái),為軟件測(cè)試人員實(shí)施系統(tǒng)級(jí)軟件測(cè)試奠定了基礎(chǔ)。
全數(shù)字仿真測(cè)試平臺(tái)以真實(shí)箭載目標(biāo)代碼為對(duì)象,利用軟件仿真技術(shù)逼真地模擬物理硬件目標(biāo)系統(tǒng),原來運(yùn)行于真實(shí)目標(biāo)系統(tǒng)上的嵌入式軟件,可以不加修改直接在全數(shù)字仿真測(cè)試平臺(tái)上運(yùn)行,并且其運(yùn)行的動(dòng)態(tài)特性與在真實(shí)目標(biāo)機(jī)上一致,能夠讓硬件和軟件開發(fā)人員同時(shí)進(jìn)行系統(tǒng)定義、軟件開發(fā)、集成和部署。單處理器的嵌入式軟件測(cè)試平臺(tái)分層結(jié)構(gòu)如圖1所示:

圖1 單處理器全數(shù)字仿真測(cè)試平臺(tái)分層結(jié)構(gòu)圖
由圖1可以看出全數(shù)字仿真測(cè)試平臺(tái)是基于虛擬內(nèi)核的分層結(jié)構(gòu)。而多處理器嵌入式軟件測(cè)試是指對(duì)多個(gè)同時(shí)運(yùn)行在單處理器上的嵌入式軟件進(jìn)行測(cè)試,如果用一種技術(shù)同步多個(gè)核的運(yùn)行狀態(tài),并且完成多個(gè)平臺(tái)之間的數(shù)據(jù)傳輸,那么單處理器測(cè)試平臺(tái)就可以拓展到多處理器。在后續(xù)章節(jié)介紹相關(guān)的技術(shù)。
DDS是對(duì)象管理組織(OMG)制定的實(shí)現(xiàn)訂閱/發(fā)布通信模式、滿足實(shí)時(shí)性要求的軟件設(shè)計(jì)標(biāo)準(zhǔn)和規(guī)范,該規(guī)范對(duì)分布式實(shí)時(shí)系統(tǒng)中的數(shù)據(jù)發(fā)布、傳遞和接收的接口和行為進(jìn)行了標(biāo)準(zhǔn)化。DDS純粹以數(shù)據(jù)為中心來進(jìn)行數(shù)據(jù)分發(fā),并將資源狀況、對(duì)資源的期待程度及網(wǎng)絡(luò)狀況等用QoS參數(shù)來描述,大大增強(qiáng)了通信的實(shí)時(shí)性和靈活性,簡(jiǎn)化了分布式系統(tǒng)中數(shù)據(jù)的有效發(fā)布,為實(shí)時(shí)環(huán)境下以數(shù)據(jù)為中心的分布式應(yīng)用提供高效、有用的通信服務(wù),其特點(diǎn)如下[3]:
1)具有開放式體系結(jié)構(gòu),提供規(guī)范的接口、服務(wù)和數(shù)據(jù)格式,使業(yè)務(wù)應(yīng)用系統(tǒng)軟件可以輕松地正確實(shí)現(xiàn)移植、互操作和交互功能;
2)具備共享數(shù)據(jù)能力,無需考慮數(shù)據(jù)生產(chǎn)者和使用者實(shí)際的物理地址和在組織架構(gòu)中的位置;
3)支持以數(shù)據(jù)為中心的、高效的訂閱/發(fā)布模式。
DDS規(guī)范描述了2個(gè)層次的接口:以數(shù)據(jù)為中心的發(fā)布/訂閱層(DCPS)和數(shù)據(jù)本地重構(gòu)層(DL-RL),其結(jié)構(gòu)如圖2所示。DCPS層是DDS的基礎(chǔ)層,為應(yīng)用軟件提供了數(shù)據(jù)發(fā)布和訂閱的功能,使發(fā)布者能夠識(shí)別數(shù)據(jù)對(duì)象并發(fā)布數(shù)據(jù);DLRL層是建立在DCPS層之上的一個(gè)可選層,能夠?qū)⒎?wù)簡(jiǎn)單地集成到應(yīng)用層,在數(shù)據(jù)更新后自動(dòng)重組數(shù)據(jù),并通知訂閱者及時(shí)更新。

圖2 DDS結(jié)構(gòu)圖
DCPS是DDS規(guī)范的基礎(chǔ)層,也是DDS規(guī)范的核心層,建立在一個(gè)共享的“全局?jǐn)?shù)據(jù)空間”概念基礎(chǔ)之上,所有數(shù)據(jù)對(duì)象均存在于此空間。訪問數(shù)據(jù)時(shí),應(yīng)用軟件通過使用一個(gè)簡(jiǎn)單的主題名稱來指定需要發(fā)布或訂閱的數(shù)據(jù)類別,通過QoS參數(shù)指定數(shù)據(jù)傳送保障需求,一旦發(fā)布和訂閱的主題能夠匹配并且QoS兼容,則形成了發(fā)布方至訂閱方的連接,可以進(jìn)行數(shù)據(jù)傳送。該模型中數(shù)據(jù)收發(fā)雙方均無需了解對(duì)方物理駐留位置、駐留形式,實(shí)現(xiàn)了通信雙方時(shí)間、空間和數(shù)據(jù)通信的多維松散耦合[4]。

圖3 數(shù)據(jù)傳輸模型
DDS將分布式網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)定義為主題,將數(shù)據(jù)的產(chǎn)生和接收對(duì)象分別定義為發(fā)布者和訂閱者,從而構(gòu)成數(shù)據(jù)的發(fā)布/訂閱傳輸模型。各個(gè)節(jié)點(diǎn)在邏輯上無主從關(guān)系,點(diǎn)與點(diǎn)之間都是對(duì)等關(guān)系,通信方式可以是點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多及多對(duì)多等。如圖3所示。數(shù)據(jù)書寫器和數(shù)據(jù)閱讀器與發(fā)布者和訂閱者配合,實(shí)現(xiàn)主題的發(fā)布與接收。
一個(gè)發(fā)布者是一個(gè)負(fù)責(zé)數(shù)據(jù)分發(fā)的對(duì)象,可以發(fā)布不同類型的數(shù)據(jù)。應(yīng)用程序通過數(shù)據(jù)書寫器通知發(fā)布者給定類型的數(shù)據(jù)對(duì)象是否存在和具體數(shù)值。當(dāng)數(shù)據(jù)書寫器將數(shù)據(jù)對(duì)象的值通知發(fā)布者后,發(fā)布者負(fù)責(zé)執(zhí)行數(shù)據(jù)分發(fā)任務(wù)。一個(gè)發(fā)布應(yīng)用就是通過數(shù)據(jù)書寫器和發(fā)布者協(xié)同實(shí)現(xiàn)的。
一個(gè)訂閱者是負(fù)責(zé)接收發(fā)布的數(shù)據(jù)并使接收應(yīng)用程序可以使用到數(shù)據(jù)對(duì)象。為了訪問收到的數(shù)據(jù),應(yīng)用程序使用訂閱者上綁定的數(shù)據(jù)閱讀器。一個(gè)訂閱應(yīng)用就是通過數(shù)據(jù)閱讀器和訂閱者協(xié)同實(shí)現(xiàn)的。
我們可以通過同時(shí)運(yùn)行多個(gè)單處理器嵌入式軟件測(cè)試平臺(tái)從而形成多處理器嵌入式軟件測(cè)試平臺(tái), 從單處理器嵌入式軟件測(cè)試平臺(tái)拓展到多處理器嵌入式軟件測(cè)試平臺(tái)需要解決下面2個(gè)問題:
1)多個(gè)平臺(tái)之間的實(shí)時(shí)數(shù)據(jù)交換
多個(gè)嵌入式軟件測(cè)試平臺(tái)是指多個(gè)單處理嵌入式軟件測(cè)試平臺(tái)同時(shí)運(yùn)行,在運(yùn)行中,一個(gè)測(cè)試平臺(tái)的輸出數(shù)據(jù)可能是另一個(gè)測(cè)試平臺(tái)的輸入數(shù)據(jù),因此,解決多個(gè)測(cè)試平臺(tái)之間的實(shí)時(shí)數(shù)據(jù)交換問題是多個(gè)嵌入式軟件測(cè)試平臺(tái)能否成功運(yùn)行的關(guān)鍵問題之一;
2)多個(gè)處理器之間時(shí)間同步
嵌入式軟件有著自己的運(yùn)行時(shí)序,因此每個(gè)單處理器嵌入式軟件測(cè)試平臺(tái)有其自己的運(yùn)行時(shí)序。而多個(gè)單處理器嵌入式軟件測(cè)試平臺(tái)同時(shí)運(yùn)行時(shí),每個(gè)處理器之間的時(shí)序同步問題也是多個(gè)嵌入式測(cè)試平臺(tái)能否正確運(yùn)行的關(guān)鍵問題之一。
為了解決上述問題,我們采用分布式計(jì)算方式,將全數(shù)字平臺(tái)部署在用網(wǎng)絡(luò)連接的多臺(tái)計(jì)算機(jī)。為保證網(wǎng)絡(luò)通訊的高可靠性,采用DDS網(wǎng)絡(luò)中間件作為網(wǎng)絡(luò)傳輸?shù)牡讓訕?gòu)件。在此基礎(chǔ)上設(shè)計(jì)了基于通道的系統(tǒng)模型,如圖4所示:

圖4 基于通道的系統(tǒng)模型
該模型由通道和節(jié)點(diǎn)構(gòu)成,代表了由多個(gè)嵌入式軟件組成的彈上系統(tǒng)。每一個(gè)單處理器軟件測(cè)試平臺(tái)代表通道上的一個(gè)節(jié)點(diǎn),所有需要進(jìn)行信息交換的節(jié)點(diǎn)都掛接在同一個(gè)通道上。節(jié)點(diǎn)與節(jié)點(diǎn)之間通過元數(shù)據(jù)(MetaData)和心跳信號(hào)(BeatData)進(jìn)行通訊。節(jié)點(diǎn)可以全部部署在網(wǎng)絡(luò)中的一個(gè)物理節(jié)點(diǎn)上,也可以部署在網(wǎng)絡(luò)中的任意物理節(jié)點(diǎn)上。
我們對(duì)每個(gè)節(jié)點(diǎn)的描述信息分為基本信息、輸出數(shù)據(jù)、輸入數(shù)據(jù)、輸出心跳名稱和輸入心跳名稱。其中基本信息包含節(jié)點(diǎn)ID、通道號(hào)及節(jié)點(diǎn)類型等信息,這些基本信息描述了節(jié)點(diǎn)在平臺(tái)中的基本特征;發(fā)布信息描述了節(jié)點(diǎn)輸出數(shù)據(jù)的相關(guān)信息;訂閱數(shù)據(jù)描述了節(jié)點(diǎn)輸入數(shù)據(jù)的相關(guān)信息;輸入心跳和輸出心跳都描述了節(jié)點(diǎn)的運(yùn)行時(shí)鐘周期。
多處理器軟件測(cè)試平臺(tái)間的數(shù)據(jù)交換技術(shù)是基于DDS發(fā)布/訂閱傳輸模型實(shí)現(xiàn)的。正如本文第3章中所述,DDS是建立在一個(gè)共享的“全局?jǐn)?shù)據(jù)空間”概念基礎(chǔ)之上,所有數(shù)據(jù)對(duì)象均存在于此空間。在多處理器軟件的測(cè)試平臺(tái)中,每個(gè)節(jié)點(diǎn)都有輸出數(shù)據(jù)和輸入數(shù)據(jù)信息。按照DDS規(guī)范,把節(jié)點(diǎn)的輸出數(shù)據(jù)稱為發(fā)布,把節(jié)點(diǎn)的輸入數(shù)據(jù)稱為訂閱(如表1)。在構(gòu)建多處理器測(cè)試平臺(tái)的時(shí)候,將一個(gè)節(jié)點(diǎn)的發(fā)布數(shù)據(jù)和另一個(gè)節(jié)點(diǎn)中屬于相同主題的訂閱數(shù)據(jù)捆綁起來,即可在節(jié)點(diǎn)需要該數(shù)據(jù)的時(shí)候快速獲取,如圖5所示。

表1 訂閱者/發(fā)布者模式

圖5 多處理器軟件測(cè)試平臺(tái)節(jié)點(diǎn)間數(shù)據(jù)交換示意圖
因?yàn)榍度胧杰浖?duì)實(shí)時(shí)性有較高的要求,為了不使節(jié)點(diǎn)間交換數(shù)據(jù)花費(fèi)太多時(shí)間,把節(jié)點(diǎn)的發(fā)布和訂閱信息分為多個(gè)主題,并且把屬于一個(gè)主題的發(fā)布和訂閱在節(jié)點(diǎn)的配置信息中綁定起來。這樣,當(dāng)一個(gè)節(jié)點(diǎn)需要另一個(gè)節(jié)點(diǎn)的數(shù)據(jù)時(shí),就能夠快速獲取。
多處理器嵌入式軟件測(cè)試平臺(tái)運(yùn)行需要解決的另一個(gè)問題是多個(gè)處理器間時(shí)間同步的問題。嵌入式軟件是按照一定的時(shí)序去運(yùn)行,因此,多處理器嵌入式軟件測(cè)試平臺(tái)中的每一個(gè)節(jié)點(diǎn)也需要統(tǒng)一步調(diào)去進(jìn)行正常運(yùn)行。我們采用引入一個(gè)同步節(jié)點(diǎn),專門去同步不同節(jié)點(diǎn)的運(yùn)行周期。具體實(shí)現(xiàn)方法如下:
1)當(dāng)同一通道的所有節(jié)點(diǎn)已經(jīng)處于就緒狀態(tài)后,同步節(jié)點(diǎn)發(fā)送同步信號(hào),當(dāng)同步節(jié)點(diǎn)收到所有其他節(jié)點(diǎn)的同步好信號(hào)后,當(dāng)前平臺(tái)初始化工作結(jié)束;
2)同步節(jié)點(diǎn)中設(shè)置同步周期,假設(shè)為1ms,平臺(tái)中任意一個(gè)節(jié)點(diǎn)先啟動(dòng)運(yùn)行,運(yùn)行1ms后,把自己的輸出心跳輸出給同步節(jié)點(diǎn),然后該節(jié)點(diǎn)停止運(yùn)行,等待同步節(jié)點(diǎn)下一次心跳數(shù)據(jù)。其他節(jié)點(diǎn)類似,當(dāng)同步節(jié)點(diǎn)收到通道中所有節(jié)點(diǎn)的心跳數(shù)據(jù)后,平臺(tái)該周期運(yùn)行完成;
3)平臺(tái)中所有節(jié)點(diǎn)運(yùn)行完一個(gè)周期(1ms)后,同步節(jié)點(diǎn)輸出心跳數(shù)據(jù),通知平臺(tái)中所有節(jié)點(diǎn)繼續(xù)下一周期的運(yùn)行。如此循環(huán)直至整個(gè)嵌入式軟件運(yùn)行結(jié)束。

圖6 多處理器軟件測(cè)試平臺(tái)節(jié)點(diǎn)時(shí)間同步示意圖
在某型號(hào)的飛行控制軟件的測(cè)試過程中利用了多處理器軟件的測(cè)試平臺(tái)。圖7(a)和(b)分別為該型號(hào)在平臺(tái)上運(yùn)行與理論仿真導(dǎo)航速度、導(dǎo)航位置的相對(duì)誤差和絕對(duì)誤差曲線。由曲線可知,由于在平臺(tái)上與理論仿真數(shù)據(jù)誤差在允許范圍之內(nèi)。

圖7(a) 某型號(hào)在平臺(tái)上運(yùn)行與理論仿真導(dǎo)航速度的相對(duì)誤差和絕對(duì)誤差曲線

圖7(b) 某型號(hào)在平臺(tái)上運(yùn)行與理論仿真導(dǎo)航位置的相對(duì)誤差和絕對(duì)誤差曲線
表2為該型號(hào)在平臺(tái)上運(yùn)行時(shí)2個(gè)節(jié)點(diǎn)時(shí)間同步情況表。表中2個(gè)節(jié)點(diǎn)虛擬仿真時(shí)間始終保持在0.1ms內(nèi),能夠保持在同步周期內(nèi)運(yùn)行。而真實(shí)運(yùn)行時(shí)間由于各節(jié)點(diǎn)的機(jī)器性能有較大差距。
多處理器嵌入式軟件的全數(shù)字仿真測(cè)試平臺(tái)開發(fā)技術(shù)已經(jīng)在多個(gè)型號(hào)軟件的配置項(xiàng)軟件測(cè)試中得到了應(yīng)用,該技術(shù)準(zhǔn)確地模擬了多處理器嵌入式軟件的運(yùn)行,很好地解決了多處理器間時(shí)間同步和數(shù)據(jù)同步的問題,并且支持測(cè)試人員進(jìn)行各種不同類型的故障注入。目前,已有型號(hào)軟件使用多核處理器,本文的多處理器軟件的測(cè)試平臺(tái)開發(fā)技術(shù)在這些嵌入式軟件的測(cè)試過程中也得到了應(yīng)用。隨著越來越多的型號(hào)軟件采用多核處理器,該技術(shù)的實(shí)用性將得到進(jìn)一步的提升。

表2 某型號(hào)飛行控制軟件時(shí)間同步結(jié)果統(tǒng)計(jì)表