王 洋 薛 靜 劉春龍 武詠晗
北京航天自動(dòng)控制研究所,北京100854
隨著航天產(chǎn)品在信息化、體系化、自主化和智能化等方面的飛速發(fā)展,軟件在整個(gè)系統(tǒng)中的重要性日益提高,軟件的規(guī)模越來(lái)越大、關(guān)鍵程度越來(lái)越高,軟件的質(zhì)量與可靠性已經(jīng)成為影響航天產(chǎn)品質(zhì)量與可靠性的重要因素。軟件測(cè)試是目前普遍采用的提高軟件質(zhì)量的重要手段,是軟件質(zhì)量保證工作中的重要環(huán)節(jié)之一[1]。
根據(jù)QJA30A的要求,需要針對(duì)航天型號(hào)軟件進(jìn)行軟件配置項(xiàng)測(cè)試和系統(tǒng)測(cè)試[2]。在配置項(xiàng)測(cè)試時(shí)通常采用全數(shù)字仿真測(cè)試平臺(tái)作為測(cè)試工具,該工具的優(yōu)點(diǎn)是透明性好,可控性強(qiáng),易于注入測(cè)試數(shù)據(jù),對(duì)小概率、安全關(guān)鍵功能的測(cè)試可以提供有效的手段支持。另外,被測(cè)軟件代碼不需要插樁,在不做任何改動(dòng)的情況下,就可以完成對(duì)被測(cè)軟件的非侵入式測(cè)試[3]。這種方法能夠較好地驗(yàn)證被測(cè)軟件內(nèi)部的功能和性能特性,在軟件系統(tǒng)復(fù)雜度較低的前提下,通過(guò)配置項(xiàng)測(cè)試可以得到較好的驗(yàn)證效果,但是配置項(xiàng)測(cè)試是一種較為孤立的測(cè)試,難以發(fā)現(xiàn)軟件系統(tǒng)中配置項(xiàng)之間的接口和時(shí)序匹配方面可能存在的缺陷。
隨著航天系統(tǒng)復(fù)雜度提高,系統(tǒng)狀態(tài)空間與軟件運(yùn)行剖面的數(shù)量膨脹,由于很多問(wèn)題都是各子系統(tǒng)之間時(shí)序與運(yùn)行狀態(tài)不匹配造成,因此系統(tǒng)級(jí)軟件測(cè)試越來(lái)越重要。而現(xiàn)階段的系統(tǒng)級(jí)軟件測(cè)試仍然擺脫不了對(duì)硬件設(shè)備的依賴(lài),故障仿真的難度大,很多情況下由于受限于安全性和成本,系統(tǒng)測(cè)試的覆蓋性難以達(dá)到預(yù)期。因此急需開(kāi)展系統(tǒng)級(jí)虛擬測(cè)試環(huán)境的研究工作。
本文研究了系統(tǒng)級(jí)測(cè)試環(huán)境構(gòu)建方法,基于操作系統(tǒng)提供的進(jìn)程間通訊技術(shù),突破了多虛擬測(cè)試環(huán)境數(shù)據(jù)交換與時(shí)間同步的技術(shù)難點(diǎn),為系統(tǒng)級(jí)測(cè)試環(huán)境構(gòu)建提供了一個(gè)高效、可行的解決方案。
虛擬測(cè)試環(huán)境以真實(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ī)上一致,能夠讓硬件和軟件開(kāi)發(fā)人員同時(shí)進(jìn)行系統(tǒng)定義、軟件開(kāi)發(fā)、集成和部署。單處理器的虛擬測(cè)試環(huán)境分層結(jié)構(gòu)如圖1所示。
圖1 虛擬測(cè)試環(huán)境分層結(jié)構(gòu)圖
由圖1可知虛擬測(cè)試環(huán)境是基于虛擬內(nèi)核的分層結(jié)構(gòu),而系統(tǒng)級(jí)測(cè)試環(huán)境需要使多個(gè)虛擬測(cè)試環(huán)境形成一個(gè)閉環(huán)互聯(lián)的有機(jī)整體,在構(gòu)建過(guò)程中需要解決2個(gè)關(guān)鍵問(wèn)題:
1)數(shù)據(jù)交換:在運(yùn)行過(guò)程中,一個(gè)虛擬環(huán)境通過(guò)接口的輸出將作為另一個(gè)虛擬環(huán)境的接口輸入,為了保證系統(tǒng)級(jí)虛擬環(huán)境運(yùn)行的正確性,必須實(shí)現(xiàn)嵌入式系統(tǒng)之間的數(shù)據(jù)流仿真;
2)同步運(yùn)行:在Windows操作系統(tǒng)中,每個(gè)虛擬測(cè)試環(huán)境作為一個(gè)單獨(dú)的進(jìn)程運(yùn)行。由于Windows不是實(shí)時(shí)操作系統(tǒng),因此每個(gè)進(jìn)程獲得的運(yùn)行時(shí)間片并不相同,導(dǎo)致每個(gè)虛擬環(huán)境中運(yùn)行的嵌入式軟件的虛擬時(shí)間有偏差。為了保證系統(tǒng)時(shí)序的一致性,必須實(shí)現(xiàn)多個(gè)虛擬測(cè)試環(huán)境的同步機(jī)制。
虛擬測(cè)試環(huán)境是操作系統(tǒng)中的一個(gè)進(jìn)程,為了實(shí)現(xiàn)多個(gè)虛擬測(cè)試環(huán)境協(xié)同運(yùn)行,考慮采用操作系統(tǒng)提供的進(jìn)程間通訊機(jī)制,設(shè)計(jì)相應(yīng)的數(shù)據(jù)傳輸與同步運(yùn)行流程。在選擇進(jìn)程間通訊機(jī)制時(shí),需要從運(yùn)行效率、可靠性2方面進(jìn)行考察,既要保證虛擬環(huán)境之間的同步協(xié)作不會(huì)對(duì)運(yùn)行時(shí)間造成過(guò)多負(fù)載,也要確保虛擬環(huán)境彼此發(fā)送的數(shù)據(jù)能夠完整可靠地發(fā)送到目的地址。
IPC是進(jìn)程間通訊(interprocess communication)的簡(jiǎn)稱(chēng)。傳統(tǒng)上該術(shù)語(yǔ)描述的是運(yùn)行在某個(gè)操作系統(tǒng)之上不同進(jìn)程間消息傳遞的不同方式。最早的IPC機(jī)制由UNIX提出,主要有以下幾種方式[4]:
1)進(jìn)程共享留存于文件系統(tǒng)中某個(gè)文件上的某些信息。為訪(fǎng)問(wèn)這些信息,每個(gè)進(jìn)程都需要通過(guò)系統(tǒng)調(diào)用穿越內(nèi)核。當(dāng)一個(gè)文件有待更新,某種形式的同步是必要的,這樣既可以保護(hù)多個(gè)寫(xiě)入者,防止彼此相互串?dāng)_,也可以保護(hù)一個(gè)或多個(gè)讀出者,防止寫(xiě)入者的干擾。
2)進(jìn)程有一個(gè)雙方都能訪(fǎng)問(wèn)的共享內(nèi)存區(qū)。每個(gè)進(jìn)程一旦設(shè)置好該共享內(nèi)存區(qū),可以根本不涉及內(nèi)核就訪(fǎng)問(wèn)其中的數(shù)據(jù)。Windows中的管道就是這種方式。
3)進(jìn)程之間的數(shù)據(jù)傳輸通過(guò)網(wǎng)絡(luò)接口,進(jìn)程可以在同一臺(tái)主機(jī)也可以在網(wǎng)絡(luò)互連的不同主機(jī)。進(jìn)程的交互可以是基于流模式(TCP)——流模式中的數(shù)據(jù)需要確定的格式,以保證區(qū)分不同消息的邊界;也可以是消息模式(UDP、SCTP)[5]。
通過(guò)本地文件系統(tǒng)進(jìn)行IPC的方式在每次進(jìn)程同步過(guò)程中都要訪(fǎng)問(wèn)磁盤(pán),對(duì)運(yùn)行效率有很大影響,因此本文在基于網(wǎng)絡(luò)和基于共享內(nèi)存2種IPC方式之間進(jìn)行選擇。
DDS是對(duì)象管理組織(OMG)制定的實(shí)現(xiàn)訂閱/發(fā)布通訊模式、滿(mǎn)足實(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ù)為中心分發(fā)數(shù)據(jù),用QoS參數(shù)描述資源狀況、對(duì)資源的期待程度及網(wǎng)絡(luò)狀況等,大大增強(qiáng)了通訊的實(shí)時(shí)性和靈活性,簡(jiǎn)化了分布式系統(tǒng)中數(shù)據(jù)的有效發(fā)布,為實(shí)時(shí)環(huán)境下以數(shù)據(jù)為中心的分布式應(yīng)用提供高效、有用的通訊服務(wù),其特點(diǎn)如下[6]:
1)具有開(kāi)放式體系結(jié)構(gòu),提供規(guī)范的接口、服務(wù)和數(shù)據(jù)格式,使業(yè)務(wù)應(yīng)用系統(tǒng)軟件可以輕松正確地實(shí)現(xiàn)移植、互操作和交互的功能;
2)具備共享數(shù)據(jù)能力,無(wú)需考慮數(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所示。
圖2 DDS結(jié)構(gòu)圖
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í)更新。該模型中數(shù)據(jù)收發(fā)雙方均無(wú)需了解對(duì)方物理駐留位置、駐留形式,實(shí)現(xiàn)了通信雙方時(shí)間、空間和數(shù)據(jù)通信的多維松散耦合[7]。
管道(PIPE)是一個(gè)以共享內(nèi)存為基礎(chǔ)的進(jìn)程間通訊技術(shù)。創(chuàng)建管道的進(jìn)程作為管道服務(wù)器(pipe server),連接該管道的進(jìn)程作為管道客戶(hù)端(pipe client)。管道一端的進(jìn)程向該管道中寫(xiě)入數(shù)據(jù),管道另一端的進(jìn)程就能夠讀取到該數(shù)據(jù)。
Windows系統(tǒng)中的管道分為匿名管道與命名管道:
1)匿名管道:創(chuàng)建匿名管道不需要名稱(chēng)作為參數(shù),匿名管道是半雙工管道,管道服務(wù)器和管道客戶(hù)端各操作2個(gè)句柄,原理如圖3,進(jìn)程1和進(jìn)程2使用各自的2個(gè)句柄HD[0]和HD[1]操作管道。
圖3 匿名管道
2)命名管道:命名管道是一個(gè)全雙工管道,管道雙方可通過(guò)一個(gè)句柄完成數(shù)據(jù)收發(fā)操作,由操作系統(tǒng)維護(hù)獨(dú)立的接收緩沖與發(fā)送緩沖,Windows中的命名管道客戶(hù)程序本質(zhì)上通過(guò)文件接口使用命名管道[8]。同時(shí),命名管道提供了一對(duì)多的功能,可以使管道服務(wù)器并行地與多個(gè)管道客戶(hù)端交互,原理如圖4。
圖4 命名管道
為了盡量提高虛擬測(cè)試環(huán)境的運(yùn)行效率,要保證多個(gè)測(cè)試環(huán)境之間數(shù)據(jù)傳輸?shù)母咝剩虼诵枰獙?duì)2種常用的進(jìn)程間通訊技術(shù)的數(shù)據(jù)傳輸吞吐量與代碼執(zhí)行效率進(jìn)行對(duì)比。本文通過(guò)實(shí)現(xiàn)2個(gè)示例進(jìn)程,進(jìn)程間傳遞的數(shù)據(jù)選取2種數(shù)據(jù)塊粒度,分別為1K字節(jié)和4K字節(jié);傳輸次數(shù)為10000、50000、100000次;分為持久化和非持久化2個(gè)執(zhí)行場(chǎng)景,編寫(xiě)用例進(jìn)行考核。具體比對(duì)條件及硬件平臺(tái)規(guī)格見(jiàn)表1:
表1 傳輸速率及執(zhí)行效率比對(duì)條件
通過(guò)在相同執(zhí)行平臺(tái)執(zhí)行上述比對(duì)條件,得到的DDS與PIPE執(zhí)行時(shí)間(單位:s),具體結(jié)果見(jiàn)表2和3。
表2 數(shù)據(jù)非持久化場(chǎng)景下傳輸速度與執(zhí)行時(shí)間
表3 數(shù)據(jù)持久化場(chǎng)景下傳輸速度與執(zhí)行時(shí)間
由表2和3的結(jié)果可知,PIPE在非持久化場(chǎng)景下的傳輸速率遠(yuǎn)高于DDS,說(shuō)明共享內(nèi)存方式與基于套接字的網(wǎng)絡(luò)傳輸在執(zhí)行效率上有很大差別。在持久化場(chǎng)景下,2種方式的運(yùn)行時(shí)間差別不明顯,說(shuō)明硬盤(pán)的讀寫(xiě)速度是代碼執(zhí)行效率的瓶頸,弱化了2種進(jìn)程間通訊機(jī)制的效率差別,目前系統(tǒng)級(jí)虛擬環(huán)境對(duì)于持久化的需求并不大。從可靠性角度觀(guān)察,2種方式在數(shù)據(jù)可靠性方面均可以保證不丟數(shù)。
綜合數(shù)據(jù)傳輸效率和可靠性2方面的數(shù)據(jù)結(jié)果,本文選擇采用PIPE作為構(gòu)建系統(tǒng)級(jí)測(cè)試環(huán)境的基礎(chǔ)。
虛擬環(huán)境之間的數(shù)據(jù)發(fā)送與接收是異步操作,彼此沒(méi)有約束條件。為了正確模擬該行為,需要采用多個(gè)線(xiàn)程實(shí)現(xiàn),其中虛擬環(huán)境1作為管道服務(wù)器(PIPE Server)完成管道建立和外設(shè)仿真,管道服務(wù)器的主線(xiàn)程創(chuàng)建管道,并等待管道客戶(hù)端連接。虛擬環(huán)境2作為管道客戶(hù)端(PIPE Client)阻塞接收數(shù)據(jù)。每個(gè)虛擬環(huán)境根據(jù)自身對(duì)外的硬件接口數(shù)量,建立對(duì)應(yīng)的管道數(shù)目,并維護(hù)管道的數(shù)據(jù)收發(fā)邏輯(圖5)。
圖5 數(shù)據(jù)交換順序圖
嵌入式系統(tǒng)需要按照設(shè)計(jì)的時(shí)序運(yùn)行,為了保證系統(tǒng)中每個(gè)節(jié)點(diǎn)的狀態(tài)轉(zhuǎn)換操作一致,系統(tǒng)測(cè)試環(huán)境中的每一個(gè)節(jié)點(diǎn)也需要統(tǒng)一節(jié)拍進(jìn)行計(jì)時(shí)。通過(guò)引入一個(gè)同步管理主節(jié)點(diǎn)(Syn master),專(zhuān)門(mén)去同步不同節(jié)點(diǎn)(Syn slave)的運(yùn)行周期。具體實(shí)現(xiàn)方法如圖6。
1)當(dāng)所有子節(jié)點(diǎn)已經(jīng)處于就緒狀態(tài)后,同步管理主節(jié)點(diǎn)發(fā)送同步信號(hào),所有子節(jié)點(diǎn)均反饋同步好信號(hào)后,平臺(tái)初始化工作結(jié)束;
2)平臺(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)類(lèi)似,當(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 時(shí)間同步順序圖
在某型號(hào)飛行控制軟件的測(cè)試過(guò)程中利用了本文所實(shí)現(xiàn)的高速系統(tǒng)級(jí)虛擬測(cè)試環(huán)境。該型號(hào)的飛行控制軟件采用多核處理器,不同于以往單核處理器架構(gòu),運(yùn)行在多個(gè)處理器核心的飛行軟件構(gòu)成一個(gè)嵌入式系統(tǒng),該系統(tǒng)中多處理器核隨著軟件運(yùn)行,彼此間存在數(shù)據(jù)交互和同步。圖7為該型號(hào)在平臺(tái)上運(yùn)行與理論仿真導(dǎo)航速度的相對(duì)誤差和絕對(duì)誤差曲線(xiàn),圖8為導(dǎo)航位置的相對(duì)誤差和絕對(duì)誤差曲線(xiàn)。由曲線(xiàn)可知,平臺(tái)計(jì)算結(jié)果與理論仿真數(shù)據(jù)誤差在允許范圍之內(nèi)。
圖7(a) 三方向?qū)Ш剿俣认鄬?duì)誤差曲線(xiàn)
圖7(b) 三方向?qū)Ш剿俣冉^對(duì)誤差曲線(xiàn)
圖8(a) 三方向?qū)Ш轿恢孟鄬?duì)誤差曲線(xiàn)
圖8(b) 三方向?qū)Ш轿恢媒^對(duì)誤差曲線(xiàn)
表4為該型號(hào)在平臺(tái)上運(yùn)行時(shí)2個(gè)節(jié)點(diǎn)時(shí)間同步情況表。表中虛擬仿真時(shí)間始終保持在0.1ms內(nèi),能夠保證在同步周期內(nèi)運(yùn)行。而真實(shí)運(yùn)行時(shí)間由于各節(jié)點(diǎn)的機(jī)器性能有較大差距。
表4 時(shí)間同步結(jié)果
該高速系統(tǒng)級(jí)虛擬環(huán)境實(shí)現(xiàn)技術(shù)已在型號(hào)中得到驗(yàn)證。隨著系統(tǒng)級(jí)測(cè)試方法論的發(fā)展,該技術(shù)將逐步應(yīng)用到其它型號(hào)軟件的系統(tǒng)級(jí)測(cè)試中。