專利名稱:驗(yàn)證目標(biāo)程序的驗(yàn)證規(guī)范的產(chǎn)生裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到一種裝置,用于產(chǎn)生對(duì)驗(yàn)證目標(biāo)程序進(jìn)行驗(yàn)證的^規(guī) 范,以及產(chǎn)生所述驗(yàn)證規(guī)范的方法。
背景技術(shù):
在用于探測(cè)計(jì)算機(jī)程序中的邏輯錯(cuò)誤的驗(yàn)證技術(shù)中,有一種稱作類(lèi)型 狀態(tài)JiHi的眾所周知的技術(shù)。類(lèi)型狀態(tài)mi包括輸入發(fā)汪對(duì)象的程序代碼和由用戶所描述的mt規(guī)范,在不執(zhí)行程序的情況下進(jìn)行^iit。順便提及, 作為相關(guān)的文件,可以參考非專利文件l和非專利文件2,其中,非專利文件1為 "Checking system rules using SystemSpecific, Programmer-written compiler extensions (4吏用程序員編寫(xiě)的編譯器擴(kuò)展 "SystemSpecific"對(duì)系統(tǒng)規(guī)則進(jìn)行檢查)"in Proceedings of the Fourth Symposium on Operating Systems Design and Implementation (關(guān)于操作 系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)的笫四次會(huì)議的文集),San Diego, CA, October 200 (Dawson Engler, Benjamin Chief, Andy Chou, and Seth Hallem),非專利文 件2為"Esp: Pathsensitive program verification in polynomial time (多項(xiàng) 式時(shí)間中的路徑敏感的程序^iit) ,, in Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation(關(guān) 于編程語(yǔ)言的i殳計(jì)和實(shí)現(xiàn)的ACM SIGPLAN 2002 ^i義的文集)(Manuvir Das, Sorin Lerner, and Mark Seigle)。用于類(lèi)型狀態(tài)驗(yàn)汪的驗(yàn)證規(guī)范是將程序代碼中出現(xiàn)的對(duì)象變量的狀態(tài) 變化抽象成有限狀態(tài)機(jī)的一種JlHt規(guī)范。用于類(lèi)型狀態(tài)發(fā)汪的發(fā)汪算法如 下。即,有限狀態(tài)機(jī)在搜尋程序代碼的控制流圖時(shí)根據(jù)對(duì)用戶指定的對(duì)象變量所進(jìn)行的操作來(lái)做出轉(zhuǎn)換,并檢查是否存在到無(wú)效狀態(tài)的轉(zhuǎn)換,其中, 如果存在到無(wú)效狀態(tài)的轉(zhuǎn)換,那么轉(zhuǎn)換路徑就被顯示為反例。類(lèi)型狀態(tài)!HiL有幾個(gè)優(yōu)點(diǎn)它直接^^呈序代碼為發(fā)汪目標(biāo),不需要執(zhí) 行程序,并且它檢查程序的所有可能的執(zhí)行路徑。另一方面,類(lèi)型狀態(tài)驗(yàn) 證的不利之處在于,會(huì)給出關(guān)于實(shí)際上不可行的路徑的錯(cuò)誤報(bào)告(假的反 例),因?yàn)槌绦虼a中的變量值或分支目標(biāo)被處理為未決定的(unsettled), 并且驗(yàn)證結(jié)果是不正確的。在做類(lèi)型狀態(tài)驗(yàn)證時(shí),要求用戶正確地描述有限狀態(tài)機(jī),其中,對(duì)要 驗(yàn)證的對(duì)象變量的內(nèi)部狀態(tài)進(jìn)行抽象。如果通過(guò)描述大的程序代碼的!Hit 規(guī)范來(lái)進(jìn)行類(lèi)型狀態(tài)驗(yàn)證,那么會(huì)出現(xiàn)下列情形。1. 多個(gè)不同的對(duì)象經(jīng)常做類(lèi)似的狀態(tài)轉(zhuǎn)換,其中,如果單個(gè)地描述驗(yàn) 證規(guī)范,那么大量的描述就會(huì)重復(fù)。2. 如果有限狀態(tài)機(jī)中的狀態(tài)數(shù)很大,那么m難沒(méi)有4W地描述a^t規(guī)范。3. 很難判斷類(lèi)型狀態(tài)驗(yàn)證中所報(bào)告的反例是否實(shí)際上發(fā)生了 。 本發(fā)明提供一種產(chǎn)生程序IHit規(guī)范的裝置、方法以及程序,它們至少具有下列優(yōu)點(diǎn)之一,即,盡可能地節(jié)省g規(guī)范的描述量、減少?gòu)?fù)雜^ 規(guī)范中的發(fā)溪以及減少假反例。發(fā)明內(nèi)容根據(jù)本發(fā)明的一個(gè)方面,提供一種裝置,該裝置產(chǎn)生^i規(guī)范以g 包含對(duì)一個(gè)或多個(gè)對(duì)象進(jìn)行操作的函數(shù)的驗(yàn)證目標(biāo)程序,該裝置包括 第一輸入單元,配置為用來(lái)輸入描述第一有P艮狀態(tài)機(jī)的第一規(guī)范,所述第一有限狀態(tài)機(jī)定義由于事件的發(fā)生而導(dǎo)致的多個(gè)狀態(tài)之間的轉(zhuǎn)換; 第二輸入單元,配置為用來(lái)輸入笫二規(guī)范,所述第二規(guī)范為第一對(duì)象類(lèi)型描述了對(duì)具有所述第 一對(duì)象類(lèi)型的對(duì)象進(jìn)行操作的函數(shù)與所述第 一有 限狀態(tài)機(jī)中的事件之間的對(duì)應(yīng);以及驗(yàn)證規(guī)范產(chǎn)生單元,配置為用來(lái)通過(guò)合成所述第一和第二規(guī)范來(lái)產(chǎn)生用于對(duì)所述驗(yàn)證目標(biāo)程序進(jìn)行驗(yàn)證的^規(guī)范,所述驗(yàn)證規(guī)范描述了第二 有限狀態(tài)機(jī),所述第二有限狀態(tài)機(jī)定義了由于調(diào)用對(duì)具有所述第一對(duì)象類(lèi) 型的所述對(duì)象進(jìn)行操作的函數(shù)而導(dǎo)致的具有所述第 一對(duì)象類(lèi)型的所述對(duì)象 的各狀態(tài)之間的轉(zhuǎn)換。根據(jù)本發(fā)明的一個(gè)方面,提供一種方法,該方法用來(lái)產(chǎn)生B規(guī)范以發(fā)伍包含對(duì)一個(gè)或多個(gè)對(duì)象進(jìn)行操作的函數(shù)的發(fā)汪目標(biāo)程序,該方法包括 輸入描述第 一有限狀態(tài)機(jī)的第一規(guī)范,所述第一有限狀態(tài)機(jī)定義由于事件的發(fā)生而導(dǎo)致的多個(gè)狀態(tài)之間的轉(zhuǎn)換;輸入第二規(guī)范,所述第二規(guī)范為第一對(duì)象類(lèi)型描述了對(duì)具有所述第一對(duì)象類(lèi)型的對(duì)象進(jìn)行操作的函數(shù)與所述第 一有限狀態(tài)機(jī)中的所述事件之間的對(duì)應(yīng);以及通過(guò)合成所述第一和第二規(guī)范來(lái)產(chǎn)生對(duì)所述驗(yàn)證目標(biāo)程序進(jìn)行驗(yàn)證的 驗(yàn)證規(guī)范,所述驗(yàn)證規(guī)范描述了第二有限狀態(tài)機(jī),所述第二有限狀態(tài)機(jī)定 義了由于調(diào)用對(duì)具有所述第一對(duì)象類(lèi)型的所述對(duì)象進(jìn)行操作的函數(shù)而導(dǎo)致 的具有所述第一對(duì)象類(lèi)型的所述對(duì)象的各狀態(tài)之間的轉(zhuǎn)換。
圖l是一個(gè)方框圖,顯示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的具有程序^ 規(guī)范合成設(shè)備的程序驗(yàn)證裝置;圖2是流程圖,示意地顯示了圖1中的程序驗(yàn)證裝置的操作;圖3是一個(gè)方框圖,顯示了程序mt規(guī)范合成設(shè)備(規(guī)范合成單元) 的詳細(xì)配置;圖4顯示了抽象規(guī)范和具體規(guī)范之間的關(guān)系;圖5說(shuō)明了抽象規(guī)范(文件、互斥鎖);圖6顯示了抽象規(guī)范的轉(zhuǎn)換表(fsm對(duì)象);圖7顯示了抽象規(guī)范的轉(zhuǎn)換表(fsm互斥鎖(mutex));圖8顯示了斷言表達(dá)式的真值表;圖9顯示了關(guān)于有限狀態(tài)機(jī)的轉(zhuǎn)換表(沒(méi)有考慮斷言表達(dá)式);圖IO顯示了關(guān)于有限狀態(tài)機(jī)的轉(zhuǎn)換表(考慮了斷言表達(dá)式); 圖11顯示了具體規(guī)范的對(duì)應(yīng)關(guān)系表; 圖12說(shuō)明了常規(guī)的程序驗(yàn)證; 圖13顯示了控制流圖的例子;圖14說(shuō)明了類(lèi)型狀態(tài)驗(yàn)證的一個(gè)操作例子(mutex_checkl); 圖15說(shuō)明了類(lèi)型狀態(tài)驗(yàn)證的一個(gè)操作例子(mutex—check2 ); 圖16顯示了與常規(guī)的 規(guī)范1相對(duì)應(yīng)的有限狀態(tài)機(jī)(^規(guī)范);以及圖17顯示了與常規(guī)的mit規(guī)范2相對(duì)應(yīng)的有限狀態(tài)機(jī)(^iE規(guī)范)。
具體實(shí)施方式
首先,簡(jiǎn)短地舉例說(shuō)明常規(guī)的類(lèi)型狀態(tài)驗(yàn)證(type state verification ), 之后描述本發(fā)明所提出的方案。圖12用來(lái)說(shuō)明常規(guī)的類(lèi)型狀態(tài)驗(yàn)證(參見(jiàn)非專利文件l)。 將驗(yàn)證規(guī)范(verification specification) 101和驗(yàn)證目標(biāo)程序 (verification target program )(即要驗(yàn)證的程序)102輸入程序驗(yàn)證裝置103中。程序^ii裝置103根據(jù)類(lèi)型狀態(tài)mit算法進(jìn)行mi,并輸出 £結(jié)果104。 ^i規(guī)范101由某種特定語(yǔ)言X來(lái)描述,程序驗(yàn)證裝置103只 能對(duì)用該特定語(yǔ)言X描述的4Hit規(guī)范進(jìn)行解釋。例1給出了驗(yàn)證目標(biāo)程序。例1對(duì)包括作為狀態(tài)變量的文件變量f、互 斥鎖(mutual exclusion locks) m和整數(shù)x的變量進(jìn)4亍開(kāi)始操作,重復(fù)地 進(jìn)行文件的讀和寫(xiě),然后對(duì)變量進(jìn)行結(jié)束操作以結(jié)束程序。"*"和"…" 項(xiàng)表示對(duì)布爾表達(dá)式和用于文件操作的一些參數(shù)的替代。例l:驗(yàn)證對(duì)象—一 file f; 〃文件 mutex m; 〃互斥鎖 int x;f.fopen("text.txt,,);m.init();while (*) {m.lock(》if(*){x=f.read(...);else {x-f.write(…); if (x<0) break;m.unlock()f.fclose(); m.destroy(》例2給出了mt規(guī)范(驗(yàn)證規(guī)范1) 。 mit規(guī)范1定義了提供互斥鎖 的使用方法的有限狀態(tài)機(jī)(finite state machine )。有限狀態(tài)機(jī)的結(jié)構(gòu)如圖 16所示。這個(gè)規(guī)范(名稱mutex—checkl)用符號(hào)"v"來(lái)指代程序變量 類(lèi)型"{mutex}"的抽象狀態(tài)。狀態(tài)變量'V,是程序中變量的出現(xiàn)(occurrence of variable),其初始狀態(tài)為"開(kāi)始",并從"開(kāi)始"轉(zhuǎn)換為未定義狀態(tài) "v.under 。如果調(diào)用開(kāi)始操作"v.init()",那么變量"v"就轉(zhuǎn)換為初始 化狀態(tài)v.valid。類(lèi)似地,也描述了狀態(tài)v.undef和v.valid之間的轉(zhuǎn)換。如 果轉(zhuǎn)換的終點(diǎn)(transition destination)為(err(…》,那么該狀態(tài)就被規(guī)定 為無(wú)效。就是說(shuō),這個(gè)^規(guī)范1禁止在開(kāi)始操作之前控制直斥鎖。
規(guī)范1的描述中所包含的豎線T表示"or (OR)"。例如,在未定義 狀態(tài)"v.under中,如果調(diào)用v.init(),那么狀態(tài)就轉(zhuǎn)換為初始化狀態(tài)v.valid, 而如果調(diào)用v.call(args),那么狀態(tài)就變?yōu)闊o(wú)效(invalid)?!?:驗(yàn)證規(guī)范1—-sm mutex_checkl { state decl {mutex} v; decl any_fn_call call; decl any_args args; start:{v}==>v.undef; v.undef:{v.init( )} ==>v. valid |{v.call(args)} ==>{err("l")}; v. valid:(v.lock( )} =>v.valid I {v.unlock( )} ==>v.valid |{v.destroy( )} ==>v.undef |{v.call(args)} ==>{err("2")};在圖12的程序驗(yàn)證裝置X中,根據(jù)眾所周知的步驟,將例1中所示 的B目標(biāo)程序轉(zhuǎn)換為圖13所示的控制流圖??刂屏鲌D中的每個(gè)基本方框 都是最大代碼(maximum code),不包括程序的分支和合并。各基本方框 由指明分支目標(biāo)的有方向的邊(directed edge)來(lái)連接。程序驗(yàn)證裝置X 按可執(zhí)行的順序搜尋控制流圖,每次互斥鎖m出現(xiàn)時(shí),就使!Hi規(guī)范1中 定義的有限狀態(tài)機(jī)轉(zhuǎn)換。圖14顯示了一個(gè)例子,其中,在每個(gè)基本方框的入口和出口處記錄有 可達(dá)到的狀態(tài)。"U"是未定義狀態(tài)"under的縮寫(xiě),"V"是初始化狀 態(tài)"v.valid"的縮寫(xiě)。在這個(gè)例子中,沒(méi)有探測(cè)到無(wú)效轉(zhuǎn)換。作為更詳細(xì)的g規(guī)范,例3中顯示了考慮了互斥鎖的鎖定狀態(tài)的驗(yàn) 證規(guī)范2。這個(gè)驗(yàn)證規(guī)范2定義了具有圖17所示結(jié)構(gòu)的有限狀態(tài)機(jī)。圖15顯示了一個(gè)例子,其中,產(chǎn)生了控制流圖,并且在例3中以與上勤目同的 方式在每個(gè)基本方框的入口和出口處記錄著可達(dá)到的狀態(tài)。"L"是鎖定 狀態(tài)"v.locked,,的簡(jiǎn)寫(xiě)。在圖15的例子中有一條路徑,其中,在鎖定狀 態(tài)"v.locked"中執(zhí)行結(jié)束處理"v.destroy()",并且所述狀態(tài)被確定為無(wú) 效。例3:驗(yàn)證規(guī)范2<formula>formula see original document page 11</formula>如果希望在開(kāi)始操作之前檢查文件的入口,那么,通過(guò)在例2的M 規(guī)范l中用"阿,,替代"{mutex}"并且用"v平n()"替代"v.init()" 可以產(chǎn)生驗(yàn)證規(guī)范。這樣,在常規(guī)的a規(guī)范l和2中,在同一規(guī)范描述中同時(shí)描述了有 限狀態(tài)機(jī)的定義以及與程序?qū)?yīng)(與變量對(duì)應(yīng)、與函數(shù)對(duì)應(yīng))的定義。在這個(gè)實(shí)施例中,以抽象規(guī)范和具體規(guī)范來(lái)描述^規(guī)范。因此,抽 象規(guī)范可以被共享。具體說(shuō),在抽象規(guī)范中,有限狀態(tài)機(jī)由多個(gè)狀態(tài)、多 個(gè)事件、以及由于事件的發(fā)生而導(dǎo)致的各狀態(tài)之間的轉(zhuǎn)換來(lái)定義,如圖4 所示。另外,在具體規(guī)范中,描述了由抽象規(guī)范定義的有限狀態(tài)機(jī)和!HiE 目標(biāo)程序中的程序變量(對(duì)象)的Type(類(lèi)型)之間的對(duì)應(yīng),并描述了有 限狀態(tài)機(jī)中的事件與發(fā)汪目標(biāo)程序中的函數(shù)之間的對(duì)應(yīng)。在具體規(guī)范中所 描述的斷言表達(dá)式是本實(shí)施例的一個(gè)特點(diǎn),在后面會(huì)有描述??梢圆幻杳?所述斷言表達(dá)式。通過(guò)將抽象規(guī)范和具體規(guī)范進(jìn)行合成來(lái)產(chǎn)生mt規(guī)范。 下面將詳細(xì)描述本實(shí)施例。例4和5顯示了根據(jù)本實(shí)施例所述的抽象規(guī)范(抽象規(guī)范1和2)。 另外,例6和7顯示了具體規(guī)范(具體規(guī)范1和2)。抽象規(guī)范對(duì)應(yīng)著第 一規(guī)范,而具體規(guī)范對(duì)應(yīng)著第二規(guī)范。以下述方式來(lái)解釋例4中所示的抽象規(guī)范1。名字為"objeet(對(duì)象)" (第一有限狀態(tài)機(jī)標(biāo)識(shí)符)的有限狀態(tài)機(jī)定義了狀態(tài)"under和"valid (有效)"、轉(zhuǎn)換事件(或者簡(jiǎn)稱為事件)"ini" 、 "fin"和"use"、 以及由于轉(zhuǎn)換事件的發(fā)生而導(dǎo)致的狀態(tài)的轉(zhuǎn)換。例如,如果在狀態(tài)"undef, 中發(fā)生了轉(zhuǎn)換事件"ini",那么,該狀態(tài)就轉(zhuǎn)換為狀態(tài)"valid"。約定所 有沒(méi)有明確定義的轉(zhuǎn)換為到錯(cuò)誤態(tài)的轉(zhuǎn)換。即,抽象規(guī)范(第一規(guī)范)描 述了第一有限狀態(tài)機(jī),所述笫一有限狀態(tài)機(jī)定義了由于事件發(fā)生而導(dǎo)致的 多個(gè)狀態(tài)之間的轉(zhuǎn)換。例6所示的具體規(guī)范1被解釋為將有限狀態(tài)機(jī)(抽象規(guī)范)"object (對(duì)象)"與程序變量類(lèi)型(對(duì)象類(lèi)型)"file (文件)"相關(guān)聯(lián),將轉(zhuǎn)換 事件"ini"與程序函數(shù)(對(duì)類(lèi)型為"file"的對(duì)象進(jìn)行操作的函數(shù))"open" 相關(guān)聯(lián)。具體規(guī)范l的名字為"file"。具體規(guī)范l的后半部分中所描述的 "f以及具體規(guī)范2的后半部分中所描述的"m"是附加到具體規(guī)范上的 標(biāo)簽,它們實(shí)質(zhì)上表示具有上述對(duì)象類(lèi)型的對(duì)象。在f.ini中,指示了關(guān)于具有對(duì)象類(lèi)型"file"的對(duì)象的事件"ini"。在本實(shí)施例中,在程序^規(guī)范合成設(shè)備(規(guī)范合成單元)中,對(duì)抽 象規(guī)范1和具體規(guī)范1以及抽象規(guī)范2和具體規(guī)范2進(jìn)行合成,以產(chǎn)生驗(yàn) 證規(guī)范?!?:抽象規(guī)范i——〃general-purpose object (通用對(duì)象) fsm object { state: undef, valid; event: ini, fln, use5 delta;(undef, ini ->valid), (valid, fin ->undei), (valid, use ->valid)例5:抽象規(guī)范2——〃exclusive control variable (排斥控制變量) fsm mutex { state: undef, valid, locked; event: ini, fin, lock unlock; delta;(undef, ini ->valid), (valid, fin ->unde^), (valid, lock ->locked) (locked, unlock->valid)例6:具體規(guī)范l〃file operation (文件操作) spec file { fsm(object》type(file) {ini: call(open("));fin: call(close("));use: call(read(..))||call(write(..));}f;——例7:具體規(guī)范2-—〃lock operation (鎖定操作) spec lockl { fsm(object): type(mutex) { ini: call(init(")); fin: call(destroy(..)); use: call(lock("))||call(unlock(..)); }m;進(jìn)一步,關(guān)于程序的互斥鎖與文件之組合的mi被認(rèn)為是更復(fù)雜的驗(yàn) 證規(guī)范的一個(gè)例子。例如,假設(shè)想通過(guò)mt來(lái)證實(shí)在文件操作期間互斥鎖處于鎖定狀態(tài)。圖5顯示了相應(yīng)的有限狀態(tài)機(jī)的一個(gè)例子。狀態(tài)標(biāo)簽的縮寫(xiě)為,U=Undef, V=Valid (有效),以及L-Locked (鎖定)。有限狀態(tài)機(jī)的狀態(tài)為文件和 互斥鎖的組合。如果有兩個(gè)文件狀態(tài)(U和V)和三個(gè)互斥鎖狀態(tài)(U、 V 和L),那么,狀態(tài)數(shù)為(2*3+1) =7,其中包括了錯(cuò)誤態(tài)。由例如虛線來(lái) 指示無(wú)效轉(zhuǎn)換。這個(gè)轉(zhuǎn)換以及沒(méi)有定義的所有可能的轉(zhuǎn)換是轉(zhuǎn)換到錯(cuò)誤態(tài) 的無(wú)效轉(zhuǎn)換(參見(jiàn)本圖中右上角的"其它,,)。這個(gè)驗(yàn)證規(guī)范(有限狀態(tài)機(jī))在配置規(guī)則上是筒單的,但不能像常 證規(guī)范那樣容易地列出并定 義所有的狀態(tài)和轉(zhuǎn)換。解決的辦法是,產(chǎn)生具體規(guī)范,描迷要與每種類(lèi)型(file、 mutex等)相結(jié)合的抽象規(guī)范以及"斷言表達(dá)式(用于斷言的邏輯 表達(dá)式)",如下面所述。例8所示的具體規(guī)范3是關(guān)于鎖定的文件操作的具體規(guī)范,其中,抽 象規(guī)范"object"和"mutex"與程序變量類(lèi)型"file"和"mutex"相關(guān)聯(lián), 并且定義了屬于每個(gè)類(lèi)型的程序變量的轉(zhuǎn)換事件。更具體地說(shuō),具體規(guī)范3描述了例如兩個(gè)集合,每個(gè)集合包括一組(1)對(duì)象類(lèi)型(file ) 、 ( 2 )第一有限狀態(tài)機(jī)標(biāo)識(shí)符(object)、 以及(3 )驗(yàn)證目標(biāo)程序中操作具有所述對(duì)象類(lèi)型的對(duì)象的函數(shù)(open(…)、 close(...)等)與具有所述標(biāo)識(shí)符(object)的笫一有限狀態(tài)機(jī)中所包含的事 件(ini、 fin等)之間的對(duì)應(yīng),以及一組(1)對(duì)象類(lèi)型(mutex ) 、 ( 2 )第一有限狀態(tài)機(jī)標(biāo)識(shí)符(mutex )、 以及(3) miE目標(biāo)程序中操作具有所述對(duì)象類(lèi)型的對(duì)象的函數(shù)(init(...)、 destroy(…)等)與具有所述標(biāo)識(shí)符(mutex)的笫一有限狀態(tài)機(jī)中所包含的 事件(ini、 fin等)之間的對(duì)應(yīng)。基于具體規(guī)范3由有限狀態(tài)機(jī)所采用的每個(gè)狀態(tài)基本上是用于參考的 每個(gè)抽象規(guī)范中的狀態(tài)的組合。然而,由用戶使用語(yǔ)句"assert"描述的"斷 言表達(dá)式"為假的狀態(tài)或轉(zhuǎn)換是錯(cuò)誤態(tài)或到,態(tài)的轉(zhuǎn)換。就是說(shuō),使用語(yǔ)句"assert"來(lái)描述的斷言表達(dá)式為假的一組狀態(tài)和轉(zhuǎn) 換事件的轉(zhuǎn)換終點(diǎn)被約定為錯(cuò)誤態(tài)。例如,例8中的斷言表達(dá)式 "!f.usell(f.use && m@locked),,的意思是,當(dāng)針對(duì)變量"f, (object)的 事件"use"發(fā)生時(shí),變量"m" (object)的狀態(tài)為"locked"。即,當(dāng) 針對(duì)變量T的事件"use"沒(méi)有發(fā)生時(shí),或者當(dāng)變量"m"的狀態(tài)為"locked" 且針對(duì)變量"f,的事件"use"發(fā)生時(shí),語(yǔ)句"assert"為真(truth)(沒(méi) 有錯(cuò)誤)。斷言表達(dá)式等價(jià)于基于對(duì)象的狀態(tài)和事件的發(fā)生來(lái)定義約束的 邏輯表達(dá)式。后面將描述在斷言表達(dá)式中用來(lái)確定真/假值的算法的細(xì)節(jié)。在本實(shí)施例中,如后面將描述的,在程序驗(yàn)證規(guī)范合成設(shè)備(規(guī)范合成單元)中合成這個(gè)具體規(guī)范3和該具體規(guī)范3中所用的每個(gè)抽象規(guī)范 ("object" 、 "mutex"),以產(chǎn)生驗(yàn)證規(guī)范。一—例8:具體規(guī)范3—-//locked file operation (鎖定的文件操作) spec locked—file { fsm(object): type(file) { ini: call(open(..)); fin: call(close(..)); use: call(read(..))||call(write(..));}f;fsm(mutex): type(mutex) {ini: call(init(..));fin: call(destroy(..));lock: eall(lock(..));unlock: call(unlock(..)》 }m;assert(!f.use||(f,use && m@locked)); "assertion expression圖l是一個(gè)方框圖,顯示了本實(shí)施例所述的具有程序mt規(guī)范產(chǎn)生裝 置(規(guī)范合成單元ll)的程序驗(yàn)證裝置的配置。圖2是一個(gè)流程圖,示意 地顯示了程序驗(yàn)證裝置的操作。通過(guò)使計(jì)算機(jī)執(zhí)行程序(該程序描述了執(zhí) 行圖2中的流程圖所示的每個(gè)步驟的指令代碼),可以實(shí)現(xiàn)圖1中的程序 驗(yàn)證裝置的操作。也可以通過(guò)使計(jì)算機(jī)讀取并執(zhí)行計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上 所存儲(chǔ)的描述所述指令代碼的程序來(lái)執(zhí)行所述操作。用戶使用輸入設(shè)備將抽象規(guī)范21 (第一規(guī)范)和具體規(guī)范22 (第二規(guī) 范)輸入程序驗(yàn)證裝置中(步驟Sll、 S12)。規(guī)范合成單元(程序aii規(guī)16范產(chǎn)生裝置)11從所輸入的抽象規(guī)范21 (第一規(guī)范)和具體規(guī)范22 (第 二規(guī)范)產(chǎn)生中間JlHiE規(guī)范23 (步驟S13 ) 。 !Ht規(guī)范轉(zhuǎn)化單元12將所產(chǎn) 生的中間mt規(guī)范23轉(zhuǎn)化為與多個(gè)發(fā)汪方法中所希望的一個(gè)發(fā)it方法相 對(duì)應(yīng)的輸入!Hi規(guī)范24 (描述第二或第三有限狀態(tài)機(jī)的B規(guī)范)(步驟 S14 )。程序驗(yàn)證單元13基于JlHi規(guī)范(輸AjHt規(guī)范)24對(duì)驗(yàn)證目標(biāo)程 序25進(jìn)行^£ (步驟S15 ),并輸出所述程序的IHE結(jié)果26 (步驟S16 )。 通過(guò)將中間驗(yàn)證規(guī)范23轉(zhuǎn)化為與所希望的驗(yàn)證方法相對(duì)應(yīng)的^HE規(guī)范,可 以支持多個(gè)驗(yàn)證方法。在本例中,中間!Hi規(guī)范被轉(zhuǎn)化為用特定語(yǔ)言X所 描述的驗(yàn)證規(guī)范。因此,在本實(shí)施例中,中間miE規(guī)范一旦產(chǎn)生,所產(chǎn)生 的中間^£規(guī)范就被轉(zhuǎn)化為與所希望的驗(yàn)汪方法相對(duì)應(yīng)的^£規(guī)范,籍此, 可以支持多個(gè)5Hi規(guī)范。自然,所述g規(guī)范(描述第二或第三有限狀態(tài) 機(jī)的驗(yàn)證規(guī)范)可以直接從所述抽象規(guī)范和所述具體規(guī)范中產(chǎn)生。圖3是一個(gè)方框圖,詳細(xì)顯示了規(guī)范合成單元ll的配置。在規(guī)范合成單元11的輸入端提供表格抽取單元31和33。這里,表格 抽取單元31和33設(shè)置于規(guī)范合成單元11的外部,但也可以設(shè)置于規(guī)范合 成單元ll的內(nèi)部。表格抽取單元31從每個(gè)抽象規(guī)范21中抽取轉(zhuǎn)換表(單個(gè)的)32。圖 6顯示了從名字為"object"的抽象規(guī)范l (如例4所示)中抽取的轉(zhuǎn)換表 的例子,圖7顯示了從名字為"mutex"的抽象規(guī)范2 (如例5所示)中抽 取的轉(zhuǎn)換表的例子。轉(zhuǎn)換表(單個(gè)的)32表示從一組狀態(tài)和事件起始的轉(zhuǎn) 換終點(diǎn)的狀態(tài)。例如,在圖6中,如果在"Undef,狀態(tài)下發(fā)生了事件"ini", 那么,該狀態(tài)就轉(zhuǎn)換為Valid。抽象規(guī)范等價(jià)于從抽象規(guī)范中抽取的轉(zhuǎn)換表。 抽象規(guī)范在計(jì)算機(jī)中以轉(zhuǎn)換表的形式來(lái)運(yùn)用。盡管這里轉(zhuǎn)換表(單個(gè)的) 是從抽象規(guī)范21中抽取的并且所抽取的轉(zhuǎn)換表(單個(gè)的)被輸入到規(guī)范合 成單元11中,但轉(zhuǎn)換表(單個(gè)的)也可以預(yù)先產(chǎn)生,并直接輸入到規(guī)范合 成單元11中。在這種情形中,表格抽取單元31可以省略。表格抽取單元33從具體規(guī)范22中抽取對(duì)應(yīng)關(guān)系表34和斷言表達(dá)式 35。圖11顯示了從例8所示的具體規(guī)范3中抽取的對(duì)應(yīng)關(guān)系表的一個(gè)例子。另外,從具體規(guī)范3中抽取的斷言表達(dá)式35為"!f.usell(f.use &&ra@locked)"。對(duì)應(yīng)關(guān)系表將每個(gè)對(duì)象類(lèi)型與抽象規(guī)范相關(guān)聯(lián),并將抽 象規(guī)范中的事件與具有和所述抽象規(guī)范相對(duì)應(yīng)的對(duì)象類(lèi)型的對(duì)象的操作函 數(shù)相關(guān)聯(lián)。具體規(guī)范3的不包括斷言表達(dá)式的部分等價(jià)于圖11中的對(duì)應(yīng)關(guān) 系表。不包括斷言表達(dá)式的那部分在計(jì)算機(jī)中以對(duì)應(yīng)關(guān)系表的形式;jM1用。 盡管這里對(duì)應(yīng)關(guān)系表34和斷言表達(dá)式35是從具體規(guī)范22中抽取的,并且 被輸入到規(guī)范合成單元11中,但一組對(duì)應(yīng)關(guān)系表和斷言表達(dá)式也可以預(yù)先 準(zhǔn)備好,并直接輸入規(guī)范合成單元11中。在這種情形中,表格抽取單元 33可以省略。狀態(tài)積產(chǎn)生單元(state product generation unit) 36基于對(duì)應(yīng)關(guān)系表 34將從抽象規(guī)范21中抽取的轉(zhuǎn)換表(單個(gè)的)32合成,從而得到轉(zhuǎn)換表 (合成的)37。圖9顯示了基于圖11中的對(duì)應(yīng)關(guān)系表通過(guò)合成圖6和7 中的轉(zhuǎn)換表而得到的轉(zhuǎn)換表(合成的)37。轉(zhuǎn)換表37顯示了當(dāng)在每個(gè)轉(zhuǎn)換 表(單個(gè)的)32中的狀態(tài)的組合(組合中任何一個(gè)狀態(tài)為錯(cuò)誤態(tài),則該組 合被處理為錯(cuò)誤態(tài)(Error))中發(fā)生了針對(duì)具體規(guī)范22中每個(gè)類(lèi)型(file、 nmtex等)的事件時(shí)所產(chǎn)生的轉(zhuǎn)換終點(diǎn)。例如,當(dāng)在狀態(tài)(U, IJ)中發(fā)生 了關(guān)于具有文件類(lèi)型的對(duì)象的事件"ini (f.iiii)"時(shí),該狀態(tài)就轉(zhuǎn)換為狀 態(tài)(V, U)。斷言表達(dá)式估計(jì)單元38從斷言表達(dá)式35和轉(zhuǎn)換表(合成的)37的表 格格式中產(chǎn)生斷言表39 (不使用橫行與豎列的交叉點(diǎn)處的值)。圖8顯示 了從圖9所示的轉(zhuǎn)換表(合成的)37的表格格式和斷言表達(dá)式"!f.usell(f.use &&m@locked),,所產(chǎn)生的斷言表39。斷言表39按下面的方式產(chǎn)生。在圖 9所示的轉(zhuǎn)換表(合成的)37的格式中,如果一組橫行項(xiàng)(狀態(tài))與豎列 項(xiàng)(事件)滿足斷言表達(dá)式35,那么,就將TRUE (真)輸入與該組對(duì)應(yīng) 的格子中,而如果該組不滿足斷言表達(dá)式35,那么,就將FALSE (假) 輸入與該組對(duì)應(yīng)的格子中。例如,(U, U)和"f.ini,,這一組對(duì)應(yīng)著斷言 表達(dá)式35中的"!f.use,,,并滿足該斷言表達(dá)式,因此將"TRUE"輸入相 應(yīng)的格子(左上角的格子)中。另外,由于(U, U)和"f.use"這一組不滿足"!f.use,,和"(f.use && m@locked)"中的任何一個(gè),所以將"FALSE" 輸M目應(yīng)的格子(從左上角算起的第三個(gè)格子)中。另外,由于(V, L) 和"f.use"這一組滿足"(f.use && m@locked),,,所以將"TRUE"輸入 相應(yīng)的格子中。后面將描述斷言表39的詳細(xì)的產(chǎn)生算法。轉(zhuǎn)換表修正單元40基于斷言表39修正轉(zhuǎn)換表(合成的)37,以產(chǎn)生 轉(zhuǎn)換表(最終的)41。圖IO顯示了轉(zhuǎn)換表(最終的)的一個(gè)例子,其中, 基于圖8所示的斷言表39修正圖9所示的轉(zhuǎn)換表(合成的)37。轉(zhuǎn)換表(最 終的)按下述方式來(lái)產(chǎn)生。對(duì)于在圖8中為"TRUE"的格子,直接使用 與所關(guān)心的格子相對(duì)應(yīng)的圖9中的值,在圖8中為"FALSE"的格子總是"Error"。圖IO所示的表中的"Error*"表示該,是基于斷言表達(dá)式 35而得到的。就是說(shuō),對(duì)于含有"Error*"的格子,除非有斷言表達(dá)式35, 否則就直接使用圖9中的值(不是Error)。由轉(zhuǎn)換表修正單元40所產(chǎn)生的轉(zhuǎn)換表(最終的)41和由表格抽取單 元33所抽取的對(duì)應(yīng)關(guān)系表34從規(guī)范合成單元11輸出。就是說(shuō),轉(zhuǎn)換表(最 終的)41和對(duì)應(yīng)關(guān)系表34這一組等價(jià)于圖1中的中間驗(yàn)證規(guī)范23。盡管在上述說(shuō)明中在具體規(guī)范22中描述了斷言表達(dá)式,但如果在具體 規(guī)范22中沒(méi)有描述斷言表達(dá)式,那么,轉(zhuǎn)換表(合成的)37和對(duì)應(yīng)關(guān)系 表34這一組可以作為中間mt規(guī)范23輸出,因?yàn)椴恍枰拚D(zhuǎn)換表(合 成的)37。例如,這等價(jià)于例4中的抽象規(guī)范1和例6中的具體規(guī)范1被 輸入規(guī)范合成單元11中這種情況,或者等價(jià)于例5中的抽象規(guī)范2和例7 中的具體規(guī)范2凈皮輸入規(guī)范合成單元11中這種情況。下面,以程序1到4來(lái)描述規(guī)范合成單元11中規(guī)范合成的詳細(xì)算法。 狀態(tài)積產(chǎn)生單元36對(duì)應(yīng)著程序1中的(1)到(3 )和程序2,斷言表達(dá)式 估計(jì)單元38對(duì)應(yīng)著程序4,轉(zhuǎn)換表修正單元40對(duì)應(yīng)著程序1中的(4 )到(6)和程序3。在下面的描述中,WE規(guī)范的有限狀態(tài)機(jī)由M=(Q,, i:, S, q0, Q)來(lái)定 義。每個(gè)符號(hào)的意義見(jiàn)定義l。 定義l:有限狀態(tài)機(jī)Q:狀態(tài)語(yǔ)句的狀態(tài)集(除了錯(cuò)誤態(tài)外所有狀態(tài)(接受的狀態(tài))的集
合)
Q,所有狀態(tài)=Q U (error) Error:錯(cuò)誤態(tài) S:事件語(yǔ)句的符號(hào)集 S:狀態(tài)機(jī)的轉(zhuǎn)換函數(shù)<formula>formula see original document page 20</formula>
在delta語(yǔ)句中沒(méi)有被規(guī)定的轉(zhuǎn)換被認(rèn)為是錯(cuò)誤轉(zhuǎn)換。
從錯(cuò)誤態(tài)轉(zhuǎn)換到的轉(zhuǎn)換終點(diǎn)都是錯(cuò)誤態(tài)。
q0:初始態(tài)(在狀態(tài)語(yǔ)句的開(kāi)始所說(shuō)明的狀態(tài))
相關(guān)的轉(zhuǎn)換表(單個(gè)的)M[il和斷言表達(dá)式"expr"被從具體規(guī)范和 抽象規(guī)范中讀取以被輸入,轉(zhuǎn)換表(最終的)M被輸出。程序1中使用的 轉(zhuǎn)換函數(shù)的計(jì)算程序在程序2和3中描述。
程序l:規(guī)范合成
函數(shù)規(guī)范合成
輸入有限狀態(tài)機(jī)M[lI,…,Mn,斷言"expr" 輸出有限狀態(tài)機(jī)M 案例圖10中的表格
(1) 通過(guò)產(chǎn)生有限狀態(tài)機(jī)M[il的狀態(tài)集Q[i](不包括錯(cuò)誤態(tài))的直 積并包括錯(cuò)誤態(tài)來(lái)獲得狀態(tài)集Q,。
就是說(shuō),有限狀態(tài)機(jī)M的狀態(tài)集為Q,=Q U {error}。
Q: =,*Q[2]*."*Q[n)
={(ql, q2,…,qn)|ql in QlA... A qn in Q[n}
(2) 產(chǎn)生有限狀態(tài)機(jī)M[il的事件集S[i之和,以獲得M的事件集5:。
i:: =i:[iU2:[2u...U2:[ii]
={a|a in S[1] V ... Va in 2[n]}
(3) 沒(méi)有考慮斷言"expr"的轉(zhuǎn)換函數(shù)"trans(q, a)"根據(jù)程序2來(lái) 定義,并計(jì)算轉(zhuǎn)換表。(4) 產(chǎn)生斷言"expr"的真值表"valid(q,a)"。(5) 當(dāng)所述真值表中斷言"expr"的值"valid(q, a)"為真時(shí),使用 轉(zhuǎn)換終點(diǎn)"trans(q,a)",當(dāng)其為假時(shí),轉(zhuǎn)換終點(diǎn)為error。(6) 這個(gè)轉(zhuǎn)換表"delta(q,a)"為有限狀態(tài)機(jī)M的轉(zhuǎn)換函數(shù)3。 下面的程序2決定了沒(méi)有考慮斷言表達(dá)式時(shí)具有直積態(tài)的有限狀態(tài)機(jī)的轉(zhuǎn)換終點(diǎn)。通過(guò)輸入狀態(tài)集q和轉(zhuǎn)換事件a來(lái)確定狀態(tài)集的轉(zhuǎn)換終點(diǎn)q。 確定與轉(zhuǎn)換事件a相對(duì)應(yīng)的狀態(tài)元素的位置i,只有位置i的狀態(tài)發(fā)生轉(zhuǎn)換 的狀態(tài)集為q。程序2:沒(méi)有考慮斷言表達(dá)式的轉(zhuǎn)換函數(shù)函數(shù)計(jì)算沒(méi)有考慮斷言表達(dá)式時(shí)有限狀態(tài)機(jī)的轉(zhuǎn)換"delta(q,a)"。 輸入q:Q,, a: S, delta[iQ,[i*Ei] — Q,[i輸出p:Q, 案例圖9中的表 trans(q:Q,, a:H):Q,=<formula>formula see original document page 21</formula>在下面程序3中所使用的斷言表達(dá)式由程序3之下所描迷的定義2來(lái) 定義,并且估計(jì)程序使用程序4。程序3通過(guò)查找沒(méi)有考慮斷言表達(dá)式時(shí) 的轉(zhuǎn)換表(合成的)和斷言表達(dá)式來(lái)決定考慮了斷言表達(dá)式時(shí)對(duì)于每個(gè)狀 態(tài)q和轉(zhuǎn)換事件a的轉(zhuǎn)換終點(diǎn)。具體說(shuō),如果斷言表中的值為真,那么采 用所述轉(zhuǎn)換表(合成的)中的轉(zhuǎn)換終點(diǎn),或者如果斷言表中的值為假,那 么轉(zhuǎn)換終點(diǎn)為錯(cuò)誤態(tài)。程序3:考慮了斷言表達(dá)式時(shí)的轉(zhuǎn)換函數(shù)函數(shù)計(jì)算考慮了斷言表達(dá)式的有限狀態(tài)機(jī)的轉(zhuǎn)換表輸入沒(méi)有考慮斷言表達(dá)式時(shí)的轉(zhuǎn)換表"trans(q, a)"和斷言表"valid(q,a)"輸出考慮了斷言表達(dá)式時(shí)的轉(zhuǎn)換表delta: Q,*S —Q, 案例圖10中的表 delta(q:Q, a:S):Q := if valid(q, a) thenreturn trans(q, a) elsereturn error endif定義2:斷言表達(dá)式(斷言的邏輯表達(dá)式)該邏輯表達(dá)式由BNF定義。符號(hào)"&&"表示邏輯積,符號(hào)"||"表 示邏輯和,并且符號(hào)"!"表示邏輯非。狀態(tài)變量"v@state"和事件符號(hào)"v.event"根據(jù)狀態(tài)和事件來(lái)取真/ 假值。expr ::=v@state | v.event | expr && expr | expr || expr | !expr (例子)expr=(x@valid && y.use) && !(x@valid && z@locked)下面的程序4是斷言表的計(jì)算程序,其中,如果輸入了狀態(tài)q和事件a,那么斷言表達(dá)式的真/假值就確定了。具體說(shuō),在將真/假值指派給邏輯 表達(dá)式的狀態(tài)項(xiàng)"v@state"或事件項(xiàng)"v.event"之后,就可以根據(jù)布爾表 達(dá)式的估計(jì)程序來(lái)決定斷言表達(dá)式的真/假值。程序4是遞歸調(diào)用方法的程 序的定義,其中,如果當(dāng)前輸入的表達(dá)式e為邏輯積的形式,那么調(diào)用 "and(…)";如果其為邏輯和的形式,那么調(diào)用"or(…)";如果其為邏 輯非的形式,那么調(diào)用"not(...)";如果其為狀態(tài)項(xiàng)或事件項(xiàng),那么指派 真/假值。如果遞歸調(diào)用的次數(shù)增加,那么邏輯算符的數(shù)目就減少,因此, 這個(gè)程序必然會(huì)停下來(lái)并確定斷言表達(dá)式的值。函數(shù)"and(…)"、"or(...)"、 或者"not(…)"針對(duì)正常布爾值的函數(shù)。 程序4:斷言表達(dá)式的估計(jì)函數(shù)計(jì)算狀態(tài)q和事件a的斷言表達(dá)式的真/假值 輸入斷言表達(dá)式e,狀態(tài)q,事件a 輸出真/假值(true或false ) 案例圖8中的表 valid(e:Exp, q:Q, a:H):bool := match e withel && e2=>and(valid(el, q, a), valid(e2, q, a))el II e2=>or(valid(el, q, a), valid(e2, q, a))! el=>not(valid(el, q, a))v@state=>if q[v]=state then true else falsev.event=>if a=v.vent then true else false下面舉例說(shuō)明在圖1中的m^規(guī)范轉(zhuǎn)換單元12中所執(zhí)行的^規(guī)范轉(zhuǎn) 換的計(jì)算程序(算法)。下面將描述在執(zhí)行驗(yàn)證對(duì)象的程序期間將有限狀態(tài)機(jī)的中間^^£規(guī)范 23轉(zhuǎn)換成用于進(jìn)行iHi的程序代碼(輸入lHi規(guī)范)的方法。對(duì)于其它的 驗(yàn)證方法,只要mt規(guī)范是以有限狀態(tài)機(jī)形式描述的,可以用相同的方法從中間規(guī)范中產(chǎn)生輸入驗(yàn)證規(guī)范。例如,對(duì)于類(lèi)型狀態(tài)驗(yàn)證,自然可以將中間^£規(guī)范23轉(zhuǎn)換成輸入^i規(guī)范,以便在不執(zhí)行程序的情況下進(jìn)行驗(yàn) 證。通過(guò)產(chǎn)生與多個(gè)不同的驗(yàn)證方法相對(duì)應(yīng)的mit規(guī)范并以上述方式根據(jù) 每個(gè)驗(yàn)證規(guī)范來(lái)進(jìn)行程序驗(yàn)證,可以去掉假的反例。下面的程序5是以面向方面語(yǔ)言(aspect oriented language) AspectJ 的格式來(lái)產(chǎn)生在 £規(guī)范中所定義的有限狀態(tài)機(jī)的例子。這里所輸出的方 面(aspect)與驗(yàn)證目標(biāo)程序 一起進(jìn)行編譯,由此可以通過(guò)在執(zhí)行程序期 間使?fàn)顟B(tài)機(jī)發(fā)生轉(zhuǎn)變來(lái)進(jìn)行 。當(dāng)在類(lèi)型狀態(tài)mE中出現(xiàn)了反例時(shí),通 過(guò)實(shí)際地執(zhí)行所述程序可以有效地檢驗(yàn)相應(yīng)路徑是否真的出現(xiàn)了 。程序5:輸入驗(yàn)證規(guī)范的產(chǎn)生輸入中間規(guī)范M=(Q,, S, 5, q0, Q)輸出裝配有限狀態(tài)機(jī)的方面模塊(1) 產(chǎn)生帶限定符"pertarget(obj()),,的具有合適的,規(guī)范名Id 的方面"aspect"。aspect Id pertarget(target(Type)){...}(2) 為aspect構(gòu)件說(shuō)明處于狀態(tài)Q的變量q,并將之初始化到初始 態(tài)q0。aspect...{int q;...}(3) 為aspect構(gòu)件說(shuō)明數(shù)組"delta[川",并存儲(chǔ)轉(zhuǎn)換5。 aspect...{...; int delta[N網(wǎng);…)(4) 為aspect構(gòu)件說(shuō)明與對(duì)象類(lèi)型"Type"相對(duì)應(yīng)的切入點(diǎn)語(yǔ)句 (pointcut statement)。aspect...{...; pointcut obj(): target(Type);...}(5) 為aspect構(gòu)件說(shuō)明與事件i:相對(duì)應(yīng)的切入點(diǎn)語(yǔ)句。 aspect...{...; pointcut evt( ): call(...);."}(6 )說(shuō)明與aspect的切入點(diǎn)語(yǔ)句相對(duì)應(yīng)的通知(advice ),并描述狀 態(tài)轉(zhuǎn)換。aspect".{...; before(): evt(){...};...}advice corresponding to a in E before(): evt() {q=delta[q][a;if(q==eiror)err( );} 下面關(guān)于aspect的例9采用了非專利文件3中所述的AspectJ語(yǔ)言的 符號(hào),非專利文件3為"An overview of Aspect J (Aspect J概述)"in Proceedings of the European Conference on Object-Oriented Programming (關(guān)于面向?qū)ο缶幊痰臍W洲^S義文集),Budapest, Hungary, 18—22 June 2001 ( Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William G. Griswold )。這個(gè)例子中的aspect 的解釋為,面向方面語(yǔ)言(aspect oriented language)的處理系統(tǒng)為每種類(lèi) 型"Type"產(chǎn)生名字為Id的帶有限定符"pertarget(obj())"的aspect (方 面),并且如果訪問(wèn)具有類(lèi)型"Type"的對(duì)象的話,則調(diào)用通知(advice)"before():evt(){."}"。 ——例9:輸入驗(yàn)證規(guī)范(AspectJ語(yǔ)言格式)—— aspect Id pertarget(obj(》{ int q=q0; int delta]={...}; pointcut obj( ): target(Type); pointcut evtl( ): call(");〃event albefore(》evl( ) {q=delta[qal]5 if (q==error) err(》}如上所述,在本實(shí)施例中,用戶將mi規(guī)范分為抽象規(guī)范和具體規(guī)范, 描述所述抽象規(guī)范和具體規(guī)范,并將兩者進(jìn)行合成以產(chǎn)生^規(guī)范(或者 說(shuō)中間超rii規(guī)范),由此,能夠達(dá)到節(jié)省^it規(guī)范的描述量的效果。另夕卜, 因此可以重復(fù)地再使用抽象規(guī)范。另外,在本實(shí)施例中,用戶將驗(yàn)證規(guī)范分為抽象規(guī)范和具體規(guī)范,描述所述抽象規(guī)范和具體規(guī)范,并將兩者進(jìn)行合成以產(chǎn)生,規(guī)范(或者說(shuō) 中間mt規(guī)范),由此,能夠?qū)崿F(xiàn)在復(fù)雜的mt規(guī)范中減少錯(cuò)誤的效果。另外,在本實(shí)施例中,用戶將 £規(guī)范分為抽象規(guī)范和具體規(guī)范,描 述所述抽象規(guī)范和具體規(guī)范,并將兩者進(jìn)行合成以產(chǎn)生B規(guī)范(或者說(shuō) 中間驗(yàn)證規(guī)范),由此,可以重復(fù)地再使用抽象規(guī)范。另外,在本實(shí)施例中,用戶將mt規(guī)范分為抽象規(guī)范和具體規(guī)范,描 述所述抽象規(guī)范和具體規(guī)范,從兩者中產(chǎn)生中間驗(yàn)證規(guī)范,并將所產(chǎn)生的中間驗(yàn)證規(guī)范轉(zhuǎn)換為與單個(gè)發(fā)近方法相對(duì)應(yīng)的mit規(guī)范(輸入mt規(guī)范), 由此,通過(guò)結(jié)合多個(gè)不同的驗(yàn)證方法進(jìn)行程序驗(yàn)證,可以實(shí)現(xiàn)去掉假的反 例的效果。
權(quán)利要求
1.一種裝置,其產(chǎn)生驗(yàn)證規(guī)范,用于驗(yàn)證包含對(duì)一個(gè)或多個(gè)對(duì)象進(jìn)行操作的函數(shù)的驗(yàn)證目標(biāo)程序,該裝置包括第一輸入單元,配置為用來(lái)輸入描述第一有限狀態(tài)機(jī)的第一規(guī)范,所述第一有限狀態(tài)機(jī)定義由于事件的發(fā)生而導(dǎo)致的多個(gè)狀態(tài)之間的轉(zhuǎn)換;第二輸入單元,配置為用來(lái)輸入第二規(guī)范,所述第二規(guī)范為第一對(duì)象類(lèi)型描述了對(duì)具有所述第一對(duì)象類(lèi)型的對(duì)象進(jìn)行操作的函數(shù)與所述第一有限狀態(tài)機(jī)中的所述事件之間的對(duì)應(yīng);以及驗(yàn)證規(guī)范產(chǎn)生單元,配置為用來(lái)通過(guò)合成所述第一和第二規(guī)范來(lái)產(chǎn)生對(duì)所述驗(yàn)證目標(biāo)程序進(jìn)行驗(yàn)證的驗(yàn)證規(guī)范,所述驗(yàn)證規(guī)范描述了第二有限狀態(tài)機(jī),所述第二有限狀態(tài)機(jī)定義了由于調(diào)用對(duì)具有所述第一對(duì)象類(lèi)型的所述對(duì)象進(jìn)行操作的函數(shù)而導(dǎo)致的具有所述第一對(duì)象類(lèi)型的所述對(duì)象的各狀態(tài)之間的轉(zhuǎn)換。
2. 根據(jù)權(quán)利要求l所述的裝置,其中所述第一輸入單元輸入描述多個(gè)所述第一有限狀態(tài)機(jī)的所述第一規(guī)范,所述第二輸入單元輸入所述第二規(guī)范,所述第二規(guī)范為彼此不同的對(duì) 象類(lèi)型描述了與所述第一有限狀態(tài)機(jī)相對(duì)應(yīng)的多個(gè)所述對(duì)應(yīng),以及所述發(fā)汪規(guī)范產(chǎn)生單元產(chǎn)生描述第三有限狀態(tài)機(jī)的^^規(guī)范,所述第 三有限狀態(tài)機(jī)定義了由于調(diào)用對(duì)具有多個(gè)所述對(duì)象類(lèi)型的多個(gè)所述對(duì)象進(jìn) 行操作的多個(gè)函數(shù)而導(dǎo)致的具有多個(gè)所述對(duì)象類(lèi)型的多個(gè)所述對(duì)象的多個(gè) 狀態(tài)的各個(gè)組合之間的轉(zhuǎn)換。
3. 根據(jù)權(quán)利要求2所述的裝置,其中,所述第二規(guī)范還描述了邏輯表達(dá)式,所述邏輯表達(dá)式基于所述對(duì)象的 狀態(tài)和所述事件的發(fā)生來(lái)定義約束,以及所述mE規(guī)范描述了所述第三有限狀態(tài)機(jī),所述笫三有限狀態(tài)機(jī)定義 了當(dāng)違反所述約束而調(diào)用函數(shù)時(shí)轉(zhuǎn)換到預(yù)定狀態(tài)的轉(zhuǎn)換。
4.根據(jù)權(quán)利要求3所述的裝置,其中,所述預(yù)定狀態(tài)為錯(cuò)誤態(tài)。
5.根據(jù)權(quán)利要求i所述的裝置,還包括程序mt單元,其配置為用來(lái)基于所述驗(yàn)證規(guī)范對(duì)所述驗(yàn)證目標(biāo)程序進(jìn)行驗(yàn)證。
6. —種方法,用來(lái)產(chǎn)生5Ht規(guī)范以驗(yàn)汪包含對(duì)一個(gè)或多個(gè)對(duì)象進(jìn)行操 作的函數(shù)的驗(yàn)證目標(biāo)程序,該方法包括輸入描述第 一有限狀態(tài)機(jī)的笫一規(guī)范,所述第一有限狀態(tài)機(jī)定義由于 事件的發(fā)生而導(dǎo)致的多個(gè)狀態(tài)之間的轉(zhuǎn)換;輸入第二規(guī)范,所述第二規(guī)范為第 一對(duì)象類(lèi)型描迷了對(duì)具有所述第一 對(duì)象類(lèi)型的對(duì)象進(jìn)行操作的函數(shù)與所述第 一有限狀態(tài)機(jī)中的所述事件之間 的對(duì)應(yīng);以及通過(guò)合成所述第一和第二規(guī)范來(lái)產(chǎn)生對(duì)所述iHiE目標(biāo)程序進(jìn)行mst的驗(yàn)證規(guī)范,所述驗(yàn)證規(guī)范描述了第二有限狀態(tài)機(jī),所述第二有限狀態(tài)機(jī)定 義了由于調(diào)用對(duì)具有所述笫 一對(duì)象類(lèi)型的所述對(duì)象進(jìn)行操作的函數(shù)而導(dǎo)致 的具有所述第一對(duì)象類(lèi)型的所述對(duì)象的各狀態(tài)之間的轉(zhuǎn)換。
7. 根據(jù)權(quán)利要求6所述的方法,其中輸入第 一規(guī)范包括輸入描述多個(gè)所述第 一有限狀態(tài)機(jī)的所述第 一規(guī)范,輸入第二規(guī)范包括輸入為彼此不同的對(duì)象類(lèi)型描述了與所述第一有限 狀態(tài)機(jī)相對(duì)應(yīng)的多個(gè)所述對(duì)應(yīng)的所述第二規(guī)范,以及產(chǎn)生規(guī)范包括產(chǎn)生描述第三有限狀態(tài)機(jī)的^規(guī)范,所述第三有轉(zhuǎn)換。
8.根據(jù)權(quán)利要求7所述的方法,其中,所述第二規(guī)范還描述了邏輯表達(dá)式,所述邏輯表達(dá)式基于所述對(duì)象的 狀態(tài)和所述事件的發(fā)生來(lái)定義約束,以及所述g規(guī)范描述了所述第三有限狀態(tài)機(jī),所述第三有限狀態(tài)機(jī)定義 了當(dāng)違反所述約束而調(diào)用函數(shù)時(shí)轉(zhuǎn)換到預(yù)定狀態(tài)的轉(zhuǎn)換。
9. 根據(jù)權(quán)利要求8所述的方法,其中,所述預(yù)定狀態(tài)為錯(cuò)誤態(tài)。
10. 根據(jù)權(quán)利要求6所述的方法,還包括基于所述,規(guī)范對(duì)所述驗(yàn) 證目標(biāo)程序進(jìn)行驗(yàn)證。
全文摘要
本發(fā)明提供一種驗(yàn)證目標(biāo)程序的驗(yàn)證規(guī)范的產(chǎn)生裝置和方法,該裝置產(chǎn)生驗(yàn)證規(guī)范以驗(yàn)證包含對(duì)一個(gè)或多個(gè)對(duì)象進(jìn)行操作的函數(shù)的驗(yàn)證目標(biāo)程序,該裝置包括第一輸入單元,用來(lái)輸入描述第一有限狀態(tài)機(jī)的第一規(guī)范,所述第一有限狀態(tài)機(jī)定義由于事件的發(fā)生而導(dǎo)致的多個(gè)狀態(tài)之間的轉(zhuǎn)換;第二輸入單元,用來(lái)輸入第二規(guī)范,所述第二規(guī)范為第一對(duì)象類(lèi)型描述了對(duì)具有所述第一對(duì)象類(lèi)型的對(duì)象進(jìn)行操作的函數(shù)與所述第一有限狀態(tài)機(jī)中的所述事件之間的對(duì)應(yīng);以及驗(yàn)證規(guī)范產(chǎn)生單元,用來(lái)通過(guò)合成所述第一和第二規(guī)范來(lái)產(chǎn)生對(duì)所述驗(yàn)證目標(biāo)程序進(jìn)行驗(yàn)證的驗(yàn)證規(guī)范,所述驗(yàn)證規(guī)范描述了第二有限狀態(tài)機(jī),所述第二有限狀態(tài)機(jī)定義了由于調(diào)用對(duì)具有所述第一對(duì)象類(lèi)型的所述對(duì)象進(jìn)行操作的函數(shù)而導(dǎo)致的具有所述第一對(duì)象類(lèi)型的所述對(duì)象的狀態(tài)之間的轉(zhuǎn)換。
文檔編號(hào)G06F11/36GK101276308SQ20081008786
公開(kāi)日2008年10月1日 申請(qǐng)日期2008年3月26日 優(yōu)先權(quán)日2007年3月27日
發(fā)明者進(jìn)博正 申請(qǐng)人:株式會(huì)社東芝