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