專利名稱:一種基于uppaal模型的汽車軟件源代碼仿真測試方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種軟件工程領(lǐng)域,尤其涉及一種基于UPPAAL模型的汽車軟件源代碼仿真測試方法。
背景技術(shù):
隨著汽車智能化程度的不斷提高,更多的控制功能趨于使用軟件來實現(xiàn),導 致汽車軟件的規(guī)模和復(fù)雜度不斷增長。Manfred Broy在文獻[M. Broy, I. H. Kruger, A.PretschnerjC. Salzmann. Engineering Automotive Software. Proceedings of theIEEE, 95(2) :356-373, 2007.]中預(yù)測,“未來五年內(nèi)上市的下一代高檔轎車上,軟件的總量將達到1GB,軟件將成為汽車價值的主要貢獻者,同時軟件開發(fā)的比重和成本也將不斷提高”。隨著汽車上軟件比重的不斷提高,汽車軟件開發(fā)面臨著越來越多的挑戰(zhàn),這些挑戰(zhàn)主要來自如下幾個方面(I)汽車系統(tǒng)是一種嵌入式實時性系統(tǒng),具有嚴格的時間約束性,這種時間約束性與軟件系統(tǒng)的可控的物理工作過程密切相關(guān),汽車系統(tǒng)的安全性主要依靠軟件系統(tǒng)的可控的物理工作過程的正確性;(2)汽車系統(tǒng)是一種復(fù)雜而龐大的嵌入式計算機系統(tǒng),包括數(shù)以萬計的、與需求相關(guān)的功能條目;(3)汽車系統(tǒng)是一種分布式計算機系統(tǒng),包括大量的用于諸如ECU、激勵器等組件間交互信息的信號;(4)電子產(chǎn)品和汽車電子系統(tǒng)功能的復(fù)雜性日益增加。面對這些挑戰(zhàn),需要新的方法、模型和工具來確保汽車系統(tǒng)的安全性和可靠性。對于汽車系統(tǒng)這樣一種安全關(guān)鍵系統(tǒng)而言,設(shè)計者必須深刻理解系統(tǒng)的可控的物理工作過程,當系統(tǒng)的可控的物理工作過程是正確的,就能確保系統(tǒng)處于安全狀態(tài)。AndersP. Ravn>Hans Rischel 和Kirsten Mark Hansen在文獻[A. P. Ravn, H. RischeI,K. M. Hansen.Specifying and Verifying Requirements of Real-Time Systems. IEEE Transactionson Software Engineering,19 (I) : 41-55,1993.]中指出“設(shè)計嵌入式計算機系統(tǒng)的工程師必須深刻理解系統(tǒng)可控的物理工作過程這一特性,當這個系統(tǒng)是安全關(guān)鍵性系統(tǒng)時,這種洞察力被明確并形成設(shè)計基礎(chǔ)就顯得尤為重要”,這一問題已經(jīng)引起了學術(shù)界的廣泛認識。近些年來出現(xiàn)了一些基于模型的實時系統(tǒng)分析工具,如SaveCCM(SaveComp ComponentModel ) [M. Akerholm, J. Carlson, J. Hakansson, H. Hanssonj M. Nolinj T. Noltej andP.Pettersson. The SaveCCM Language Reference Manual. MRTC report ISSN 1404-3041ISRN MDHMRTC-207/2007-l-SE,Malardalen Real-Time Research Centre, MalardalenUniversity, January, 2007. ]、KR0N0S[C. Daws, A. Oliveroj S. Tripakis and S. Yovine.The tool Kronos. R. Alurj T. A. Henzinger and E. D. Sontag (Eds. ) Hybrid Systems III,LNCSj Springer, vol. 1066,1996,pp. 208-219,doi:10. 1007/BFb0020947. ]、TIMES[T.AmnelI, E. Fersman, L. Mokrushin, P. Pettersson, W. Yi. Times-a tool for modelling andimplementation of embedded systems. K. G. Larsen and P. NiebertCEds. )F0RMATS 2003,LNCS, Springer, vol. 2791,Sep.2003,pp. 60-72,doi :10. 1007/978-3-540-40903-8—6·]和 UPPAAL [G. Behrmann,A. David,K. G. Larsen. A Tutorial on UPPAAL M. Bernardo andF. Corradini (Eds. ) SFM-RT 2004,LNCS, Springer, vol. 3185,Sep. 2004,pp. 200 -236,doi:10. 1007/978-3-540-30080-9_7. ][R. Alur, D. L. Dill.A Theory of TimedAutomata. Theoretical Computer Science,126(2) : 183-235,1994.][G. Behrmann, J.Bengtsson,A.David,K.G.Larsen,P.Pettersson,and ff.Yi.Uppaal implementationsecrets, ff. Damm and E. - R. Olderog (Eds. ) FTRTFT 2002, LNCS, Springer, vol. 2469, Sep.2002,pp. 3-22,doi :10. 1007/3-540-45739-91.],這些工具可以用于分析和驗證系統(tǒng)。目前它們已經(jīng)足夠成熟可以應(yīng)用在實時系統(tǒng)的工業(yè)開發(fā)中,軟件設(shè)計人員可以利用這些工具的分析結(jié)果撰寫軟件源代碼,但是卻無法確保與系統(tǒng)的可控的物理工作過程相關(guān)的源代碼的正確性。目前,汽車軟件中與系統(tǒng)的可控的物理工作過程相關(guān)的源代碼測試大多與軟件測試一起進行,采用手工測試的方法。軟件設(shè)計人員根據(jù)技術(shù)文檔分析系統(tǒng)的功能,進行代碼撰寫,完成軟件設(shè)計。然后測試人員進行常規(guī)的軟件測試,經(jīng)常需要利用各種測試工具根據(jù)技術(shù)文檔撰寫大量的測試代碼來測試軟件的工作過程。最后測試人員將軟件下載到已經(jīng)設(shè) 的成本、降低軟件開發(fā)的速度同時也無法保證軟件開發(fā)的質(zhì)量。如果能夠利用需求分析階段的行為模型來仿真測試與系統(tǒng)的可控的物理工作過程相關(guān)的源代碼,勢必將取得良好的效果。
發(fā)明內(nèi)容
本發(fā)明的目的就是為了解決上述問題,提供一種基于UPPAAL模型的汽車軟件源代碼仿真測試方法,它能夠確保汽車軟件中與可控的物理工作過程相關(guān)的源代碼的正確性,具有確保汽車系統(tǒng)的安全性、降低軟件開發(fā)的成本、加快軟件開發(fā)速度和提高軟件質(zhì)量等優(yōu)點。為了實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案基于UPPAAL模型的汽車軟件源代碼仿真測試實現(xiàn)步驟如下(I)根據(jù)需求規(guī)格說明,構(gòu)建UPPAAL模型,構(gòu)建好的UPPAAL模型中的全局聲明部分定義的數(shù)據(jù)變量和管道(channels)變量就是測試系統(tǒng)中的輸入變量和輸出變量,利用構(gòu)建好的UPPAAL模型進行仿真和功能需求驗證;(2)根據(jù)UPPAAL模型的定義或者通過UPPAAL仿真器,確定測試系統(tǒng)的輸入隊列和
輸出變量;(3 )將UPPAAL模型轉(zhuǎn)化為C++代碼;(4)根據(jù)測試系統(tǒng)的輸入變量和輸出變量,確定軟件源代碼中相應(yīng)的輸入變量和輸出變量,在軟件源代碼和測試系統(tǒng)中的輸入變量和輸出變量之間建立映射關(guān)系;(5)設(shè)置測試系統(tǒng)的輸入隊列,運行代碼轉(zhuǎn)化后的UPPAAL模型和軟件源代碼,并記錄它們的輸出結(jié)果,最后判斷它們的輸出結(jié)果是否一致,如果一致就說明與系統(tǒng)的可控的物理工作過程相關(guān)的源代碼是正確的,否則就存在錯誤。所述步驟(3)的實現(xiàn)步驟為(3-1)利用 MSXML(Microsoft XML Core Services)技術(shù),通過 DOM 接口從 UPPAAL模型的XML文件中獲取到UPPAAL模型信息。DOM是萬維網(wǎng)聯(lián)盟的推薦標準,是表示諸如XML,HTML格式文檔和訪問、操作構(gòu)成文檔的各種元素的應(yīng)用程序接口。DOM將一個XML文檔作為一種樹形結(jié)構(gòu)并聲明成一個文檔對象,通過使用該文檔對象的方法和屬性實現(xiàn)對XML文件中數(shù)據(jù)的管理。(3-2)生成 UPPAAL 模型的 C++ 代碼的第一部分 CUppaalLocation,CUppaalTransition 和 CUppaalTemplate 三個 C++ 類,它們分別用來描述位置(locations)元素、轉(zhuǎn)換(transition)元素和模板(templates)元素的數(shù)據(jù)結(jié)構(gòu),這部分代碼是固定的,只需要產(chǎn)生一次,將它們寫為C++類庫。(3-3)將UPPAAL系統(tǒng)編輯器中的變量聲明部分(包括全局聲明、模板的聲明以及模板的參數(shù))和時間自動機圖形描述中的表達式(衛(wèi)士條件(guard)表達式、賦值操作表達式和不變式(invariants))進行C++代碼表示。定義一組將UPPAAL模型中變量、參數(shù)和表達式轉(zhuǎn)化為C++代碼的轉(zhuǎn)化規(guī)則
Rl:將UPPAAL模型中的全局聲明部分轉(zhuǎn)化為C++代碼中的全局聲明;R2:將UPPAAL模板中的局部聲明中的元素轉(zhuǎn)化為C++代碼中模板類對象的成員變量;R3:將UPPAAL模板中的參數(shù)轉(zhuǎn)化為C++代碼中模板類對象的成員變量;R4:將UPPAAL中的時鐘變量轉(zhuǎn)換為C++代碼中的一種整形變量,這類整形變量與用于計時的線程相關(guān);R5:將UPPAAL中的有界的整形變量轉(zhuǎn)化為C++代碼中的一種整形變量,這類整形變量有一個對其限定取值范圍的聲明;R6:將UPPAAL中的同步管道轉(zhuǎn)化為一種字符串變量,這類字符串變量表示它們作為同步管道的特殊用途;R7:將UPPAAL中的不變式、衛(wèi)士條件表達式和賦值操作表達式轉(zhuǎn)化為C++代碼中的全局函數(shù)。(3-4)生成UPPAAL模型的C++代碼的第二部分C++類CUppaalModel,用于描述UPPAAL模型中的位置、轉(zhuǎn)換和模板的信息,以下是CUppaalModeI類定義的格式#include flUppaalTemplate .hnclass CUppaalModei
{
public:
CUppaalMoclel();virtual UppaaiModeI();
CSlring gelModelFilePalh();
CTypedPtrArray<CObArray, CUppaalTemplate *> * getPtrArrayTemplate(); private;
void inhUppaaiModelO;
/* Template*/
void sctUpipaalTcmplatcOfCUppaalTcmplatc * uppaalTcmplatcO);
void setPtrArrayl ocarionO(CTypedPirArray<CObArray, CLlppaali ,ocation *> *ptrArrayLocationO);
void setPtrArray l mnsitionOiC IypedPtrAiray^'CObArray, CUppaal l ransition*
ptr4rrayTransitionO,CTvpedPtrAtTay<CObAn'ay. CUppaalLocation *> ^pirArrayLocationO);/isTemplare5V
void selUppaalTeiiipIatel(CUppaalTeniplaie * uppaalTempiaiel),
void setPtr ArrayLocation I (CTypedPtrArrayi-CObAiTayri CUppaalLocation *> *ptrArrayLocationl);
void setPtrArrayTransition I (CTypecf Ptr Array<COb Array, CUppaalTransition *> *ptrArrayTransitionI,CTypedPtrArray-CObArrayr CUppaalLocation *> i<ptrArrayLocationl);
/* Template*/
I冬 Template*/
ClJppaaiLociTiun * getLocationById(CString byId,CTypedPtrArray<C()bArray,CUppiialLocation *、> ^ptrArrayLocation);
C String m_strModelFi!ePath;
rTypedPirAri.ay<CT)bAiTay, ClJppaalTemplate *> * m_ptrArrayTeniplaie;
};本發(fā)明的有益效果本發(fā)明以汽車軟件中與可控的物理工作過程相關(guān)的源代碼為研究對象,研究如何能夠利用需求分析階段的UPPAAL模型來仿真測試軟件的源代碼。使用本發(fā)明能夠確保汽車軟件中與可控的物理工作過程相關(guān)的源代碼的正確性 ,從而確保汽車系統(tǒng)的安全性,能夠降低軟件開發(fā)的成本、加快軟件開發(fā)速度和提高軟件質(zhì)量。本發(fā)明結(jié)合我國汽車軟件開發(fā)中的實際需求,解決汽車軟件開發(fā)和測試中的關(guān)鍵性問題,其研究成果將應(yīng)用到汽車電子產(chǎn)品研制過程中,力求提高汽車電子控制軟件的質(zhì)量,產(chǎn)生重要社會經(jīng)濟效益。
圖I基于UPPAAL模型的汽車軟件源代碼仿真測試系統(tǒng)的工作原理;圖2LAMPCTRL和DRIVER的時間自動機。
具體實施例方式下面結(jié)合附圖與實例對本發(fā)明作進一步說明?;赨PPAAL模型的汽車軟件源代碼仿真測試系統(tǒng)的工作原理如圖I所示。需求說明文檔可以被形式化表示為UPPAAL模型,UPPAAL模型能夠用于驗證需求和產(chǎn)生軟件源代碼。為了實現(xiàn)源代碼仿真測試系統(tǒng)的自動性和實時性,需要將UPPAAL模型轉(zhuǎn)化為C++代碼。源代碼仿真測試系統(tǒng)的輸入是一個三元組(d,e, t)的隊列,其中d是數(shù)據(jù)變量的集合,e是事件變量的集合,t是時鐘約束的集合。一個輸入元組(d,e, t)表示在數(shù)據(jù)輸入為d、時鐘約束為t的情況下,發(fā)出e這個事件請求信息。當軟件源代碼和代碼轉(zhuǎn)化后的UPPAAL模型收到輸入(d,e,t)后,將分別產(chǎn)生一個數(shù)據(jù)變量集合的輸出結(jié)果。在軟件源代碼和代碼轉(zhuǎn)化后的UPPAAL模型處理完所有的輸入數(shù)據(jù)(三元組(d,e, t)的隊列)后,如果它們的輸出結(jié)果一致就可以判定源代碼是正確的,否則就存在錯誤。所述UPPAAL由瑞典Uppsala大學和丹麥Aalborg大學于1995年聯(lián)合提出,是一種基于時間自動機理論而構(gòu)建的實時系統(tǒng)建模、仿真和驗證工具,UPPAAL建模語言對傳統(tǒng)的時間自動機進行了一些擴展,引入了一些額外的特性,UPPAAL中的表達式可以使用時鐘變量和有界的整型變量(或者整型數(shù)組),這一擴展大大提高了時間自動機的表達能力,可以表達更加復(fù)雜的衛(wèi)士條件表達式、賦值操作表達式和不變式。UPPAAL模型包括一個非確定的并行過程(process)的積,每一個過程被描述為由有限控制結(jié)構(gòu)、實數(shù)值時鐘和變量組成的時間自動機,過程之間通過管道和(或者)共享變量來進行通訊,管道被定義為形如chanc,帶有標簽為c!的邊可以與標簽為c 的邊同步,管道用于保證不同自動機間的兩個轉(zhuǎn)換同時執(zhí)行。UPPAAL主要通過快速搜索機制來驗證時鐘約束和可達性,它的主要優(yōu)點是高效性和方便性。所述時間自動機由R. Alur和D. Dill提出,是一種擴展了時鐘變量的有限狀態(tài)機,使用稠密時間模型,時鐘變量使用有限的實數(shù)值,所有的時鐘同步變化,在應(yīng)用中經(jīng)常將若干個時間自動機通過時鐘集合和操作組成時間自動機網(wǎng)絡(luò)。在給出時間自動機的定義之前,先給出如下的定義設(shè)C為時鐘變量的集合,B(C)是簡單條件或者的并集,其中
權(quán)利要求
1.一種基于UPPAAL模型的汽車軟件源代碼仿真測試方法,其特征是,實現(xiàn)步驟如下 (O根據(jù)需求規(guī)格說明,構(gòu)建UPPAAL模型,構(gòu)建好的UPPAAL模型中的全局聲明部分定義的數(shù)據(jù)變量和管道變量就是測試系統(tǒng)中的輸入變量和輸出變量,利用構(gòu)建好的UPPAAL模型進行仿真和功能需求驗證; (2)根據(jù)UPPAAL模型的定義或者通過UPPAAL仿真器,確定測試系統(tǒng)的輸入隊列和輸出變量; (3)將UPPAAL模型轉(zhuǎn)化為C++代碼; (4)根據(jù)測試系統(tǒng)的輸入變量和輸出變量,確定軟件源代碼中相應(yīng)的輸入變量和輸出變量,在軟件源代碼和測試系統(tǒng)中的輸入變量和輸出變量之間建立映射關(guān)系; (5)設(shè)置測試系統(tǒng)的輸入隊列,運行代碼轉(zhuǎn)化后的UPPAAL模型和軟件源代碼,并記錄它們的輸出結(jié)果,最后判斷它們的輸出結(jié)果是否一致,如果一致就說明與系統(tǒng)的可控的物理工作過程相關(guān)的源代碼是正確的,否則就存在錯誤。
2.如權(quán)利要求I所述的一種基于UPPAAL模型的汽車軟件源代碼仿真測試方法,其特征是,所述步驟(3)的具體步驟為 (3-1)利用MSXML技術(shù),通過DOM接口從UPPAAL模型的XML文件中獲取到UPPAAL模型信息;DOM是萬維網(wǎng)聯(lián)盟的推薦標準,是表示諸如XML、HTML格式文檔和訪問、操作構(gòu)成文檔的各種元素的應(yīng)用程序接口 ;D0M將一個XML文檔作為一種樹形結(jié)構(gòu)并聲明成一個文檔對象,通過使用該文檔對象的方法和屬性實現(xiàn)對XML文件中數(shù)據(jù)的管理; (3-2)生成 UPPAAL 模型的 C++ 代碼的第一部分 CUppaalLocation,CUppaalTransition和CUppaalTemplate三個C++類,它們分別用來描述位置元素、轉(zhuǎn)換元素和模板元素的數(shù)據(jù)結(jié)構(gòu),這部分代碼是固定的,只需要產(chǎn)生一次,將它們寫為C++類庫; (3-3)將UPPAAL系統(tǒng)編輯器中的變量聲明部分和時間自動機圖形描述中的表達式進行C++代碼表示;其中,變量聲明部分包括全局聲明、模板的聲明以及模板的參數(shù),時間自動機圖形描述中的表達式包括衛(wèi)士條件表達式、賦值操作表達式和不變式;定義一組將UPPAAL模型中變量、參數(shù)和表達式轉(zhuǎn)化為C++代碼的轉(zhuǎn)化規(guī)則 Rl:將UPPAAL模型中的全局聲明部分轉(zhuǎn)化為C++代碼中的全局聲明; R2:將UPPAAL模板中的局部聲明中的元素轉(zhuǎn)化為C++代碼中模板類對象的成員變量; R3:將UPPAAL模板中的參數(shù)轉(zhuǎn)化為C++代碼中模板類對象的成員變量; R4:將UPPAAL中的時鐘變量轉(zhuǎn)換為C++代碼中的一種整形變量,這類整形變量與用于計時的線程相關(guān); R5:將UPPAAL中的有界的整形變量轉(zhuǎn)化為C++代碼中的一種整形變量,這類整形變量有一個對其限定取值范圍的聲明; R6:將UPPAAL中的同步管道轉(zhuǎn)化為一種字符串變量,這類字符串變量表示它們作為同步管道的特殊用途; R7:將UPPAAL中的不變式、衛(wèi)士條件表達式和賦值操作表達式轉(zhuǎn)化為C++代碼中的全局函數(shù); (3-4)生成UPPAAL模型的C++代碼的第二部分C++類CUppaalModel,用于描述UPPAAL模型中的位置、轉(zhuǎn)換和模板的信息,以下是CUppaalModel類定義的格式#include MUppaalTemplate.h"class Cl ippaal Mode!{public:CUppaaiModcli);virtual -CUppaalModelO; CString gciModc!FilcPath();CTypedPtrArray<CObArray, CTJppaalTemplate *> * getPtrArrayTenip!ate();private:void initlJppaalModelO;產(chǎn) Template*/ void setljppaalTemplateO(Cl JppaaITemplate * uppaalTeniplateO); void sctPtr Array LocationO(CTypcdPtrArray<COb Array, CUppaalLocation φ> *ptrArrayLocationO);void setPtr/\n*ayTransitionO(CTypedPtiv\rmy<COb/uTay, CUppaalTransition *> *ptrArrayTransiuonOX^TvpedPtrAiray<CObArray, CUppaalLocation ;iipl.rArrayLocationO);/^Template*/void setUppaalTemplate !(CUppaalTempIate * uppaalTemplate I );void setPtrArrayLocation I (CTypedPtrArray^rCObArray, CUppaalLocation*ptrArrayLocation I):void setPtrArrayTnmsition] (CTypedPtrArray<COb/\iTay.,. CUppaalTransition *> *ptrArray l ransiLion I !ypedPtrArray<CObArray, CUppaalLocation *> ^pirArrayLocarion I);Templateih/ Ztii Template*/ CUppaalLocation * getLocationById(C String byld, CTypedPtrArray<C ObArray5CUppaalLocation *> ptrArrayLocation);CString m_strModeIFiiePath; C iypedPtrArmy<CObArray,. CLppaalTempiate 〃> * m_ptrAiray i emplate;};o
全文摘要
本發(fā)明屬于軟件工程領(lǐng)域,針對汽車軟件系統(tǒng)中與可控的物理工作過程相關(guān)的源代碼測試中存在的問題,同時考慮到UPPAAL模型的特性,設(shè)計了一種汽車軟件源代碼仿真測試系統(tǒng)。該系統(tǒng)的輸入是由數(shù)據(jù)變量的集合、事件變量的集合和時鐘約束的集合組成的三元組的隊列,輸出是數(shù)據(jù)變量的集合。為了實現(xiàn)源代碼仿真測試系統(tǒng)的自動性和實時性,將UPPAAL模型轉(zhuǎn)化為C++代碼。在軟件源代碼和代碼轉(zhuǎn)化后的UPPAAL模型處理完所有的輸入數(shù)據(jù)后,如果它們的輸出結(jié)果一致就可以判定源代碼是正確的,否則就存在錯誤。使用本發(fā)明能夠測試汽車軟件中與可控的物理工作過程相關(guān)的源代碼,從而確保系統(tǒng)的安全性,并且能夠降低軟件開發(fā)成本、加快軟件開發(fā)速度和提高軟件的質(zhì)量。
文檔編號G06F11/36GK102866952SQ20121038223
公開日2013年1月9日 申請日期2012年10月11日 優(yōu)先權(quán)日2012年10月11日
發(fā)明者閆旭琴, 劉曉建, 王知學, 成巍 申請人:山東省科學院自動化研究所