李 智
(中國電子科技集團(tuán)公司第十研究所 信息中心,成都 610036)
隨著嵌入式軟件在航空、航天、汽車、通信等綜合電子系統(tǒng)中的占比也越來越高,其扮演的角色也越來越重要,因此,軟件缺陷容易引發(fā)災(zāi)難性事故,例如1996年,歐洲耗資億美元的Ariane-5 火箭發(fā)射后解體爆炸[1]。軟件測試作為發(fā)現(xiàn)軟件缺陷的有效手段之一,已越來越被重視。構(gòu)建高效、有效的測試環(huán)境是軟件測試的前提,嵌入式軟件測試由于以下原因存在構(gòu)建測試環(huán)境難題[2-3]:
1)嵌入式軟件所涉及的系統(tǒng)外部設(shè)備幾乎全是專用;
2)嵌入式軟件可能由于沒有通常的外圍設(shè)備導(dǎo)致在測試過程中很難進(jìn)行檢測和觀察;
3)嵌入式軟件與外部系統(tǒng)按照流程進(jìn)行數(shù)據(jù)交互,這對測試也提出了更高的要求;
4)現(xiàn)有半實(shí)物仿真系統(tǒng),缺乏測試用例設(shè)計(jì)、測試用例自動化執(zhí)行的能力。
目前,國內(nèi)外對基于總線通信的半實(shí)物仿真測試及環(huán)境構(gòu)建進(jìn)行了有益的探索,通過半實(shí)物仿真系統(tǒng)對總線數(shù)據(jù)構(gòu)建、與被測系統(tǒng)通信等,實(shí)現(xiàn)了對被測系統(tǒng)外圍設(shè)備的模擬,也解決了測試過程中對數(shù)據(jù)的檢測和觀察難題[4-5]。但大部分半實(shí)物仿真測試系統(tǒng)缺乏對總線數(shù)據(jù)交互流程的模擬能力,只能通過二次開發(fā)實(shí)現(xiàn),給使用帶來了很多的不便。本文針對現(xiàn)有半實(shí)物仿真測試系統(tǒng)存在的不足之處,提出一種基于總線通信、收發(fā)流程執(zhí)行控制的嵌入式軟件接口測試系統(tǒng),提高測試環(huán)境搭建效率,降低操作難度,以提升易用性。
系統(tǒng)設(shè)計(jì)支持多路的MIL-STD-1553B總線、以太網(wǎng)、RS232/422/485總線、CAN總線、ARNIC429總線通信,具有總線數(shù)據(jù)模擬能力、總線數(shù)據(jù)激勵能力、接收數(shù)據(jù)識別和應(yīng)答能力、數(shù)據(jù)收發(fā)流程配置和執(zhí)行控制能力、基于數(shù)據(jù)收發(fā)流程執(zhí)行控制構(gòu)筑測試場景的測試用例設(shè)計(jì)和自動化執(zhí)行能力。以幫助開發(fā)人員或測試人員實(shí)現(xiàn)嵌入式軟件外圍設(shè)備的仿真,實(shí)現(xiàn)在與外圍設(shè)備數(shù)據(jù)交互過程中的監(jiān)視和檢測,實(shí)現(xiàn)模擬外圍設(shè)備按照流程與嵌入式軟件進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)測試用例設(shè)計(jì)和自動化執(zhí)行,實(shí)現(xiàn)基于總線通信的強(qiáng)度測試[6]。
為使該系統(tǒng)具有較好的通用性,適配更多被測設(shè)備,在硬件上須采用動態(tài)可擴(kuò)展設(shè)計(jì),并且具備常用類型總線的通信能力。為解決該問題,整個系統(tǒng)硬件由上位機(jī)和多臺下位機(jī)組成,上位機(jī)和下位機(jī)通過以太網(wǎng)連接,可以橫向擴(kuò)展下位機(jī)。每臺下位機(jī)可以內(nèi)置ARNIC429板卡、Moxia卡、100 M/1000 M以太網(wǎng)卡、MIL-STD-1553B板卡、外接USB CAN控制盒,與被測設(shè)備連接。如圖1。
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
軟件包含上位機(jī)軟件和下位機(jī)軟件,并分別安裝于對應(yīng)設(shè)備。上位機(jī)軟件在下位機(jī)的配合下實(shí)現(xiàn)測試工程管理、工程配置、測試設(shè)計(jì)、測試執(zhí)行、測試數(shù)據(jù)發(fā)送、測試數(shù)據(jù)接收、接收數(shù)據(jù)解析、下位機(jī)管理等功能。下位機(jī)軟件接受上位機(jī)的總線參數(shù)配置、數(shù)據(jù)發(fā)送控制、?;畈樵?,并實(shí)時將總線上接收的數(shù)據(jù)上報(bào)至上位機(jī)。
圖2 下位機(jī)軟硬件部署
上位機(jī)軟件設(shè)計(jì)為三架構(gòu)、功能層、邏輯層和數(shù)據(jù)層。
圖3 上位機(jī)三層結(jié)構(gòu)圖
2.1.1 功能層設(shè)計(jì)
功能層是操作人員直接交互的功能界面,包括工程管理、測試工程配置、測試設(shè)計(jì)、測試執(zhí)行、測試數(shù)據(jù)接收和下位機(jī)管理六大功能,其中工程管理又包括新建工程、打開工程、關(guān)閉工程、保存工程、備份工程;其中測試設(shè)計(jì)包括被測件功能管理、接口測試用例設(shè)計(jì)、手動生成測試數(shù)據(jù)、自動生成測試數(shù)據(jù)、強(qiáng)度測試設(shè)計(jì);測試執(zhí)行包括接口測試用例執(zhí)行、自動化執(zhí)行、強(qiáng)度測試執(zhí)行;測試工程配置包括設(shè)備信息配置、交聯(lián)環(huán)境配置、總線配置、ICD配置;測試數(shù)據(jù)接收包括數(shù)據(jù)接收、數(shù)據(jù)解析、接收統(tǒng)計(jì);下位機(jī)管理包括?;罟δ?、總線初始化、總線關(guān)閉。
2.1.2 邏輯層設(shè)計(jì)
邏輯層是上位機(jī)向功能層提供工程管理邏輯接口,并0調(diào)用仿真配置信息管理模塊創(chuàng)建或讀取項(xiàng)目配置項(xiàng)信息XML文件,實(shí)現(xiàn)向工程管理功能提供的邏輯處理接口。操作人員進(jìn)行設(shè)備信息、交聯(lián)環(huán)境、總線、ICD配置后調(diào)用仿真配置信息管理模塊提供的邏輯處理接口創(chuàng)建或修改項(xiàng)目配置項(xiàng)信息XML文件。
測試用例設(shè)計(jì)模塊向功能層測試設(shè)計(jì)功能提供邏輯處理接口。仿真配置信息管理模塊向測試用例設(shè)計(jì)模塊返回下位機(jī)、總線、ICD信息,測試用例設(shè)計(jì)模塊組織成級聯(lián)關(guān)系集合送至測試設(shè)計(jì)功能,測試用例設(shè)計(jì)中前置條件環(huán)節(jié),如果需周期發(fā)送數(shù)據(jù),則在級聯(lián)關(guān)系集合中選擇發(fā)送方向ICD,確定后測試設(shè)計(jì)功能根據(jù)ICD格式動態(tài)生成供用戶輸入的界面,用戶填寫具體數(shù)據(jù)、周期發(fā)送時間;如果需條件應(yīng)答,則在級聯(lián)關(guān)系集合中選擇接收方向ICD,再在級聯(lián)關(guān)系集合發(fā)送方向中選擇應(yīng)答ICD,確定后測試設(shè)計(jì)功能根據(jù)ICD格式動態(tài)生成供用戶輸入的界面,用戶填寫具體數(shù)據(jù)。如果無前提條件設(shè)置,可直接添加測試步驟,操作人員根據(jù)發(fā)送或接收數(shù)據(jù),在級聯(lián)關(guān)系集合中選取ICD,并在動態(tài)生成的輸入界面填寫具體值,如果是接收數(shù)據(jù)需要設(shè)置該步驟等待時間,測試用例設(shè)計(jì)模塊按照特有XML格式調(diào)用仿真配置信息管理模塊固化測試用例設(shè)計(jì)信息。
測試用例執(zhí)行模塊向功能層測試執(zhí)行功能提供邏輯處理接口。測試用例執(zhí)行模塊調(diào)用仿真配置信息管理模塊讀取待執(zhí)行用例的設(shè)計(jì)信息,形成按時間進(jìn)程調(diào)度發(fā)送數(shù)據(jù)管理模塊、接收數(shù)據(jù)管理模塊的控制律,執(zhí)行過程中發(fā)送失敗、未接收到數(shù)據(jù)或接收數(shù)據(jù)與預(yù)期不一致,則測試用例執(zhí)行不通過,否則通過。
發(fā)送數(shù)據(jù)管理模塊接收測試用例執(zhí)行模塊輸入的ICD編號和填寫數(shù)據(jù),調(diào)用仿真配置信息管理模塊檢索出發(fā)送ICD格式,與填寫數(shù)據(jù)一起輸入數(shù)據(jù)封裝模塊,數(shù)據(jù)封裝模塊根據(jù)ICD格式、填寫數(shù)據(jù),調(diào)用數(shù)據(jù)類型轉(zhuǎn)換模塊組裝成消息報(bào)文,并在消息報(bào)文前添加標(biāo)有目標(biāo)下位機(jī)、總線、地址或通道等信息的標(biāo)簽,然后調(diào)用以太網(wǎng)通信模塊提供的UDP協(xié)議發(fā)送接口將消息報(bào)文通過以太網(wǎng)發(fā)送至下位機(jī)。
以太網(wǎng)通信模塊接收到下位機(jī)發(fā)送的接收數(shù)據(jù),將其推送到接收數(shù)據(jù)緩存,接收數(shù)據(jù)管理模塊不斷讀取接收數(shù)據(jù)緩存的數(shù)據(jù)直到讀空為止。
數(shù)據(jù)管理模塊將原始數(shù)據(jù)推向功能層的數(shù)據(jù)接收窗口,同時通知數(shù)據(jù)解析模塊。數(shù)據(jù)解析模塊讀取一包數(shù)據(jù),將標(biāo)簽和數(shù)據(jù)分開,根據(jù)標(biāo)簽中源下位機(jī)、總線、地址或通道,以及數(shù)據(jù)中的類型值,調(diào)用仿真配置信息管理模塊檢索出具體ICD格式,再將ICD格式和待解析數(shù)據(jù)傳遞至數(shù)據(jù)解析模塊,數(shù)據(jù)解析模塊按照ICD格式,調(diào)用數(shù)據(jù)類型轉(zhuǎn)換模塊對數(shù)據(jù)逆向解析,然后將解析結(jié)果回傳接收數(shù)據(jù)管理模塊,再輸出至數(shù)據(jù)接收窗口。
下位機(jī)管理模塊調(diào)用以太網(wǎng)通信模塊周期查詢下位機(jī),根據(jù)下位機(jī)應(yīng)答信息判斷下位機(jī)健康狀態(tài),并上報(bào)至下位機(jī)管理功能界面,同時向下位機(jī)管理功能提供總線操作接口。
2.1.3 數(shù)據(jù)層設(shè)計(jì)
數(shù)據(jù)層以XML文件作為存儲載體,存儲下位機(jī)及總線配置項(xiàng)信息、項(xiàng)目信息、項(xiàng)目總線數(shù)據(jù)格式、解析配置、測試用例及數(shù)據(jù)等。
下位機(jī)軟件設(shè)計(jì)分為服務(wù)層、驅(qū)動層。服務(wù)層通過以太網(wǎng)向上位機(jī)軟件提供數(shù)據(jù)發(fā)送、總線管理,總線數(shù)據(jù)接收服務(wù)。
圖4 下位機(jī)兩層結(jié)構(gòu)圖
2.2.1 服務(wù)層設(shè)計(jì)
下位機(jī)軟件啟動初始化模塊調(diào)用數(shù)據(jù)存儲引擎獲取項(xiàng)目配置信息,初始化以太網(wǎng)通信模塊、總線管理模塊,總線管理模塊進(jìn)一步調(diào)用數(shù)據(jù)總線引擎完成各總線的初始化。數(shù)據(jù)存儲引擎初始化時,獲取項(xiàng)目配置信息,然后根據(jù)信息調(diào)用對應(yīng)以太網(wǎng)TCP驅(qū)動、以太網(wǎng)UDP驅(qū)動、CAN總線驅(qū)動、RS422/RS485/RS232Moxia卡總線驅(qū)動、ARNIC429總線驅(qū)動、1553總線驅(qū)動進(jìn)行對應(yīng)總線初始化。
以太網(wǎng)通信模塊初始化完成后開始接收并應(yīng)答上位機(jī)軟件周期查詢,同時,接收以太網(wǎng)數(shù)據(jù)判斷后,如果為總線控制數(shù)據(jù),則用總線管理模塊進(jìn)行總線控制,如果為上位機(jī)發(fā)送數(shù)據(jù),則進(jìn)行解包,得到目的標(biāo)簽和待發(fā)數(shù)據(jù),再根據(jù)目的標(biāo)簽調(diào)用數(shù)據(jù)總線引擎將待發(fā)數(shù)據(jù)發(fā)送至對應(yīng)總線,當(dāng)數(shù)據(jù)總線引擎接收到某總線數(shù)據(jù)時,在接收數(shù)據(jù)前添加該下位機(jī)、源總線、地址或通道的標(biāo)簽,推送至數(shù)據(jù)接收模塊,數(shù)據(jù)接收模塊調(diào)用以太網(wǎng)通信模塊提供的發(fā)送接口將數(shù)據(jù)發(fā)送至上位機(jī)。
2.2.2 驅(qū)動層設(shè)計(jì)
驅(qū)動層包括了供數(shù)據(jù)存儲引擎讀寫的項(xiàng)目配置數(shù)據(jù),供數(shù)據(jù)總線引擎實(shí)現(xiàn)總線初始化和數(shù)據(jù)收發(fā)調(diào)用的以太網(wǎng)TCP驅(qū)動、以太網(wǎng)UDP驅(qū)動、CAN總線驅(qū)動、RS422/RS485/RS232Moxia卡總線驅(qū)動、ARNIC429總線驅(qū)動、1553總線驅(qū)動。
系統(tǒng)軟件由上位機(jī)和下位機(jī)軟件構(gòu)成,其軟件實(shí)現(xiàn)流程,如圖5。
圖5 軟件實(shí)現(xiàn)流程
測試工程管理實(shí)現(xiàn)工程的新建、打開、保存、備份等。新建工程后,進(jìn)入測試工程配置,其中包括設(shè)備信息配置、測試交聯(lián)環(huán)境配置、總線配置、ICD配置等。如果是打開工程,或已完成新建工程配置,則可進(jìn)入測試用例設(shè)計(jì),其中包括被測件功能管理、接口測試用例設(shè)計(jì)、手動生成測試數(shù)據(jù)、自動生成測試數(shù)據(jù)、強(qiáng)度測試等,該過程是測試執(zhí)行的前提。測試執(zhí)行包括自動組包、自動生成校驗(yàn)位、接口測試用例執(zhí)行、自動化執(zhí)行、強(qiáng)度測試執(zhí)行,該功能在上位機(jī)的后臺執(zhí)行,并與下位機(jī)軟件配合完成。在測試執(zhí)行過程中,涉及測試數(shù)據(jù)的發(fā)送和接收,生成的測試數(shù)據(jù)分發(fā)給下位機(jī)軟件,通過對應(yīng)的總線發(fā)送給被測件,同時,對發(fā)送數(shù)據(jù)量進(jìn)行統(tǒng)計(jì)。當(dāng)系統(tǒng)下位機(jī)對應(yīng)通道接收到被測件發(fā)送的數(shù)據(jù),將上傳至上位機(jī),一方面推送至解析功能,一方面納入接收統(tǒng)計(jì)。
操作人員在發(fā)送界面填寫完數(shù)據(jù),并發(fā)送時觸發(fā)數(shù)據(jù)封裝功能。上位機(jī)軟件首先獲取該發(fā)送的接口定義,其次根據(jù)MsgData(具體一條接口定義的XML格式,如:自檢命令)中的MsgDataElement(具體接口數(shù)據(jù)元素,為MsgData的子節(jié)點(diǎn),其屬性包含數(shù)據(jù)類型、長度、值等)定義的數(shù)據(jù)元素獲取用戶在界面中的值,同時根據(jù)MsgDataElement定義的數(shù)據(jù)長度、數(shù)據(jù)類型轉(zhuǎn)為二進(jìn)制數(shù)據(jù),最后根據(jù)MsgDataElement在MsgData中的位置,將其拷貝到對應(yīng)的二進(jìn)制數(shù)組中,最后向總線引擎輸出組裝完畢的原始二進(jìn)制數(shù)據(jù)。
項(xiàng)目初始化時,操作人員需要配置每條總線的數(shù)據(jù)類型位置,以及每一個數(shù)據(jù)類型值所指向的接口定義,即MsgData,并設(shè)置為解析,形成解析配置。
當(dāng)數(shù)據(jù)解析模塊接收到一包數(shù)據(jù)時,根據(jù)包頭的數(shù)據(jù)總線標(biāo)識、解析配置,查詢是否解析。如果要求解析,則結(jié)合接收數(shù)據(jù)得到接收數(shù)據(jù)的類型,從而獲得指向的解析接口定義MsgData。將接收數(shù)據(jù)和對應(yīng)的接口定義傳遞給解析遞歸調(diào)用模塊,逐一遍歷MsgData節(jié)點(diǎn)下的 MsgData Element節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)長度、數(shù)據(jù)類型等屬性,在實(shí)際數(shù)據(jù)獲取到具體的數(shù)據(jù)值,結(jié)合枚舉值轉(zhuǎn)義等方法,形成數(shù)據(jù)元素解析,最后組裝成接收數(shù)據(jù)的解析字符串,上報(bào)至用戶界面。
條件應(yīng)答是指在接收到某條數(shù)據(jù)后,根據(jù)系統(tǒng)設(shè)計(jì)回復(fù)指定數(shù)據(jù),例如當(dāng)接收到自檢命令后,反饋?zhàn)詸z結(jié)果。
條件應(yīng)答功能實(shí)現(xiàn)依賴于數(shù)據(jù)解析功能。項(xiàng)目初始化時,操作人員需要配置每條總線的數(shù)據(jù)類型位置,以及所指向的應(yīng)答數(shù)據(jù)接口定義MsgData,設(shè)置為應(yīng)答,并在接口定義的每個數(shù)據(jù)元素MsgDataElemen屬性value設(shè)置反饋的值[7-8]。
當(dāng)接收到一包數(shù)據(jù)時, 解析模塊查詢該數(shù)據(jù)是解析還是應(yīng)答,如果為應(yīng)答,則結(jié)合接收數(shù)據(jù)得到接收數(shù)據(jù)的類型,從而獲得指向的應(yīng)答接口定義MsgData,然后將其推送給數(shù)據(jù)封裝模塊,發(fā)送給被測設(shè)備,完成條件應(yīng)答。
測試用例設(shè)計(jì)是基于手動測試數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、條件應(yīng)答、結(jié)果預(yù)判等功能,按照時間軸的方式組合成測試場景,并存儲為XML格式。
測試用例可設(shè)置周期發(fā)送多個數(shù)據(jù)包的前提條件,例如某些設(shè)備在工作時需要以周期應(yīng)答作為設(shè)備在線前提,然后才能執(zhí)行各種功能。測試用例可添加多個測試步驟,每個步驟由執(zhí)行順序、測試輸入、預(yù)期結(jié)果等組成。測試輸入分為發(fā)送、條件應(yīng)答和接收,預(yù)期結(jié)果為某時間范圍收到某一包數(shù)據(jù)。用例設(shè)計(jì)完成后,以XML形式保存設(shè)計(jì)數(shù)據(jù)及邏輯。
自動化測試執(zhí)行實(shí)際調(diào)用并執(zhí)行一個或一組以XML形式存儲的用例設(shè)計(jì)數(shù)據(jù)及執(zhí)行邏輯,預(yù)期接收數(shù)據(jù)未在指定時間內(nèi)接收或接收數(shù)據(jù)錯誤被判為用例不通過。同時按照時間軸的方式記錄執(zhí)行過程中的收發(fā)數(shù)據(jù),形成實(shí)際測試結(jié)果。
強(qiáng)度測試功能是在上位機(jī)軟件強(qiáng)度測試界面勾選具體下位機(jī)->總線->發(fā)送方向ICD,點(diǎn)擊生成測試數(shù)據(jù)按鈕,上位機(jī)軟件根據(jù)ICD各元素配置的枚舉值、邊界、步進(jìn),采用組合方式生成測試數(shù)據(jù),操作人員可對生成的測試數(shù)據(jù)進(jìn)行選擇性刪除,得到測試數(shù)據(jù)集。并對勾選的各下位機(jī)->總線設(shè)置發(fā)送時間間隔。點(diǎn)擊執(zhí)行按鈕,系統(tǒng)將生成的數(shù)據(jù),按照總線設(shè)置的時間間隔進(jìn)行發(fā)送[9]。
以某信號處理設(shè)備測試為例,該設(shè)備總線為以太網(wǎng),采用UDP通信協(xié)議。
根據(jù)用戶指定的工程名和工程路徑新建測試工程。工程管理模塊對工程名和工程路徑進(jìn)行校驗(yàn)后在該路徑下生成默認(rèn)的工程配置文件。
圖6 新建工程
用戶選擇總線配置,上位機(jī)軟件獲取BusConfig.xml中所有總線配置信息到總線配置界面顯示,用戶可進(jìn)行瀏覽、新增、刪除、修改等操作。
用戶選擇消息格式配置,上位機(jī)軟件獲取MsgData.xml中所有消息格式配置信息到消息格式配置界面顯示,用戶可進(jìn)行瀏覽、新增、刪除、修改等操作。
圖7 總線配置 圖8 ICD消息配置
選擇某一測試項(xiàng),錄入測試名稱,用例描述,設(shè)置其周期發(fā)送自檢命令的前置條件。增加測試步驟1,選擇發(fā)送啟動命令數(shù)據(jù),以及發(fā)送間隔時間,同時編輯其發(fā)送數(shù)據(jù),如圖10。增加測試步驟2,接收反饋命令,并設(shè)置預(yù)期其反饋數(shù)據(jù)和超時時間。
圖9 測試用例設(shè)計(jì) 圖10 手動發(fā)送界面/發(fā)送數(shù)據(jù)編輯
選擇執(zhí)行測試的用例,啟動測試執(zhí)行。由于接收數(shù)據(jù)超時,步驟2未通過。
下位機(jī)軟件上傳數(shù)據(jù)包括接收的原始二進(jìn)制數(shù)據(jù),總線類型。上位機(jī)軟件根據(jù)總線類型、協(xié)議配置、解析配置等信息,多路數(shù)據(jù)總線仿真軟件獲取該報(bào)文的接口定義配置。
圖11 測試執(zhí)行結(jié)果 圖12 數(shù)據(jù)解析結(jié)果
本文針對現(xiàn)有半實(shí)物仿真測試系統(tǒng)缺乏總線數(shù)據(jù)交互流程的模擬的問題,提出一種基于總線通信、總線數(shù)據(jù)收發(fā),以及基于數(shù)據(jù)收發(fā)流程控制的嵌入式總線接口測試系統(tǒng)設(shè)計(jì)思路。首先總體闡述了系統(tǒng)的功能設(shè)計(jì)、硬件設(shè)計(jì)、軟件設(shè)計(jì),然后闡述了上位機(jī)軟件和下位機(jī)軟件的架構(gòu)設(shè)計(jì),并概述了各層模塊的功能和控制邏輯,最后介紹了數(shù)據(jù)封裝、數(shù)據(jù)解析、條件應(yīng)答、測試用例設(shè)計(jì)、自動化測試執(zhí)行等重要功能實(shí)現(xiàn)原理。該系統(tǒng)已進(jìn)行原型設(shè)計(jì),可采用配置、零編碼的方式搭建測試環(huán)境,并已在多個型號項(xiàng)目中應(yīng)用,提高了操作人員對測試環(huán)境搭建的效率,縮短了為項(xiàng)目定制開發(fā)仿真系統(tǒng)的時間,減少了開發(fā)定制仿真然間的人力資源。該系統(tǒng)集成測試用例設(shè)計(jì)和用例自動化執(zhí)行,縮短了測試人員回歸測試的時間。