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