基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法
【專利摘要】本發(fā)明所述的一種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法,該方法首先通過(guò)對(duì)無(wú)線傳感網(wǎng)軟件源代碼分析并建立動(dòng)態(tài)查找表,然后建立軟件模型,該模型是無(wú)線傳感網(wǎng)軟件源代碼的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的抽象,在此基礎(chǔ)上定義模型轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)軟件模型轉(zhuǎn)化向C語(yǔ)言的代碼轉(zhuǎn)化,最后使用有界模型檢驗(yàn)工具對(duì)轉(zhuǎn)化后的代碼進(jìn)行有界模型檢驗(yàn)。本發(fā)明能夠有效緩解無(wú)線傳感網(wǎng)軟件模型檢驗(yàn)中的狀態(tài)空間爆炸問(wèn)題,可應(yīng)用于無(wú)線傳感網(wǎng)系統(tǒng)驗(yàn)證。
【專利說(shuō)明】基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法,主要利用有界模型檢驗(yàn)技術(shù)來(lái)解決無(wú)線傳感器網(wǎng)絡(luò)軟件的模型驗(yàn)證問(wèn)題,屬于計(jì)算機(jī)技術(shù)、無(wú)線通信、無(wú)線傳感器網(wǎng)絡(luò)、實(shí)時(shí)技術(shù)、分布式系統(tǒng)和驗(yàn)證技術(shù)的交叉技術(shù)應(yīng)用領(lǐng)域。
【背景技術(shù)】
[0002]無(wú)線傳感網(wǎng)是一種全新的信息獲取和處理技術(shù),能夠協(xié)作地實(shí)時(shí)監(jiān)測(cè)、感知和采集網(wǎng)絡(luò)分布區(qū)域內(nèi)各種環(huán)境或監(jiān)測(cè)對(duì)象的信息,并對(duì)這些信息進(jìn)行處理,獲得詳盡而準(zhǔn)確的信息,傳送給需要這些信息的用戶。傳感器網(wǎng)絡(luò)可以使人們?cè)谌魏螘r(shí)間、地點(diǎn)和任何環(huán)境條件下獲取大量詳實(shí)而可靠的信息,具有十分廣闊的應(yīng)用前景。
[0003]無(wú)線傳感網(wǎng)的發(fā)展非常迅速,這使得應(yīng)用在上面的軟件也越來(lái)越廣泛,伴隨的軟件驗(yàn)證問(wèn)題也越來(lái)越多。無(wú)線傳感網(wǎng)軟件規(guī)模越來(lái)越大,致使系統(tǒng)復(fù)雜性也愈來(lái)愈高,除此之外,在很多的不同應(yīng)用領(lǐng)域都對(duì)無(wú)線傳感網(wǎng)軟件有很高的性能要求。模型檢驗(yàn)技術(shù)為保證應(yīng)用于無(wú)限傳感器網(wǎng)絡(luò)中的軟件性能提供了新的思路,其在協(xié)議驗(yàn)證領(lǐng)域和硬件領(lǐng)域都獲得了很大的成功之后,也被用在有關(guān)軟件驗(yàn)證問(wèn)題的解決上。軟件相對(duì)于硬件有著較高的復(fù)雜性,其狀態(tài)空間規(guī)模也較大,有大量的學(xué)者致力于這方面的研究。為了及時(shí)地發(fā)現(xiàn)程序中潛在的問(wèn)題,已經(jīng)有人提出將模型檢驗(yàn)技術(shù)應(yīng)用到源代碼的分析中。建立模型和性質(zhì)檢驗(yàn)是模型檢驗(yàn)中的兩個(gè)重要的步驟,即第一步需要對(duì)待驗(yàn)證的軟件進(jìn)行建立模型,然后在通過(guò)窮盡搜索軟件系統(tǒng)狀態(tài)的方法來(lái)檢驗(yàn)性質(zhì)是否滿足。
[0004]模型檢驗(yàn)是一種自動(dòng)驗(yàn)證有窮狀態(tài)系統(tǒng)的技術(shù),最早是由Clarke和Emerson在1981年提出的,模型檢驗(yàn)方法可以在構(gòu)建系統(tǒng)前對(duì)系統(tǒng)的安全性和可靠性進(jìn)行驗(yàn)證,以盡早發(fā)現(xiàn)錯(cuò)誤。模型檢驗(yàn)實(shí)質(zhì)是利用計(jì)算機(jī)的快速計(jì)算能力,通過(guò)窮舉被檢驗(yàn)系統(tǒng)的狀態(tài)空間中的每一個(gè)狀態(tài)來(lái)驗(yàn)證該系統(tǒng)滿足特定的形式描述。在模型檢驗(yàn)中涉及兩種形式說(shuō)明語(yǔ)言:一種是用于描述系統(tǒng)模型的模型描述語(yǔ)言,一般使用狀態(tài)機(jī)進(jìn)行表示,另一種是用于描述系統(tǒng)性質(zhì)的性質(zhì)說(shuō)明語(yǔ)言,一般使用時(shí)序邏輯公式進(jìn)行表示。模型檢驗(yàn)的基本思想是用狀態(tài)遷移系統(tǒng)(S)表示系統(tǒng)的行為,用模態(tài)/時(shí)序邏輯公式(F)描述系統(tǒng)的性質(zhì),這樣“系統(tǒng)是否滿足所期望的性質(zhì)”就轉(zhuǎn)化為數(shù)學(xué)問(wèn)題“狀態(tài)遷移系統(tǒng)S是否公式F的一個(gè)模型”,用公式表示為S| = F?。對(duì)有窮狀態(tài)系統(tǒng),這個(gè)問(wèn)題是可判定的,即可以用計(jì)算機(jī)程序在有限時(shí)間內(nèi)自動(dòng)確定。模型檢驗(yàn)已被應(yīng)用于計(jì)算機(jī)硬件、通信協(xié)議、控制系統(tǒng)、安全認(rèn)證協(xié)議等方面的分析與驗(yàn)證中,取得了令人矚目的成功,并從學(xué)術(shù)界輻射到了產(chǎn)業(yè)界。
[0005]模型檢驗(yàn)提供一個(gè)完整的系統(tǒng)屬性驗(yàn)證框架,其優(yōu)點(diǎn)是模型檢驗(yàn)?zāi)苓_(dá)到完全自動(dòng)化的程度,只需用有窮狀態(tài)模型和邏輯公式分別將系統(tǒng)實(shí)現(xiàn)和待驗(yàn)證的系統(tǒng)規(guī)范描述出來(lái),之后的判斷過(guò)程則完全可以由模型檢驗(yàn)工具自動(dòng)完成,不需要人的參與;模型檢驗(yàn)過(guò)程總會(huì)以“是”或“否”的結(jié)果中止,當(dāng)以“否”的結(jié)果中止時(shí),說(shuō)明設(shè)計(jì)或系統(tǒng)不滿足某個(gè)給定的性質(zhì)。此時(shí)一個(gè)違反性質(zhì) 的行為反例將會(huì)被給出,此反例將對(duì)理解錯(cuò)誤的真正原因和修正錯(cuò)誤提供線索。利用模型檢驗(yàn)的優(yōu)點(diǎn),對(duì)無(wú)線傳感器網(wǎng)絡(luò)的軟件或協(xié)議進(jìn)行驗(yàn)證,找出其可能存在的威脅和隱患。
[0006]TinyOS操作系統(tǒng)是無(wú)線傳感網(wǎng)的主流操作系統(tǒng)。網(wǎng)絡(luò)協(xié)議、傳感器驅(qū)動(dòng)、分布式服務(wù)器及數(shù)據(jù)識(shí)別工具是組成TinyOS的四個(gè)主要部分。良好的事件執(zhí)行模型是促成良好的電源管理的主要因素,因此,該模型也使得時(shí)序安排具有靈活性。TinyOS已被應(yīng)用于TinyOS的感應(yīng)板和多個(gè)平臺(tái)中的,且軟件的應(yīng)用也有了一定程度的發(fā)展,這與TinyOS系統(tǒng)本身的特征如事件驅(qū)動(dòng)模式、組件化編程思想、輕量級(jí)線程技術(shù)以及主動(dòng)消息通信技術(shù)等密切相關(guān)。然而,在傳感器網(wǎng)絡(luò)系統(tǒng)的深入研究就會(huì)發(fā)現(xiàn),這些技術(shù)可以幫助提高傳感器網(wǎng)絡(luò)的性能,更充分發(fā)揮硬件的特性,降低其功耗,并簡(jiǎn)化應(yīng)用程序開(kāi)發(fā)過(guò)程。
[0007]NesC語(yǔ)言是對(duì)C語(yǔ)言的擴(kuò)展,但與C語(yǔ)言不同的是它是組件化的且它的工作執(zhí)行模式是基于事件驅(qū)動(dòng)的。NesC采用面向組件編程,并且支持在傳感網(wǎng)上的應(yīng)用開(kāi)發(fā)。TinyOS是一種新型操作系統(tǒng),它是由NesC語(yǔ)言編寫(xiě)的。大多數(shù)基于TinyOS操作系統(tǒng)的應(yīng)用軟件是用NesC,相比之前的編程語(yǔ)言NesC的傳感網(wǎng)的開(kāi)發(fā)和應(yīng)用更方便。組件和接口分別是NesC語(yǔ)言中兩個(gè)基礎(chǔ)的概念。組件可以提供接口,與此同時(shí),其他組件也可以使用這個(gè)組件的某些功能,其使用方法是通過(guò)引用相同接口聲明。不同的組件通過(guò)這種方式來(lái)實(shí)現(xiàn)組件間的相互調(diào)用。配件是組件的一種,配件實(shí)質(zhì)是用來(lái)描述不同組件接口之間的調(diào)用關(guān)系;模塊的組件另一種定義形式,其主要描述具體實(shí)現(xiàn),如組件中涉及到的接口定義等。以上就是NesC語(yǔ)言組件的兩種定義形式,其性質(zhì)和功能是不同的。而NesC中的接口與組件是不同的,它是組件的一個(gè)部分,接口可以理解為函數(shù),也可以是理解為發(fā)生的事件,或者是程序或系統(tǒng)的命令,組件是通過(guò)接口來(lái)實(shí)現(xiàn)組件之間的相互銜接和相互聯(lián)系。
【發(fā)明內(nèi)容】
[0008]技術(shù)問(wèn)題:本發(fā)明提出一種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法,該方法主要用來(lái)實(shí)現(xiàn)基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)代碼驗(yàn)證,緩解模型檢驗(yàn)中的狀態(tài)空間爆炸問(wèn)題。
[0009]技術(shù)方案:本發(fā)明所述的一種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法,該方法首先通過(guò)對(duì)無(wú)線傳感網(wǎng)軟件源代碼分析并建立動(dòng)態(tài)查找表,然后建立軟件模型,該模型是無(wú)線傳感網(wǎng)軟件源代碼的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的抽象,在此基礎(chǔ)上定義模型轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)軟件模型轉(zhuǎn)化向C語(yǔ)言的代碼轉(zhuǎn)化,最后使用有界模型檢驗(yàn)工具對(duì)轉(zhuǎn)化后的代碼進(jìn)行有界模型檢驗(yàn)。基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法具體步驟如下:
[0010]步驟1、對(duì)無(wú)線傳感網(wǎng)軟件源代碼中的每個(gè)節(jié)點(diǎn)進(jìn)行編號(hào),執(zhí)行程序,并根據(jù)執(zhí)行的順序記錄節(jié)點(diǎn)編號(hào)和代碼行;
[0011]步驟2、提取代碼的控制流結(jié)構(gòu),用控制流程圖描述程序各分支語(yǔ)句,并定義對(duì)應(yīng)模塊;
[0012]步驟3、建立動(dòng)態(tài)查找表,所述動(dòng)態(tài)查找表是步驟2中提取的控制流與所記錄代碼行的對(duì)應(yīng)關(guān)系;
[0013]步驟4、對(duì)無(wú)線傳感網(wǎng)軟件源代碼建立對(duì)應(yīng)的軟件模型,所述軟件模型是無(wú)線傳感網(wǎng)軟件源代碼的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的抽象,用來(lái)描述節(jié)點(diǎn)以及節(jié)點(diǎn)之間的遷移關(guān)系;軟件模型的建立是通過(guò)相應(yīng)的無(wú)線傳感網(wǎng)軟件建模工具來(lái)完成的,該過(guò)程描述網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)固定情況下的軟件模型;[0014]步驟5、判斷上述軟件模型的正確性,若模型正確,則執(zhí)行步驟8,反之執(zhí)行步驟6 ;
[0015]步驟6、等待一隨機(jī)時(shí)間,重新執(zhí)行程序;
[0016]步驟7、判斷所記錄的節(jié)點(diǎn)編號(hào)和代碼行與上次相比,是否發(fā)生變化,若發(fā)生變化,則返回步驟4,反之退出整個(gè)流程;
[0017]步驟8、對(duì)無(wú)線傳感網(wǎng)軟件模型靜態(tài)結(jié)構(gòu)進(jìn)行抽象:
[0018]步驟81)用三元組的形式表示軟件模型,設(shè)置無(wú)線傳感網(wǎng)軟件模型為m =(t, n, r), m表示無(wú)線傳感網(wǎng)軟件模型,t表示網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),η代表模型中的節(jié)點(diǎn),r表示節(jié)點(diǎn)之間的遷移;
[0019]步驟82)將三元組對(duì)應(yīng)源代碼的具體結(jié)構(gòu),通過(guò)動(dòng)態(tài)查找表將η對(duì)應(yīng)在代碼中是定義節(jié)點(diǎn)的結(jié)構(gòu)體,r對(duì)應(yīng)在不同模塊之間的調(diào)用關(guān)系;
[0020]步驟9、對(duì)無(wú)線傳感網(wǎng)軟件模型的動(dòng)態(tài)行為進(jìn)行模擬分析,用來(lái)確定節(jié)點(diǎn)之間的調(diào)用關(guān)系以及執(zhí)行順序,啟動(dòng)模擬器,使用模擬器模擬無(wú)線傳感網(wǎng)軟件模型的動(dòng)態(tài)行為獲取各節(jié)點(diǎn)函數(shù)的執(zhí)行關(guān)系并記錄;啟動(dòng)驗(yàn)證器,執(zhí)行對(duì)模型的正確性分析與驗(yàn)證來(lái)實(shí)現(xiàn)對(duì)無(wú)線傳感網(wǎng)軟件的分析;
[0021]步驟10、定義模型轉(zhuǎn)換規(guī)則,所述模型轉(zhuǎn)化規(guī)則是由用戶定義的模型與目標(biāo)語(yǔ)言之間的映射關(guān)系,根據(jù)這些關(guān)系將模型中的各個(gè)部分轉(zhuǎn)化為目標(biāo)代碼的形式之后,進(jìn)行有界模型檢驗(yàn);用戶定義模型轉(zhuǎn)換規(guī)則的過(guò)程為:首先,定義節(jié)點(diǎn)轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)節(jié)點(diǎn)到目標(biāo)代碼的轉(zhuǎn)換;其次,定義節(jié)點(diǎn)遷移的轉(zhuǎn)換規(guī)則,將節(jié)點(diǎn)之間的調(diào)用關(guān)系對(duì)應(yīng)到目標(biāo)代碼;
[0022]步驟11、根據(jù)步驟10中定義的模型轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)模型到目標(biāo)代碼的轉(zhuǎn)換,所述轉(zhuǎn)換過(guò)程是將模型中的各個(gè)結(jié)構(gòu)對(duì)應(yīng)于模型轉(zhuǎn)換規(guī)則,通過(guò)模型轉(zhuǎn)換規(guī)則中的定義實(shí)現(xiàn)目標(biāo)代碼;
[0023]步驟12、對(duì)轉(zhuǎn)換后的目標(biāo)代碼進(jìn)行有界模型檢驗(yàn),所述有界模型檢驗(yàn)的過(guò)程是使用有界模型檢驗(yàn)工具對(duì)轉(zhuǎn)換后的目標(biāo)代碼進(jìn)行有界模型檢驗(yàn),實(shí)現(xiàn)無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證,緩解模型檢驗(yàn)中的狀態(tài)空間爆炸問(wèn)題。
[0024]有益效果:本發(fā)明所述的一種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法,分析與應(yīng)用相關(guān)的軟件是否滿足要求,分析能力強(qiáng)、可讀性高,能盡早發(fā)現(xiàn)軟件存在的缺陷和不正確性,其采用的形式化方法可以驗(yàn)證復(fù)雜系統(tǒng)。具體來(lái)說(shuō),本發(fā)明所述的方法具有如下的有益效果:
[0025]1、本發(fā)明所述的種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法包括對(duì)無(wú)線傳感網(wǎng)軟件進(jìn)行源代碼建模、對(duì)所得到的軟件模型進(jìn)行靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的分析、定義模型轉(zhuǎn)換規(guī)則實(shí)現(xiàn)模型到目標(biāo)語(yǔ)言的轉(zhuǎn)化、使用有界模型檢驗(yàn)工具進(jìn)行有界模型檢驗(yàn)。
[0026]2、本發(fā)明所述對(duì)無(wú)線傳感網(wǎng)軟件進(jìn)行源代碼建模使用相應(yīng)的建模工具進(jìn)行建模,該過(guò)程的實(shí)現(xiàn)是自動(dòng)化實(shí)現(xiàn)的,可以保證無(wú)線傳感網(wǎng)軟件模型的正確性。
[0027]3、本發(fā)明所述的對(duì)無(wú)線傳感網(wǎng)軟件的模型分析包括靜態(tài)結(jié)構(gòu)分析和動(dòng)態(tài)行為分析,靜態(tài)結(jié)構(gòu)的分析主要用于確定模型中的節(jié)點(diǎn)以及節(jié)點(diǎn)之間的遷移關(guān)系,動(dòng)態(tài)行為模擬分析用于確定模型中的節(jié)點(diǎn)的調(diào)用順序以及節(jié)點(diǎn)執(zhí)行關(guān)系。
[0028]4、本發(fā)明所述的對(duì)無(wú)線傳感網(wǎng)軟件的模型轉(zhuǎn)換規(guī)則是無(wú)線傳感網(wǎng)軟件模型到目標(biāo)代碼的映射關(guān)系,根據(jù)模型轉(zhuǎn)換規(guī)則,可以實(shí)現(xiàn)軟件模型向目標(biāo)代碼的轉(zhuǎn)化,進(jìn)而進(jìn)行有界模型檢驗(yàn)。[0029]5、本發(fā)明所述的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法是基于有界模型檢驗(yàn)的,該方法是通過(guò)有界的方法來(lái)緩解狀態(tài)空間爆炸問(wèn)題。
【專利附圖】
【附圖說(shuō)明】
[0030]圖1是基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證過(guò)程流程圖,
[0031]圖2是BlinktoRadio程序的部分靜態(tài)分析圖。
【具體實(shí)施方式】
[0032]下面對(duì)本發(fā)明附圖的某些實(shí)施例作更詳細(xì)的描述。
[0033]根據(jù)圖1,本發(fā)明所述的是一種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證過(guò)程,該方法建立在模型檢驗(yàn)技術(shù)的基礎(chǔ)上,將算法應(yīng)用在無(wú)線傳感網(wǎng)中的BlinkToRadio協(xié)議上,并借助建模工具NesClgPAT和有界模型檢驗(yàn)工具CBMC。協(xié)議源代碼是NesC語(yǔ)言,目標(biāo)代碼是C語(yǔ)言?!揪唧w實(shí)施方式】為:
[0034]1、給BlinkToRadio源代碼中每個(gè)節(jié)點(diǎn)進(jìn)行編號(hào),且保證每個(gè)節(jié)點(diǎn)的編號(hào)是唯一的,執(zhí)行程序,并記錄BlinkToRadio在執(zhí)行過(guò)程中的節(jié)點(diǎn)編號(hào)和代碼行。
[0035]2、提取BlinkToRadio代碼的控制流,用控制流程圖描述程序各分支語(yǔ)句,并定義對(duì)應(yīng)模塊,建立動(dòng)態(tài)查找表,該動(dòng)態(tài)查找表記錄BlinkToRadio代碼控制流與所記錄代碼行的對(duì)應(yīng)關(guān)系。
[0036]3、建立BlinkToRadio的軟件模型,所述BlinkToRadio軟件模型是由傳感器節(jié)點(diǎn)以及網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)共同組成。判斷該模型正確后,將無(wú)線傳感網(wǎng)軟件模型表示為Hl =(t, n, r)三元組的形式表示無(wú)線傳感網(wǎng)軟件模型,t表示網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),這里是指Ring結(jié)構(gòu),η為BlinkToRadio模型中的節(jié)點(diǎn),r表示節(jié)點(diǎn)之間的遷移。
[0037]4、對(duì)所得的BlinkToRadio軟件模型進(jìn)行分析。
[0038]41)軟件模型靜態(tài)結(jié)構(gòu)的分析。模型靜態(tài)結(jié)構(gòu)中的節(jié)點(diǎn)以及相應(yīng)的連接關(guān)系與源代碼的是一致的。所述的靜態(tài)結(jié)構(gòu)分析是指從編程語(yǔ)言本身出發(fā),確定程序結(jié)構(gòu)。BlinkToRadio是無(wú)線傳感網(wǎng)一個(gè)的應(yīng)用程序,其實(shí)現(xiàn)部分主要包含了三個(gè)節(jié)點(diǎn)、一個(gè)定時(shí)器、一個(gè)計(jì)數(shù)值,發(fā)送計(jì)數(shù)值,用NesC編寫(xiě)的BlinkToRadio包含了三個(gè)子文件分別為BlinkToRadioC.nc、BlinkToRadi0.h、BlinkToRadioAppC.nc。BlinkToRadioC.nc 如圖 2。
[0039]42)軟件動(dòng)態(tài)行為的模擬分析,用來(lái)確定節(jié)點(diǎn)之間的調(diào)用關(guān)系以及執(zhí)行順序。所述BlinkToRadio動(dòng)態(tài)行為主要包含三個(gè)部分分別是建模、執(zhí)行分析和報(bào)告結(jié)果?;谀P蜋z驗(yàn)的無(wú)線傳感網(wǎng)軟件源代碼分析是通過(guò)對(duì)無(wú)線傳感網(wǎng)軟件源代碼建模來(lái)實(shí)現(xiàn)軟件的分析,并通過(guò)對(duì)模型的正確性分析與驗(yàn)證來(lái)實(shí)現(xiàn)對(duì)軟件的分析。對(duì)無(wú)線傳感網(wǎng)軟件源代碼的建模是基于工具NesOgPAT的,該工具能實(shí)現(xiàn)NesC代碼的編輯以及詞法分析、語(yǔ)法分析等。
[0040]5、定義模型轉(zhuǎn)換規(guī)則。所述模型轉(zhuǎn)化規(guī)則是定義模型與目的語(yǔ)言之間的映射關(guān)系,將模型中的各個(gè)部分轉(zhuǎn)化為目的代碼的形式,從而進(jìn)行有界模型檢驗(yàn)。
[0041]51)模型中節(jié)點(diǎn)的接口轉(zhuǎn)換規(guī)則。接口具有雙重的性質(zhì),它能夠描述兩種不同的函數(shù),其中一種是接口的提供者提供的函數(shù),另一種是在接口的使用者所實(shí)現(xiàn)的函數(shù)。該內(nèi)容在C語(yǔ)言中則為函數(shù)的定義,定義了不同對(duì)象之間的信息的發(fā)送與接收。
[0042]52)模型中節(jié)點(diǎn)的組件轉(zhuǎn)換規(guī)則。其主要是利用接口與其他組件相互連接,這種連接是一種靜態(tài)連接,此方法有利于對(duì)程序進(jìn)行靜態(tài)分析,同時(shí)也會(huì)增加程序運(yùn)行時(shí)的效率。在C語(yǔ)言中不同的組件則為不同的結(jié)構(gòu)體,其可以采用結(jié)構(gòu)體的形式表達(dá)。
[0043]53)模型中節(jié)點(diǎn)的模塊轉(zhuǎn)換規(guī)則。它模塊中主要包含了模塊使用和提供的接口描述以及模塊內(nèi)部的實(shí)現(xiàn)代碼兩大部分,其實(shí)現(xiàn)部分一般為C語(yǔ)言,其聲明部分則是自己模塊內(nèi)的函數(shù)聲明以及所需調(diào)用的其他模塊內(nèi)的函數(shù)的聲明的集合。
[0044]54)模型中節(jié)點(diǎn)的配置轉(zhuǎn)換規(guī)則。其可以映射為C語(yǔ)言中不同模塊之間的調(diào)用關(guān)系,配置文件在C語(yǔ)言中不必單獨(dú)存在,其調(diào)用關(guān)系可以通過(guò)不同模塊中的函數(shù)調(diào)用來(lái)實(shí)現(xiàn)。
[0045]55)模型中節(jié)點(diǎn)的命令轉(zhuǎn)換規(guī)則。命令是一種函數(shù),其關(guān)鍵字為co_and。command的實(shí)現(xiàn)是通過(guò)接口的提供者來(lái)完成的,其調(diào)用過(guò)程是由接口的使用者完成。command的語(yǔ)法結(jié)構(gòu)與C語(yǔ)言是一致的,在C語(yǔ)言所定義函數(shù)前面加關(guān)鍵字co_and,它實(shí)現(xiàn)可調(diào)用的命令,接口可以調(diào)用這些命令。
[0046]56)模型中節(jié)點(diǎn)的事件轉(zhuǎn)換規(guī)則。事件也是一種函數(shù),它是在程序的接口中定義的,其關(guān)鍵字為event。此函數(shù)與C語(yǔ)言一致,其定義中可以有函數(shù)參數(shù)、返回值等,它要求調(diào)用過(guò)程是由接口的提供者完成,實(shí)現(xiàn)是由接口的使用者來(lái)完成,在定義中前面須加關(guān)鍵字 event ο
[0047]57) Sensorl.App.call.AMControl.start O 是節(jié)點(diǎn) Sensorl 的初始化函數(shù),節(jié)點(diǎn)被喚醒時(shí)需要調(diào)用此函數(shù),將其轉(zhuǎn)換為C語(yǔ)言中節(jié)點(diǎn)的變量初始值函數(shù),其執(zhí)行功能與C++中的構(gòu)造函數(shù)等同。
[0048]58)#assert語(yǔ)句是模型的動(dòng)態(tài)執(zhí)行分析的判定語(yǔ)句,它用LTL語(yǔ)言描述。語(yǔ)句#assert SensorNetwork = [] (Sensorl.send-><> (Sensor2.rcv_msg));該語(yǔ)句具體解釋為Sensorl節(jié)點(diǎn)發(fā)送消息,判斷Sensor2是否接收。C語(yǔ)言支持assert O函數(shù),把需要判定的內(nèi)容以變量表達(dá)作為assert O函數(shù)的參數(shù)來(lái)判定。
[0049]6、根據(jù)模型轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)模型到目標(biāo)代碼的轉(zhuǎn)換。所述轉(zhuǎn)換是將模型中的各個(gè)結(jié)構(gòu)對(duì)應(yīng)于模型轉(zhuǎn)換規(guī)則,通過(guò)模型轉(zhuǎn)換規(guī)則中的定義實(shí)現(xiàn)目標(biāo)代碼。
[0050]7、對(duì)轉(zhuǎn)換后的目標(biāo)代碼進(jìn)行有界模型檢驗(yàn)。所述有界模型檢驗(yàn)的過(guò)程是使用有界模型檢驗(yàn)工具CBMC對(duì)轉(zhuǎn)換后的BlinkToRadio目標(biāo)代碼進(jìn)行有界模型檢驗(yàn),實(shí)現(xiàn)無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證,緩解模型檢驗(yàn)中的狀態(tài)空間爆炸問(wèn)題。
【權(quán)利要求】
1.一種基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法,其特征在于該方法首先通過(guò)對(duì)無(wú)線傳感網(wǎng)軟件源代碼分析并建立動(dòng)態(tài)查找表,然后建立軟件模型,該模型是無(wú)線傳感網(wǎng)軟件源代碼的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的抽象,在此基礎(chǔ)上定義模型轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)軟件模型轉(zhuǎn)化向C語(yǔ)言的代碼轉(zhuǎn)化,最后使用有界模型檢驗(yàn)工具對(duì)轉(zhuǎn)化后的代碼進(jìn)行有界模型檢驗(yàn),基于有界模型檢驗(yàn)的無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證方法具體步驟如下: 步驟1、對(duì)無(wú)線傳感網(wǎng)軟件源代碼中的每個(gè)節(jié)點(diǎn)進(jìn)行編號(hào),執(zhí)行程序,并根據(jù)執(zhí)行的順序記錄節(jié)點(diǎn)編號(hào)和代碼行; 步驟2、提取代碼的控制流結(jié)構(gòu),用控制流程圖描述程序各分支語(yǔ)句,并定義對(duì)應(yīng)模塊; 步驟3、建立動(dòng)態(tài)查找表,所述動(dòng)態(tài)查找表是步驟2中提取的控制流與所記錄代碼行的對(duì)應(yīng)關(guān)系; 步驟4、對(duì)無(wú)線傳感網(wǎng)軟件源代碼建立對(duì)應(yīng)的軟件模型,所述軟件模型是無(wú)線傳感網(wǎng)軟件源代碼的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的抽象,用來(lái)描述節(jié)點(diǎn)以及節(jié)點(diǎn)之間的遷移關(guān)系;軟件模型的建立是通過(guò)相應(yīng)的無(wú)線傳感網(wǎng)軟件建模工具來(lái)完成的,該過(guò)程描述網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)固定情況下的軟件模型; 步驟5、判斷上述軟件模型的正確性,若模型正確,則執(zhí)行步驟8,反之執(zhí)行步驟6 ; 步驟6、等待一隨機(jī)時(shí)間,重新執(zhí)行程序; 步驟7、判斷所記錄的節(jié)點(diǎn)編號(hào)和代碼行與上次相比,是否發(fā)生變化,若發(fā)生變化,則返回步驟4,反之退出整個(gè)流程; 步驟8、對(duì)無(wú)線傳感網(wǎng)軟件模型靜態(tài)結(jié)構(gòu)進(jìn)行抽象: 步驟81)用三元組的形式表示軟件模型,設(shè)置無(wú)線傳感網(wǎng)軟件模型為m= (t,n,r),m表示無(wú)線傳感網(wǎng)軟件模型,t表示網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),η代表模型中的節(jié)點(diǎn),r表示節(jié)點(diǎn)之間的遷移; 步驟82)將三元組對(duì)應(yīng)源代碼的具體結(jié)構(gòu),通過(guò)動(dòng)態(tài)查找表將η對(duì)應(yīng)在代碼中是定義節(jié)點(diǎn)的結(jié)構(gòu)體,r對(duì)應(yīng)在不同模塊之間的調(diào)用關(guān)系; 步驟9、對(duì)無(wú)線傳感網(wǎng)軟件模型的動(dòng)態(tài)行為進(jìn)行模擬分析,用來(lái)確定節(jié)點(diǎn)之間的調(diào)用關(guān)系以及執(zhí)行順序,啟動(dòng)模擬器,使用模擬器模擬無(wú)線傳感網(wǎng)軟件模型的動(dòng)態(tài)行為獲取各節(jié)點(diǎn)函數(shù)的執(zhí)行關(guān)系并記錄;啟動(dòng)驗(yàn)證器,執(zhí)行對(duì)模型的正確性分析與驗(yàn)證來(lái)實(shí)現(xiàn)對(duì)無(wú)線傳感網(wǎng)軟件的分析; 步驟10、定義模型轉(zhuǎn)換規(guī)則,所述模型轉(zhuǎn)化規(guī)則是由用戶定義的模型與目標(biāo)語(yǔ)言之間的映射關(guān)系,根據(jù)這些關(guān)系將模型中的各個(gè)部分轉(zhuǎn)化為目標(biāo)代碼的形式之后,進(jìn)行有界模型檢驗(yàn);用戶定義模型轉(zhuǎn)換規(guī)則的過(guò)程為:首先,定義節(jié)點(diǎn)轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)節(jié)點(diǎn)到目標(biāo)代碼的轉(zhuǎn)換;其次,定義節(jié)點(diǎn)遷移的轉(zhuǎn)換規(guī)則,將節(jié)點(diǎn)之間的調(diào)用關(guān)系對(duì)應(yīng)到目標(biāo)代碼; 步驟11、根據(jù)步驟10中定義的模型轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)模型到目標(biāo)代碼的轉(zhuǎn)換,所述轉(zhuǎn)換過(guò)程是將模型中的各個(gè)結(jié)構(gòu)對(duì)應(yīng)于模型轉(zhuǎn)換規(guī)則,通過(guò)模型轉(zhuǎn)換規(guī)則中的定義實(shí)現(xiàn)目標(biāo)代碼; 步驟12、對(duì)轉(zhuǎn)換后的目標(biāo)代碼進(jìn)行有界模型檢驗(yàn),所述有界模型檢驗(yàn)的過(guò)程是使用有界模型檢驗(yàn)工具對(duì)轉(zhuǎn)換后的目標(biāo)代碼進(jìn)行有界模型檢驗(yàn),實(shí)現(xiàn)無(wú)線傳感網(wǎng)軟件代碼驗(yàn)證,緩解模型檢驗(yàn)中的狀態(tài)空間爆炸問(wèn)題。
【文檔編號(hào)】G06F11/36GK103970652SQ201410179163
【公開(kāi)日】2014年8月6日 申請(qǐng)日期:2014年4月29日 優(yōu)先權(quán)日:2014年4月29日
【發(fā)明者】陳志 , 岳書(shū)珍, 岳文靜, 王東, 黨凱樂(lè), 陳駿, 朱彥沛, 高陽(yáng)陽(yáng), 高顯強(qiáng) 申請(qǐng)人:南京郵電大學(xué)