專利名稱:一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,屬于軟件自動化
測試領(lǐng)域、測試腳本領(lǐng)域。
背景技術(shù):
實時嵌入式系統(tǒng)廣泛運用于工業(yè)控制、航空航天等領(lǐng)域。當(dāng)前,國內(nèi)外公認的,行之有效的針對實時嵌入式系統(tǒng)的測試方法是仿真測試。仿真測試平臺對被測系統(tǒng)的交聯(lián)環(huán)境進行模擬,仿真模型程序運行在裝有硬實時操作系統(tǒng)的實時處理機上,實時處理機通過各種真實的物理總線與被測系統(tǒng)相連接。另一臺PC機用于可視化仿真建模,測試腳本開發(fā),測試環(huán)境配置,測試數(shù)據(jù)收集與分析等等,并且和實時機通過以太網(wǎng)聯(lián)接。仿真測試過程中,仿真模型發(fā)送數(shù)據(jù)作為被測系統(tǒng)的測試輸入,同時接收被測系統(tǒng)的輸出響應(yīng)。
基于這種原理建立的仿真測試平臺已經(jīng)有比較廣泛的應(yīng)用,比如VerifiedSystems公司的RT-Tester,Tech S. A. T公司的ADS2,國內(nèi)的GESTE。被測系統(tǒng)是具有明確實時性需求的實時系統(tǒng),其運行的正確性不僅取決于邏輯和運算的結(jié)果是否正確,也取決于運算結(jié)果能否在規(guī)定的時間內(nèi)輸出。因此,仿真測試平臺必須自身具有高實時性能,才能正確模擬高實時性的交聯(lián)系統(tǒng)與被測系統(tǒng)進行交互。而用于驅(qū)動仿真模型的測試腳本的運行速度在很大程度上影響著仿真測試平臺的實時性。 現(xiàn)有的仿真模型結(jié)構(gòu)如圖1所示,實時嵌入式系統(tǒng)仿真模型1包括接口子模型2和內(nèi)特性子模型3,接口子模型2是實時嵌入式系統(tǒng)與外部環(huán)境進行交互的標準工業(yè)控制接口或者航電數(shù)據(jù)接口,比如CAN, MIL-STD-1553B、429、629等。接口子模型2包括驅(qū)動程序模塊4和調(diào)用接口模塊5,驅(qū)動程序模塊4主要用以驅(qū)動接口板卡收發(fā)數(shù)據(jù),調(diào)用接口模塊5是對驅(qū)動程序的封裝,對上層應(yīng)用程序提供函數(shù)調(diào)用接口。內(nèi)特性子模型3包括交互數(shù)據(jù)變量6、系統(tǒng)狀態(tài)7和數(shù)據(jù)解算模塊8,交互數(shù)據(jù)變量6被測系統(tǒng)在物理上通過標準數(shù)據(jù)總線與仿真環(huán)境聯(lián)接起來,在邏輯上通過輸入與輸出變量與仿真模型1產(chǎn)生聯(lián)系。因此,交互數(shù)據(jù)變量6是對仿真模型1與被測系統(tǒng)之間進行交互的各種不同類型數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的描述。系統(tǒng)狀態(tài)7與被測系統(tǒng)交聯(lián)的系統(tǒng)都是獨立的子系統(tǒng),有多種工作模式和內(nèi)部狀態(tài),因此系統(tǒng)狀態(tài)7是對被仿系統(tǒng)的所有系統(tǒng)狀態(tài)的描述。系統(tǒng)根據(jù)自身的用途,都有一套特定的方法來解析、計算、處理所收到的數(shù)據(jù),數(shù)據(jù)解算模塊8是實現(xiàn)被仿系統(tǒng)的數(shù)據(jù)解算方法,并提供函數(shù)調(diào)用接口。 仿真模型1雖然具有數(shù)據(jù)收發(fā)和處理能力,但不知道應(yīng)該在何時收發(fā)哪些變量,也不知道在具體情況下應(yīng)該調(diào)用哪個方法解算數(shù)據(jù),因為仿真模型1沒有描述被仿系統(tǒng)的行為,所以它還不能像真實系統(tǒng)那樣與被測系統(tǒng)開展交互。各種仿真測試平臺(GESTE、ADS2、 EasyTest等等)均采用測試腳本來控制仿真模型的行為,使得模型和被測系統(tǒng)能夠按測試人員設(shè)計好的方式進行交互,以此達到控制測試流程的目的。 利用測試腳本控制模型行為的機制有其顯著的優(yōu)越性,它不僅可以降低模型復(fù)雜度,簡化仿真建模過程,而且靈活易用。因為腳本語言對仿真模型l的行為和控制進行了抽象和封裝,所以,使用測試腳本語言編寫控制模型行為的腳本代碼非常簡潔且可讀性強。但 是,這也在一定程度上犧牲了仿真測試平臺的實時性。仿真模型程序是由模型語言(通常 是C/C++)編寫的編譯型程序,它被下載到實時處理機之前會在PC機上經(jīng)過交叉編譯變?yōu)?br>
可直接執(zhí)行的二進制機器代碼,因此仿真模型1的運行速度非???,能夠完全滿足測試平 臺的實時性要求。然而,測試腳本是直接以字符串的形式下載,測試開始后,由實時處理機 上運行的腳本解釋程序?qū)δ_本逐行解釋執(zhí)行。解釋執(zhí)行的效率和速度遠低于機器代碼的執(zhí) 行速度,因此從整體上影響了仿真測試平臺的實時性。雖然仿真測試平臺可以對大多數(shù)普 通實時嵌入式系統(tǒng)進行測試,但無法應(yīng)付具有很高實時性要求的系統(tǒng)。例如,飛行控制系統(tǒng)
在某些工作狀態(tài)下需要交聯(lián)環(huán)境在lms之內(nèi)作出響應(yīng),而測試平臺調(diào)度腳本解釋器解釋執(zhí) 行某段腳本來驅(qū)動仿真模型接收數(shù)據(jù)、解算數(shù)據(jù)、作出響應(yīng)的全過程時間可能大于lms,因 此無法對其開展仿真測試。
發(fā)明內(nèi)容
本發(fā)明的目的是為了解決上述問題,提出一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行 速度的方法。 —種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,包括以下幾個步驟
步驟一、對測試腳本的語言進行分析,得到測試腳本組織結(jié)構(gòu); 現(xiàn)有的各種嵌入式系統(tǒng)仿真測試平臺使用不同種類的測試腳本語言,對測試腳本 語言進行詳細分析,首先弄清楚腳本語言的所有語法結(jié)構(gòu),然后分析使用該腳本語言編寫 測試腳本的形式,即腳本的組織結(jié)構(gòu); 步驟二、分析仿真測試平臺,得到仿真模型的描述方法和形式; 仿真模型為模型語言編寫的代碼,不同的仿真測試平臺使用不同的模型語言來描 述仿真模型,分析具體仿真測試平臺的內(nèi)部原理和機制,得到仿真模型在具體測試平臺上 用模型語言所描述的形式和方法;
其特征在于,還包括以下步驟 步驟三、制定從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,并編程實現(xiàn)腳本轉(zhuǎn)化器;
通過步驟一、步驟二分別得到測試腳本組織結(jié)構(gòu)以及模型語言描述仿真模型的形 式和方法,從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則為將測試腳本語言中的每一個變量或者 語句轉(zhuǎn)化為一個或者多個仿真模型語言代碼中的變量和語句,即得到了與測試腳本語言對 應(yīng)的、等價的行為子模型;所述的行為子模型驅(qū)動仿真模型與被測系統(tǒng)之間的數(shù)據(jù)收發(fā),達 到驅(qū)動測試的目的; 根據(jù)測試腳本到行為子模型的轉(zhuǎn)換規(guī)則編程實現(xiàn)腳本轉(zhuǎn)化器,腳本轉(zhuǎn)化器自動將
輸入的測試腳本代碼輸出為模型代碼來完成從測試腳本到行為子模型的轉(zhuǎn)換; 步驟四、對被測系統(tǒng)進行測試; 測試人員按照現(xiàn)有的測試方法對被測系統(tǒng)執(zhí)行測試,在測試腳本下載到實時處理 機上執(zhí)行之前,將測試腳本輸入給腳本轉(zhuǎn)換器,腳本轉(zhuǎn)換器將測試腳本代碼轉(zhuǎn)變輸出為模 型語言代碼,得到行為子模型;行為子模型、內(nèi)特性子模型和接口子模型共同構(gòu)成了仿真模 型,仿真模型被交叉編譯為一個整體的二進制代碼,下載到實時處理機上直接運行,進行系 統(tǒng)測試。
本發(fā)明的優(yōu)點在于 1、本發(fā)明改變了測試腳本的運行機制,極大的提高了腳本代碼的執(zhí)行速度和效率,提高了仿真測試平臺的實時性能,使得其有能力對高實時性嵌入式系統(tǒng)開展仿真測試。
2、本發(fā)明原封不動的保持了現(xiàn)有的測試腳本,測試人員仍然可以像從前一樣查
看、存取由腳本自動生成器生成的測試腳本,由于腳本代碼到模型語言代碼的整個轉(zhuǎn)換過程是透明的,因此,測試人員不必學(xué)習(xí)新的知識來進行系統(tǒng)測試。
圖1是現(xiàn)有技術(shù)的仿真模型示意圖 圖2是本發(fā)明所述方法的流程圖; 圖3是本發(fā)明的仿真結(jié)構(gòu)示意圖。 圖中 1仿真模型 2接口子模型 5調(diào)用接口模塊 6交互數(shù)據(jù)變J 9行為子模型 10腳本轉(zhuǎn)化器
具體實施例方式
下面將結(jié)合附圖和實施例對本發(fā)明作進一步的詳細說明。 本發(fā)明是一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,具體流程如圖2所示,包括以下步驟 步驟一、對測試腳本的語言進行分析,得到測試腳本組織結(jié)構(gòu); 由于現(xiàn)有的各種嵌入式系統(tǒng)仿真測試平臺使用不同種類的測試腳本語言(比如,ADS2使用的是tcltk腳本,GESTE使用的是ESSTSL專用測試腳本),對測試腳本語言進行詳細分析,首先弄清楚該腳本語言的所有語法結(jié)構(gòu),然后分析使用該腳本語言編寫測試腳本的形式,即腳本的組織結(jié)構(gòu)。 步驟二、分析仿真測試平臺,得到仿真模型的描述方法和形式。 仿真模型1的表現(xiàn)形式為模型語言編寫的代碼,不同的仿真測試平臺使用不同的
模型語言來描述仿真模型l,現(xiàn)有仿真測試平臺大部分使用C/C++語言來描述。仿真模型
1的構(gòu)造型式是與具體仿真測試平臺的運行機制、模型調(diào)度機制、模塊與模塊之間的接口緊密相關(guān),分析具體仿真測試平臺的內(nèi)部原理和機制,清楚仿真模型1在具體測試平臺上模
型語言描述的形式和方法。 步驟三、制定從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,并編程實現(xiàn)腳本轉(zhuǎn)化器。
通過步驟一、步驟二分別得到測試腳本組織結(jié)構(gòu)和仿真模型1的模型語言描述型式和方法,從測試腳本到行為子模型9的轉(zhuǎn)換規(guī)則為將測試腳本語言中的每一個變量或者語句轉(zhuǎn)化為一個或者多個模型語言代碼中的變量和語句,即得到了與測試腳本語言對應(yīng)的、等價的行為子模型9。所述的行為子模型9驅(qū)動仿真模型1與被測系統(tǒng)之間的數(shù)據(jù)收發(fā),達到驅(qū)動測試的目的; 根據(jù)測試腳本到行為子模型9的轉(zhuǎn)換規(guī)則編程實現(xiàn)腳本轉(zhuǎn)化器10,腳本轉(zhuǎn)化器10自動將輸入的測試腳本代碼輸出為模型代碼來完成測試腳本到行為子模型9的轉(zhuǎn)換。不同
3內(nèi)特性子模型4驅(qū)動程序模塊7系統(tǒng)狀態(tài) 8數(shù)據(jù)解算模塊仿真測試平臺上使用的測試腳本語言不同,而且仿真模型1的模型語言描述型式和方法也 不一樣,因此對于不同的測試平臺需要制定各自不同的映射方法,得到不同的腳本轉(zhuǎn)化器 10。 步驟四、對被測系統(tǒng)進行測試。 測試人員按照現(xiàn)有的測試方法對被測系統(tǒng)執(zhí)行測試,在測試腳本下載到實時處理 機上執(zhí)行之前,將測試腳本輸入給腳本轉(zhuǎn)換器10,如圖3所示,腳本轉(zhuǎn)換器10將測試腳本代 碼轉(zhuǎn)變輸出為模型語言代碼,得到行為子模型9。行為子模型9、內(nèi)特性子模型3和接口子 模型2共同構(gòu)成了新的一個仿真模型l,仿真模型1被交叉編譯為一個整體的二進制代碼, 下載到實時處理機上直接運行,進行系統(tǒng)測試。
實施例 仿真平臺為GESTE仿真測試平臺,腳本語言為ESSTSL語言,仿真模型的模型語
曰 '為C語
曰o 步驟1、對測試腳本的語言進行分析,得到測試腳本組織結(jié)構(gòu);
GESTE仿真測試平臺上使用的測試腳本語言為ESSTSL語言, 一個測試腳本可以由 一個任務(wù)(Task)組成也可以由多個任務(wù)組成,每一個Task可以分為Task頭部和Task正 文兩個部分。Task頭部是關(guān)于該task的一些基本信息,它們是task名稱(TaskID) ;task 優(yōu)先級(Priority) ;task周期數(shù)(Period,若該值為_1表示定時任務(wù),否則為周期任務(wù)); task開始時間(StartTime);任務(wù)結(jié)束時間(EndTime) 。 Task正文是該任務(wù)將要執(zhí)行的具
體操作,即,數(shù)據(jù)收/發(fā)、邏輯判斷。
—個具體的Task的型式如下 Task{ TaskID = task_l ;/ *便于用戶記憶,便于數(shù)據(jù)庫檢索和存取* / Priority = Normal ;/ *優(yōu)先級* / Period = 50 ;/ *周期* / Starttime = 1 ;/ *開始時間* / Endtime = _1 ;/ *結(jié)束時間* / { / *腳本正文部分,包含條件判斷、對模型變量的讀寫操作、對系統(tǒng)時鐘的
判斷* / model4. bv. v2 = 3 ; setBlockData(mode14. bv); }
}; 步驟2、分析仿真測試平臺,得到仿真模型的描述方法和形式。
測試平臺為GESTE仿真測試平臺,它使用C語言作為模型語言來描述仿真模型。
步驟3、制定從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,并編程實現(xiàn)腳本轉(zhuǎn)化器。
根據(jù)對GESTE仿真測試平臺中仿真模型的構(gòu)造原理和調(diào)度方式的分析,制定從測 試腳本到行為子模型的轉(zhuǎn)換規(guī)則 (1)每一個腳本任務(wù)(Task),需要轉(zhuǎn)換成一個c語言函數(shù)(該函數(shù)的函數(shù)體對應(yīng) task的正文部分),并且調(diào)用RTPP_TaskRegister在VXworks系統(tǒng)中對該函數(shù)進行注冊。RTPP_TaskRegister是任務(wù)注冊函數(shù),它負責(zé)把轉(zhuǎn)換得到的這個C語言函數(shù)注冊為vxworks系統(tǒng)中的一個任務(wù),這個任務(wù)就是行為子模型,在測試過程中,vxworks將會以腳本任務(wù)Task設(shè)定的開始時間、優(yōu)先級來調(diào)度。 ①周期型任務(wù)(任務(wù)名為taskl)被轉(zhuǎn)換為c語言函數(shù)時,函數(shù)名為任務(wù)名之前力口上"model_script_Pe:riod_,,前綴voidmodel_script_Period_taskl (model_script *pMdl) {.........} ②定時型任務(wù)(任務(wù)名為task2)被轉(zhuǎn)換為c語言函數(shù)時,函數(shù)名為任務(wù)名之前力口上"model_script_Upe_,,前綴void model_script_Upe_task2 (model_script * pMdl) (2)將測試腳本中模型名和模型變量名,轉(zhuǎn)換模型語言中另一個相應(yīng)的名字。測試腳本中的模型名轉(zhuǎn)換為C函數(shù)時要加上一個前綴"g—p",測試腳本中的模型中含有的變量名被轉(zhuǎn)換時,則要加上前綴"m—"和"nu)"變?yōu)槔缒P蚼odel_l含有變量vl, v2, v3,轉(zhuǎn)換后f尋至U :g_pmodel_l, m_vl, m_v2, m_v3禾口 m—pvl, m—pv2, m—pv3 ;因為這與GESTE平臺上仿真模型的構(gòu)成方式有關(guān)。 (3)對于將要進行讀操作(數(shù)據(jù)接收)的模型變量,在讀取操作語句之前插入一條RTPP_GetVarValue函數(shù)調(diào)用語句。RTPP_GetVarValue函數(shù)負責(zé)把接收緩沖區(qū)中的該變量拷貝到本地變量,以供進行運算操作。 例如int n = model_l. vl ;要轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pvl, (char * )&g_pmodel_l— >m_vl) ;int n = g_pmodel_l— >m_vl ;這兩條語句再例如if (model—l. vl >= 3) {... } 要轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pvl, (char * ) &g_pmodel_l_ >m_vl); If (g_pmodel_l- > m_vl > = 3) {... } 又如int n = model_l. v2. bl ;要轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pv2, (char * )&g_pmodel_l- > m_v2) ;intn = g_pmodel_l- > m_v2. bl ;(塊變量v2的分量bl沒有被劃分為位段) 再如int n = model_l. v2. b2 ;要轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pv2, (char * )&g_pmodel_l- > m_v2) ;int n = g_pmodel_l- > m_v2. b2. Value ;(塊變量v2的分量b2被劃分為了位段) 再如int n = model_l. v2. b3. si ;要轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ >m_pv2, (char * )&g_pmodel_l_ > m_v2) ;intn = g_pmodeL_l- > m_v2. b3. bValue. si ;(直
接對位段進行讀操作) (4)對于將要進行寫操作(數(shù)據(jù)發(fā)送)的普通模型變量,在賦值語句之后立即插入一條RTPP_SetVarValue函數(shù)調(diào)用語句。RTPP_SetVarValue函數(shù)負責(zé)把本地變量拷貝到發(fā)送緩沖區(qū),以便發(fā)送給其它模型。 例如model—1. vl = 6 ;要轉(zhuǎn)換為g_pmodel_l_ > m—vl = 6 ;
RTPP_SetVarValue(g_pmodel_l_ > m_pvl, (char * )&g_pmodel_l_ > m_vl);
(5)對于將要進行寫操作(賦值)的塊模型變量,在對該塊的各個分量賦值語句完成之后統(tǒng)一插入一條RTPP_SetVarValue函數(shù)調(diào)用語句。
例如model_l. v2. bl = 3 ;model_l. v2. b3 = 5 ;setBlockData(model_l. v2);要 轉(zhuǎn)換為 g_pmodel_l_>m_v2. bl = 3 ;g_pmodel_l_ > m_v2. b3 = 5 ;RTPP_SetVarValue (g_ pmodel_l_ > m_pv2, (char * ) &g_pmodel_l_ > m_v2);(塊變量v2的分量bl禾口 b3都沒 有被劃分為位段) 又如model_l. v2. b2 = 8 ;setBlockData(model_l. v2); 要轉(zhuǎn)換為g_ pmodel_l_ > m_v2. b2. Value = 8 ;RTPP—SetVarValue (g_pmodel_l-> m_pv2, (char * )&g_ pmodelj- > m_v2);(塊變量v2的分量b2被劃分為了位段) 再如model_l. v2. b2. si = 3 3 ; m o d e 1 _ 1 . v 2 . b 2 . s 2 = 70;
setBlockData(model_l. v2);要轉(zhuǎn)換為g_pmodel_l- > m_v2. b2. bValue. si = 33 ;g_ pmodel_l_ > m_v2. b2. bValue. s2 = 70 ;RTPP_SetVarValue(g_pmodel_l_ > m_pv2, (char * )&g_pm0del_l- > m_v2);(直接對位段進行賦值操作) (6)時間變量t,要轉(zhuǎn)換為pMdl- > timerco皿ter。 pMdl- > timerco皿ter是 GESTE平臺上表示內(nèi)部時鐘的變量。 (7)腳本正文的其他語句以及非模型變量由于和c語言完全一樣,不需要任何轉(zhuǎn) 換,直接輸出即可。 依據(jù)測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,編程實現(xiàn)腳本轉(zhuǎn)化器,對輸入的測試腳 本進行自動轉(zhuǎn)換并輸出為行為子模型為如下型式RTPP—TaskRegister(〃 ScriptModel—Period—Taskl〃 ,TASK—TYPE—PERD,NORMAL, 50, 1,-1, NULL, (FUNCPTR)ScriptModel—Period—Taskl, (int)pMd1,0,0,0,0,0,0,0,0,0); void ScriptModel_Period_Taskl0 {
g_pmodel4_ > m_bv. v2 = 3 ; RTPP—SetVarValue(g_pmodel4_ > m_pbv, (char * )&g_pmodel4_ > m_bv);
} 腳本轉(zhuǎn)換器的工作流程如圖4所示,具體為 腳本轉(zhuǎn)換器接收測試腳本文件作為輸入,接著,轉(zhuǎn)換器進行自身的初始化工作,包 括初始化緩沖區(qū),初始化全局變量。由于ESSTSL測試腳本文件由一個或多個任務(wù)(Task) 組成,所以,腳本轉(zhuǎn)換器對腳本進行模型化的過程循環(huán)的方式對每一個Task進行。即,腳本 轉(zhuǎn)換器依次對每個Task進行模型化,具體為
每一個Task的模型化為
1)處理Task頭部; 腳本轉(zhuǎn)換器掃描Task頭部 一 次,將task頭部的5個任務(wù)描述信息TaskID、 priority、 period、 starttime、 endtime提取出來,并存入內(nèi)存緩沖區(qū)。
2)處理Task正文,流程如圖5所示; 處理Task正文為進行Task正文兩次掃描;首先記錄當(dāng)前Task的正文的起始位 置,即當(dāng)前輸入文件的文件指針的位置,然后開始逐一讀取字符流,進行腳本正文的第一次 掃描,在第一次掃描的過程中進行詞法分析、識別單詞符號并確定將要進行讀取操作的模 型變量,并將這些模型變量的名字存入內(nèi)存緩沖區(qū),當(dāng)掃描完該Task正文的末尾,第一次 掃描結(jié)束,根據(jù)這些模型變量的名字構(gòu)建出所有的RTPP—GetVarValue函數(shù)調(diào)用語句,并把這些語句也存入內(nèi)存緩沖區(qū),便于以后一并輸出;緊接著,回到該Task正文部分的起始位置,即恢復(fù)到之前保存下來的文件指針的位置,開始逐一讀取字符流,對腳本正文進行第二次掃描,在第二次掃描過程中對Task正文部分中所有的詞法、語法成分進行識別,包括判別單詞是否為模型變量、系統(tǒng)時鐘變量或者其它,并匹配相應(yīng)的轉(zhuǎn)換規(guī)則輸出轉(zhuǎn)換后的代碼到緩沖區(qū),判別腳本語句是否為控制仿真模型發(fā)送數(shù)據(jù)的行為(賦值操作),匹配轉(zhuǎn)換規(guī)則,構(gòu)造RTPP—SetVarValue函數(shù)調(diào)用語句并輸出到緩沖區(qū)。當(dāng)掃描完該Task正文的末尾,第二次掃描停止,此時,就完成對一個Task的模型化工作,轉(zhuǎn)換后得到的模型代碼都存放在緩沖區(qū)中。 接下來,腳本轉(zhuǎn)換器判斷是否還有Task等待轉(zhuǎn)換,如果有,則返回1),對下一個Task進行同樣的處理,如果為否,則完成對整個測試腳本文件的模型化工作,并將所有保存在緩沖區(qū)中的模型C代碼輸出為一個.h和一個.c文件,即行為子模型代碼,腳本轉(zhuǎn)換結(jié)束。 步驟4、對被測系統(tǒng)進行測試。 測試人員按照現(xiàn)有的測試方法對被測系統(tǒng)執(zhí)行測試,在測試腳本下載到實時處理機上執(zhí)行之前,將測試腳本輸入給腳本轉(zhuǎn)換器,腳本轉(zhuǎn)換器將測試腳本代碼轉(zhuǎn)變輸出為.H和.C文件,轉(zhuǎn)換得到的.H和.C文件是測試腳本模型化的結(jié)果,它可以和整個仿真模型代碼一塊編譯,也可以單獨編譯,這樣的好處是當(dāng)測試人員編寫新的測試腳本時,轉(zhuǎn)換得到的行為子模型可以被重新編譯、下載,然后與實時處理機上原有的接口子模型模塊和內(nèi)特性子模型模塊組成一個新的仿真模型。
權(quán)利要求
一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,包括以下幾個步驟步驟一、對測試腳本的語言進行分析,得到測試腳本組織結(jié)構(gòu);現(xiàn)有的各種嵌入式系統(tǒng)仿真測試平臺使用不同種類的測試腳本語言,對測試腳本語言進行詳細分析,首先弄清楚腳本語言的所有語法結(jié)構(gòu),然后分析使用該腳本語言編寫測試腳本的形式,即腳本的組織結(jié)構(gòu);步驟二、分析仿真測試平臺,得到仿真模型的描述方法和形式;仿真模型為模型語言編寫的代碼,不同的仿真測試平臺使用不同的模型語言來描述仿真模型,分析具體仿真測試平臺的內(nèi)部原理和機制,得到仿真模型在具體測試平臺上用模型語言所描述的形式和方法;其特征在于,還包括以下步驟步驟三、制定從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,并編程實現(xiàn)腳本轉(zhuǎn)化器;通過步驟一、步驟二分別得到測試腳本組織結(jié)構(gòu)以及模型語言描述仿真模型的形式和方法,從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則為將測試腳本語言中的每一個變量或者語句轉(zhuǎn)化為一個或者多個仿真模型語言代碼中的變量和語句,即得到了與測試腳本語言對應(yīng)的、等價的行為子模型;所述的行為子模型驅(qū)動仿真模型與被測系統(tǒng)之間的數(shù)據(jù)收發(fā),達到驅(qū)動測試的目的;根據(jù)測試腳本到行為子模型的轉(zhuǎn)換規(guī)則編程實現(xiàn)腳本轉(zhuǎn)化器,腳本轉(zhuǎn)化器自動將輸入的測試腳本代碼輸出為模型代碼來完成從測試腳本到行為子模型的轉(zhuǎn)換;步驟四、對被測系統(tǒng)進行測試;測試人員按照現(xiàn)有的測試方法對被測系統(tǒng)執(zhí)行測試,在測試腳本下載到實時處理機上執(zhí)行之前,將測試腳本輸入給腳本轉(zhuǎn)換器,腳本轉(zhuǎn)換器將測試腳本代碼轉(zhuǎn)變輸出為模型語言代碼,得到行為子模型;行為子模型、內(nèi)特性子模型和接口子模型共同構(gòu)成了仿真模型,仿真模型被交叉編譯為一個整體的二進制代碼,下載到實時處理機上直接運行,進行系統(tǒng)測試。
2. 根據(jù)權(quán)利要求1所述的一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,其特征 在于,所述步驟三中的從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則在仿真平臺為GESTE仿真測 試平臺,腳本語言為ESSTSL語言,仿真模型的模型語言為C語言情況下,具體為(1)每一個腳本任務(wù)Task轉(zhuǎn)換成一個c語言函數(shù),該函數(shù)的函數(shù)體對應(yīng)task的正文部 分,并且調(diào)用任務(wù)注冊函數(shù)RTPP_TaskRegister在VXworks系統(tǒng)中對c語言函數(shù)進行注冊; 任務(wù)注冊函數(shù)RTPP_TaskRegister負責(zé)把轉(zhuǎn)換得到的C語言函數(shù)注冊為vxworks系統(tǒng)中的 一個任務(wù),這個任務(wù)就是行為子模型,在測試過程中,vxworks以腳本任務(wù)Task設(shè)定的開始 時間、優(yōu)先級進行調(diào)度;①周期型任務(wù),任務(wù)名為taskl,轉(zhuǎn)換為c語言函數(shù)時,函數(shù)名為任務(wù)名之前加上 "model—script—Period」,前綴voidmodel_script_Period_taskl (model_script女pMdl)②定時型任務(wù),任務(wù)名為task2,轉(zhuǎn)換為c語言函數(shù)時,函數(shù)名為任務(wù)名之前加上 model_script_Upe_,, 前 綴void model_script_Upe_task2(model_script * pMdl)(2)將測試腳本中模型名和模型變量名,轉(zhuǎn)換模型語言中另一個相應(yīng)的名字;測試腳本中的模型名轉(zhuǎn)換為C函數(shù)時要加上一個前綴"g—p",測試腳本中的模型中含有的變量名被轉(zhuǎn)換時,則要加上前綴"m—"和"m_p";對于將要進行讀操作的模型變量,在讀取操作語句之前插入一條RTPP_GetVarValue函數(shù)調(diào)用語句,RTPP_GetVarValue函數(shù)負責(zé)把接收緩沖區(qū)中的該變量拷貝到本地變量,以供進行運算操作;(3) 對于將要進行寫操作的普通模型變量,在賦值語句之后立即插入一條RTPP—SetVarValue函數(shù)調(diào)用語句,RTPP_SetVarValue函數(shù)負責(zé)把本地變量拷貝到發(fā)送緩沖區(qū),發(fā)送給其它模型;對于將要進行寫操作的塊模型變量,在對該塊的各個分量賦值語句完成之后統(tǒng)一插入一條RTPP_SetVarValue函數(shù)調(diào)用語句;(4) 時間變量t轉(zhuǎn)換為pMdl-> timercounter,pMdl-> timercounter是GESTE平臺上表示內(nèi)部時鐘的變量;(5) 腳本正文的其他語句以及非模型變量和c語言完全一樣,不需要轉(zhuǎn)換,直接輸出。
3. 根據(jù)權(quán)利要求1所述的一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,其特征在于,所述步驟三中腳本轉(zhuǎn)化器在仿真平臺為GESTE仿真測試平臺,腳本語言為ESSTSL語言,仿真模型的模型語言為C語言情況下,具體為將腳本測試文件輸入到腳本轉(zhuǎn)換器,腳本轉(zhuǎn)換器依次對每個Task進行模型化,具體為1) 處理Task頭部;腳本轉(zhuǎn)換器掃描Task頭部一次,將task頭部的5個任務(wù)描述信息TasklD、priority、period、 starttime、 endtime提取出來,并存入內(nèi)存緩沖區(qū);2) 處理Task正文;處理Task正文為進行Task正文兩次掃描;首先記錄當(dāng)前Task的正文的起始位置,即當(dāng)前輸入文件的文件指針的位置,然后開始逐一讀取字符流,進行腳本正文的第一次掃描,在第一次掃描的過程中進行詞法分析、識別單詞符號并確定將要進行讀取操作的模型變量,并將這些模型變量的名字存入內(nèi)存緩沖區(qū),當(dāng)掃描完該Task正文的末尾,第一次掃描結(jié)束,根據(jù)這些模型變量的名字構(gòu)建出所有的RTPP—GetVarValue函數(shù)調(diào)用語句,并把這些語句也存入內(nèi)存緩沖區(qū);緊接著,回到該Task正文部分的起始位置,即恢復(fù)到之前保存下來的文件指針的位置,開始逐一讀取字符流,對腳本正文進行第二次掃描,在第二次掃描過程中對Task正文部分中所有的詞法、語法成分進行識別,包括判別單詞是否為模型變量、系統(tǒng)時鐘變量,并匹配相應(yīng)的轉(zhuǎn)換規(guī)則輸出轉(zhuǎn)換后的代碼到緩沖區(qū),判別腳本語句是否為控制仿真模型發(fā)送數(shù)據(jù)的行為,即賦值操作,然后匹配轉(zhuǎn)換規(guī)則,構(gòu)造RTPP—SetVarValue函數(shù)調(diào)用語句并輸出到緩沖區(qū);當(dāng)掃描完該Task正文的末尾,第二次掃描停止,轉(zhuǎn)換后得到的模型代碼存放在緩沖區(qū)中;完成了一個Task的模型化,然后判斷是否還有Task等待轉(zhuǎn)換,如果有,則返回1),對下一個Task進行同樣的處理,如果為否,則完成對整個測試腳本文件的模型化工作,并將所有保存在緩沖區(qū)中的模型C代碼輸出為一個.h和一個.c文件,即行為子模型代碼,腳本轉(zhuǎn)換結(jié)束。
4. 根據(jù)權(quán)利要求2所述的一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,其特征在于,所述的從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,進一步為將int n = model_l. vl ;轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ 〉 m_pvl, (char女)&g_pmodel_l_ > m_vl) ;int n = g_pmodel_l_ > m_vl ;將if (model_l. vl >= 3) {.". . }轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pvl, (char女)&g_pmodel_l- > m_vl) ;If (g_pmodel_l- > m_vl >= 3) {.... . };將int n = model_l. v2. bl ;轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pv2, (char* )&g_pmodel_l_ > m_v2) ;int n = g_pmodel_l_ > m_v2. bl ;塊變量v2的分量bl沒有 被劃分為位段;將int n = model_l. v2. b2 ;轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pv2, (char* )&g_pmodel_l_ > m_v2) ;int n = g_pmodel_l_ > m_v2. b2. Value ;塊變量v2的分量b2 被劃分為了位段;將int n = model_l. v2. b3. si ;轉(zhuǎn)換為RTPP_GetVarValue (g_pmodel_l_ > m_pv2, (char * ) &g_pmodel_l- > m_v2) ;int n = g_pmodel_l- > m_v2. b3. bValue. si ;直接對位 段進行讀操作;將model_l. vl = 6 ;轉(zhuǎn)換為g_pmodel_l_ > m_vl = 6 ;RTPP_SetVarValue (g_ pmodel_l- > m_pvl, (char女)&g_pmodel_l- > m_vl);將model_l. v2. bl = 3 ;model_l. v2. b3 = 5 ;setBlockData(model_l. v2); 轉(zhuǎn)換 為g_pmodel_l_ > m_v2. bl = 3 ;g_pmodel_l_ > m_v2. b3 = 5 ;RTPP—SetVarValue(g_ pmodel_l_ > m_pv2, (char * ) &g_pmodel_l_ > m_v2);塊變量v2的分量bl禾口 b3都沒有 被劃分為位段;將model_l. v2. b2 = 8 ;setBlockData(model_l. v2);轉(zhuǎn)換為g_pmodel_l_ > m_ v2.b2. Value = 8 ;RTPP_SetVarValue(g_pmodel_l_ > m_pv2, (char女)&g_pmodel_l_ > m_v2);塊變量v2的分量b2被劃分為了位段;將modelj. v2. b2. si = 33 ;model_l. v2. b2. s2 = 70 ;setBlockData (model_l. v2);要 轉(zhuǎn)換為g_pmodel_l_ > m_v2. b2. bValue. si = 33 ;g_pmodel_l_ > m_v2. b2. bValue. s2 = 70 ;RTPP_SetVarValue(g_pmodel_l_ > m_pv2, (char * ) &g_pmodel_l_ > m_v2);直接對 位段進行賦值操作。
全文摘要
本發(fā)明公開了一種提高實時嵌入式系統(tǒng)測試腳本執(zhí)行速度的方法,包括以下幾個步驟步驟一、對測試腳本的語言進行分析,得到測試腳本組織結(jié)構(gòu);步驟二、分析仿真測試平臺,得到仿真模型的描述方法和形式;步驟三、制定從測試腳本到行為子模型的轉(zhuǎn)換規(guī)則,并編程實現(xiàn)腳本轉(zhuǎn)化器;步驟四、對被測系統(tǒng)進行測試;本發(fā)明改變了測試腳本的運行機制,極大的提高了腳本代碼的執(zhí)行速度和效率,提高了仿真測試平臺的實時性能,使得其有能力對高實時性嵌入式系統(tǒng)開展仿真測試;測試人員像從前一樣查看、存取由腳本自動生成器生成的測試腳本,由于腳本代碼到模型語言代碼的整個轉(zhuǎn)換過程是透明的。
文檔編號G06F11/36GK101719096SQ200910244349
公開日2010年6月2日 申請日期2009年12月29日 優(yōu)先權(quán)日2009年12月29日
發(fā)明者劉斌, 楊順昆, 龔志遠 申請人:北京航空航天大學(xué)