專利名稱:一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)應(yīng)用領(lǐng)域,具體是一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法。
背景技術(shù):
軟件環(huán)境和用戶需求 總是不斷變化的,而這些變化在軟件初始設(shè)計(jì)時(shí),或者很難預(yù)測,或者雖然可預(yù)測但處理起來成本很大,不適合在當(dāng)前版本的系統(tǒng)完成。因此越來越需要對已經(jīng)上線的舊版本的軟件系統(tǒng)進(jìn)行動(dòng)態(tài)更新,即在不停止當(dāng)前正在運(yùn)行的系統(tǒng)的前提下對系統(tǒng)進(jìn)行更新或版本升級(jí),以適應(yīng)新的環(huán)境,滿足用戶新的需求[1]。動(dòng)態(tài)更新不僅要保證更新前后和更新過程中系統(tǒng)的一致性,而且在保證一致性的同時(shí),我們希望動(dòng)態(tài)更新可以盡快完成,從而減少由于動(dòng)態(tài)更新造成的系統(tǒng)某些服務(wù)不可用的時(shí)間。目前可以保障動(dòng)態(tài)更新過程中系統(tǒng)一致性的模型主要有三種-Quiescence、Tranquillity、Version-consistency。它們中的軟件系統(tǒng)都是由構(gòu)件及構(gòu)件間的依賴關(guān)系組成。Quiescence的方法只考慮由系統(tǒng)架構(gòu)確定的構(gòu)件間的靜態(tài)依賴關(guān)系,這將導(dǎo)致要更新的構(gòu)件及其相關(guān)聯(lián)的構(gòu)件在動(dòng)態(tài)更新中長時(shí)間不可用,造成系統(tǒng)較大的破壞性。與靜態(tài)依賴不同,動(dòng)態(tài)依賴關(guān)系是運(yùn)行系統(tǒng)中正在執(zhí)行的事務(wù)的發(fā)起者構(gòu)件及與其相關(guān)聯(lián)的構(gòu)件在運(yùn)行時(shí)刻不斷變化的依賴(或調(diào)用)關(guān)系。事務(wù)是指構(gòu)件在一定時(shí)間內(nèi)完成的一系列動(dòng)作的執(zhí)行。后兩種模型使用事務(wù)運(yùn)行時(shí)的動(dòng)態(tài)依賴關(guān)系,在保證一致性的同時(shí),可以減少動(dòng)態(tài)更新的時(shí)間。動(dòng)態(tài)依賴關(guān)系的準(zhǔn)確性嚴(yán)重影響了動(dòng)態(tài)更新進(jìn)行的最佳時(shí)機(jī)和完成動(dòng)態(tài)更新所需的時(shí)間。錯(cuò)誤的動(dòng)態(tài)依賴關(guān)系可能會(huì)破壞動(dòng)態(tài)更新的正確性。對于動(dòng)態(tài)依賴關(guān)系的計(jì)算,文獻(xiàn)“Yves Vandewoude. Dynamically updatingcomponent-oriented systems. PhD thesis, Katholieke Universiteit Leuven, 2007.,,提出在程序運(yùn)行前,由構(gòu)件的開發(fā)人員針對每個(gè)程序手工編寫一個(gè)事務(wù)狀態(tài)機(jī),計(jì)算其中每個(gè)狀態(tài)的動(dòng)態(tài)依賴信息,并且在業(yè)務(wù)邏輯中加入狀態(tài)轉(zhuǎn)移信息,這樣程序在運(yùn)行時(shí)刻可以提供關(guān)于自身的動(dòng)態(tài)依賴關(guān)系。顯然,這種方法給構(gòu)件的開發(fā)人員增加了很多額外的負(fù)擔(dān),尤其當(dāng)程序結(jié)構(gòu)比較復(fù)雜,與周圍構(gòu)件的調(diào)用關(guān)系也較復(fù)雜時(shí),要手工分析出每個(gè)狀態(tài)的依賴關(guān)系并編寫出狀態(tài)機(jī),不僅耗費(fèi)大量的時(shí)間,而且正確性也很難保證。針對這一不足,文獻(xiàn)“夏晨,曹春,陶先平.一個(gè)用于動(dòng)態(tài)更新一致性保障的狀態(tài)機(jī)抽取方法.計(jì)算機(jī)科學(xué),2010,37 (11) :151-155. ”提出一種通過靜態(tài)分析自動(dòng)抽取事務(wù)狀態(tài)機(jī)的方法。它通過分析程序源代碼的控制結(jié)構(gòu)及構(gòu)件間的交互端口,自動(dòng)生成事務(wù)的狀態(tài)機(jī),并自動(dòng)計(jì)算出每個(gè)狀態(tài)的依賴關(guān)系。這種方法雖然在開發(fā)效率上有了很大的提高,但由于其只采用靜態(tài)分析的方法,得到的依賴關(guān)系在某些位置是不精確的,甚至是錯(cuò)誤的,尤其是那些可能多次執(zhí)行,或者是可由多條路徑到達(dá)的位置,例如循環(huán)結(jié)構(gòu)、分支匯合點(diǎn)。
發(fā)明內(nèi)容
發(fā)明目的針對上述現(xiàn)有技術(shù)存在的問題和不足,本發(fā)明的目的是提供一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,能自動(dòng)獲得程序在當(dāng)前執(zhí)行環(huán)境下精確的動(dòng)態(tài)依賴關(guān)系,不僅提高了開發(fā)效率和正確性,而且提高了動(dòng)態(tài)依賴信息的精確度。技術(shù)方案為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用的技術(shù)方案為一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,包括如下步驟I)靜態(tài)分析階段,構(gòu)建程序的動(dòng)態(tài)依賴自動(dòng)機(jī);2)靜態(tài)分析階段,計(jì)算動(dòng)態(tài)依賴自動(dòng)機(jī)中的動(dòng)態(tài)依賴關(guān)系的Future信息,所述動(dòng)態(tài)依賴關(guān)系包括Future信息和Past信息,其中Future信息是指程序在當(dāng)前執(zhí)行環(huán)境下,將來可能使用的構(gòu)件集合,Past信息則指其過去使用過的構(gòu)件集合;3)靜態(tài)分析階段,將已經(jīng)分析出的動(dòng)態(tài)依賴自動(dòng)機(jī)和驅(qū)動(dòng)動(dòng)態(tài)依賴自動(dòng)機(jī)正確自動(dòng)運(yùn)行的觸發(fā)信息插入原程序(這里的“原程序”指修改以前的程序)中;
4)動(dòng)態(tài)分析階段,當(dāng)程序運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)在觸發(fā)信息的驅(qū)動(dòng)下自動(dòng)運(yùn)行,同時(shí)自適應(yīng)地獲得當(dāng)前執(zhí)行環(huán)境下的動(dòng)態(tài)依賴關(guān)系。所述步驟I)中構(gòu)建程序的動(dòng)態(tài)依賴自動(dòng)機(jī)的具體步驟為I. I)構(gòu)建程序的控制流圖(CFG);1.2)在程序的CFG上,采用深度優(yōu)先的搜索算法(DFS),從程序的入口節(jié)點(diǎn)開始,遞歸地分析每個(gè)節(jié)點(diǎn);同時(shí),初始化動(dòng)態(tài)依賴自動(dòng)機(jī)的初始狀態(tài)作為當(dāng)前狀態(tài),此處的狀態(tài)是指程序在一個(gè)代碼塊中穩(wěn)定不變的動(dòng)態(tài)依賴關(guān)系。遇到可能引起程序的動(dòng)態(tài)依賴關(guān)系發(fā)生變化的節(jié)點(diǎn),則執(zhí)行以下步驟I. 2. I)動(dòng)態(tài)依賴自動(dòng)機(jī)生成一個(gè)新狀態(tài),表示該節(jié)點(diǎn)執(zhí)行后的動(dòng)態(tài)依賴關(guān)系,并將當(dāng)前狀態(tài)、對應(yīng)事件和新狀態(tài)用轉(zhuǎn)移關(guān)系連接,并將新狀態(tài)作為當(dāng)前狀態(tài);I. 2. 2)在原程序該節(jié)點(diǎn)后插入包含該事件信息的觸發(fā)狀態(tài)跳轉(zhuǎn)的語句,從而實(shí)現(xiàn)動(dòng)態(tài)依賴自動(dòng)機(jī)中狀態(tài)間的跳轉(zhuǎn)和其正確自動(dòng)運(yùn)行。直到遍歷CFG上所有可能路徑上的每個(gè)節(jié)點(diǎn)。這樣,程序的動(dòng)態(tài)依賴自動(dòng)機(jī)構(gòu)建完成,步驟3中驅(qū)動(dòng)動(dòng)態(tài)依賴自動(dòng)機(jī)自動(dòng)運(yùn)行的觸發(fā)信息也插入完畢。上述步驟I. 2中的可能引起程序的動(dòng)態(tài)依賴關(guān)系發(fā)生變化的節(jié)點(diǎn),也稱事件,包括4種類型①程序開始;②調(diào)用外部構(gòu)件,使用構(gòu)件提供的服務(wù);③分支和循環(huán);④程序結(jié)束。經(jīng)步驟I構(gòu)建的動(dòng)態(tài)依賴自動(dòng)機(jī)中,每個(gè)狀態(tài)將來使用的構(gòu)件集合,即動(dòng)態(tài)依賴關(guān)系中的Future信息,可通過分析程序從當(dāng)前狀態(tài)到結(jié)束狀態(tài)所有可能的路徑,其使用的構(gòu)件集合即為當(dāng)前狀態(tài)精確的Future信息。因此,上述步驟2中計(jì)算動(dòng)態(tài)依賴自動(dòng)機(jī)中的動(dòng)態(tài)依賴關(guān)系的Future信息具體步驟為2.1)對動(dòng)態(tài)依賴自動(dòng)機(jī)中的每個(gè)轉(zhuǎn)移,將轉(zhuǎn)移之前的狀態(tài)的動(dòng)態(tài)依賴關(guān)系的Future信息更新為轉(zhuǎn)移之前狀態(tài)的動(dòng)態(tài)依賴關(guān)系、觸發(fā)轉(zhuǎn)移的事件使用的構(gòu)件與轉(zhuǎn)移之后的狀態(tài)的動(dòng)態(tài)依賴關(guān)系的Future信息三者的并集;2. 2)重復(fù)2. I)的步驟,直到所有狀態(tài)的動(dòng)態(tài)依賴關(guān)系的Future信息不發(fā)生變化為止,此時(shí)得到了包含動(dòng)態(tài)依賴關(guān)系的Future信息的動(dòng)態(tài)依賴自動(dòng)機(jī)。對于步驟2)得到的動(dòng)態(tài)依賴自動(dòng)機(jī),步驟3)將其插入到原程序的注釋中,不僅方便查找,減少了程序運(yùn)行時(shí)查找其對應(yīng)動(dòng)態(tài)依賴自動(dòng)機(jī)的開銷,同時(shí)也不會(huì)改變原程序的結(jié)構(gòu)。程序開始運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)自動(dòng)運(yùn)行,同時(shí)根據(jù)輸入的事件信息自適應(yīng)地更新程序當(dāng)前執(zhí)行環(huán)境的動(dòng)態(tài)依賴關(guān)系。上述步驟4執(zhí)行的具體步驟是4. I)程序運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)從初始狀態(tài)開始運(yùn)行,同時(shí)初始化此時(shí)的動(dòng)態(tài)依賴關(guān)系中的Past信息為空.4. 2)每執(zhí)行步驟3)插入的觸發(fā)信息,則觸發(fā)程序自適應(yīng)地從當(dāng)前狀態(tài)轉(zhuǎn)移到下一狀態(tài),同時(shí)更新程序當(dāng)前的動(dòng)態(tài)依賴關(guān)系。自適應(yīng)更新執(zhí)行的具體步驟為4. 2. I)新狀態(tài)的動(dòng)態(tài)依賴關(guān)系中的Future信息為搜索包含F(xiàn)uture信息的動(dòng)態(tài)依賴自動(dòng)機(jī),根據(jù)當(dāng)前狀態(tài)找到經(jīng)該觸發(fā)信息轉(zhuǎn)移到的下一狀態(tài),該下一狀態(tài)的內(nèi)容即為新狀態(tài)的Future信息;
4. 2. 2)新狀態(tài)的動(dòng)態(tài)依賴關(guān)系中的Past信息更新為當(dāng)前狀態(tài)的Past信息與觸發(fā)狀態(tài)轉(zhuǎn)移的事件使用的構(gòu)件的并集。有益效果本發(fā)明提出的構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,可以在程序運(yùn)行過程中自動(dòng)獲得當(dāng)前精確的動(dòng)態(tài)依賴關(guān)系。在程序運(yùn)行前,通過靜態(tài)分析的方法構(gòu)建程序的動(dòng)態(tài)依賴自動(dòng)機(jī)。當(dāng)程序運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)自動(dòng)運(yùn)行,同時(shí)根據(jù)當(dāng)前的執(zhí)行環(huán)境自適應(yīng)地更新程序的動(dòng)態(tài)依賴關(guān)系。此項(xiàng)技術(shù)的所有工作都是自動(dòng)完成,與已有的方法相比,在開發(fā)效率和正確性上有了很大的提高。利用上述方法,開發(fā)了 Java構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)抽取工具——DDET。DDET對Java字節(jié)碼直接進(jìn)行分析和操作,對于任意一個(gè)支持動(dòng)態(tài)更新的Java構(gòu)件系統(tǒng),運(yùn)行時(shí)可自動(dòng)獲得其精確的動(dòng)態(tài)依賴關(guān)系。
圖I為構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法流程圖;圖2為DDET的流程圖;圖3為動(dòng)態(tài)依賴自動(dòng)機(jī)實(shí)例圖;圖4為包含動(dòng)態(tài)依賴關(guān)系的Future信息的動(dòng)態(tài)依賴自動(dòng)機(jī)實(shí)例圖;圖5為動(dòng)態(tài)運(yùn)行時(shí)獲得程序精確的動(dòng)態(tài)依賴關(guān)系實(shí)例圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對本發(fā)明的各種等價(jià)形式的修改均落于本申請所附權(quán)利要求所限定的范圍。本發(fā)明的發(fā)明內(nèi)容部分所述的技術(shù)方案的流程圖如圖I所示,利用上述方法,
開發(fā)了 Java構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)抽取工具-DDET (Dynamic Dependences
Extracting Tool,動(dòng)態(tài)依賴抽取工具)。DDET對Java字節(jié)碼直接進(jìn)行分析和修改,它的輸入可以是包含字節(jié)碼文件的jar, war, ear包,也可以是單個(gè)字節(jié)碼文件。DDET使用的字節(jié)碼操縱工具是ASM (ASM是本領(lǐng)域技術(shù)人員熟知的工具,主頁地址http: / / asm. ow2. ovr/)。DDET的系統(tǒng)框架如附圖2所示。DDET首先判斷輸入的字節(jié)碼文件是否包含需要分析的事務(wù)方法,對于每個(gè)需要分析的事務(wù)方法逐一進(jìn)行靜態(tài)分析。靜態(tài)分析的具體過程為首先,使用ASM工具對事務(wù)進(jìn)行控制流分析,得到該事務(wù)的控制流圖。通過控制流分析,可以很容易的知道每個(gè)節(jié)點(diǎn)的后繼節(jié)點(diǎn)。在此基礎(chǔ)上構(gòu)建事務(wù)的動(dòng)態(tài)依賴自動(dòng)機(jī),并在構(gòu)建過程中將事務(wù)的事件信息插入到相應(yīng)的字節(jié)碼序列中。此處的事件是指,可能引起事務(wù)的動(dòng)態(tài)依賴關(guān)系發(fā)生改變的字節(jié)碼(包括程序開始,調(diào)用外部構(gòu)件的方法,分支、循環(huán),程序結(jié)束)。然后,靜態(tài)計(jì)算動(dòng)態(tài)依賴自動(dòng)機(jī)中每個(gè)狀態(tài)將來使用的構(gòu)件集合future,并將計(jì)算出的每個(gè)狀態(tài)的Future信息以及每個(gè)狀態(tài)的轉(zhuǎn)移關(guān)系,通過ASM工具寫入原字節(jié)碼文件該事務(wù)的OTransaction注釋中。最后,當(dāng)事務(wù)執(zhí)行時(shí),事務(wù)的動(dòng)態(tài)依賴自動(dòng)機(jī)自動(dòng)運(yùn)行,同時(shí)根據(jù)當(dāng)前輸入的事件信息和當(dāng)前的動(dòng)態(tài)依賴關(guān)系,自適應(yīng)地更新下一時(shí)刻的動(dòng)態(tài)依賴關(guān)系。我們以一個(gè)簡單的Java EJB程序?yàn)槔M(jìn)行說明。Java程序如下,左邊是其源程序,右邊是類中的事務(wù)方法Examp I e (實(shí)例)對應(yīng)的字節(jié)碼序列。
事務(wù)使用的構(gòu)件集合通過分析程序中的EJB依賴注入很容易獲得{a,b,c}??赡芤鹗聞?wù)的依賴關(guān)系發(fā)生改變的事件通過分析方法Example可得,事件集合如表I所示。表I影響事務(wù)動(dòng)態(tài)依賴關(guān)系的事件
事件事件類型源程序語句對應(yīng)主要字節(jié)碼的位置
50程序開始{I
51i = a. getNumO5
e2c. clO23
β3 構(gòu)件調(diào)用 a. alO4
%b. bl O41
Bsb. b2 O47
eeif (i>l) T11,12
e7if (i>l) F11’ 36
-分支循環(huán)--
e3whiled <10) T29,15
S9while(i<10)F29,30
eso 程序結(jié)束}50事務(wù)從初始狀態(tài)開始,遍歷事務(wù)所有可能的執(zhí)行路徑,每遇到一個(gè)事件,則生成一個(gè)新狀態(tài),同時(shí)事務(wù)由當(dāng)前狀態(tài)轉(zhuǎn)移到新狀態(tài),由此構(gòu)建事務(wù)的動(dòng)態(tài)依賴自動(dòng)機(jī),事務(wù)方法Example的動(dòng)態(tài)依賴自動(dòng)機(jī)如附圖3所示,其中圓圈代表狀態(tài),箭頭上的文字表示事件信息,箭頭與其兩端對應(yīng)的狀態(tài)組成一個(gè)轉(zhuǎn)移。動(dòng)態(tài)依賴自動(dòng)機(jī)中每個(gè)狀態(tài)將來要使用的構(gòu)件集合Future,可以通過靜態(tài)分析從當(dāng)前狀態(tài)到事務(wù)結(jié)束狀態(tài)所有可能的路徑獲得。具體實(shí)現(xiàn)時(shí)可通過對每個(gè)轉(zhuǎn)移執(zhí)行更新過程轉(zhuǎn)移之前狀態(tài)的Future,觸發(fā)轉(zhuǎn)移的事件使用的構(gòu)件與轉(zhuǎn)移之后的狀態(tài)的Future三者的并集來更新轉(zhuǎn)移之前狀態(tài)的Future,直到所有狀態(tài)的Future不發(fā)生變化為止。此時(shí)我們得到了包含F(xiàn)uture信息的動(dòng)態(tài)依賴自動(dòng)機(jī),見附圖4。附圖4中每個(gè)狀態(tài)旁第一行構(gòu)件集合即為計(jì)算出的該狀態(tài)將來要使用的構(gòu)件集合Future。當(dāng)事務(wù)開始運(yùn)行時(shí),動(dòng)態(tài)依賴自動(dòng)機(jī)從初始狀態(tài)開始運(yùn)行,同時(shí)初始化當(dāng)前狀態(tài) 的Past集合為空。根據(jù)事務(wù)實(shí)際執(zhí)行的路徑和輸入的事件信息可以確定當(dāng)前狀態(tài)程序精確的動(dòng)態(tài)依賴關(guān)系,包括Future信息和Past信息,見附圖5。附圖5中實(shí)線表示事務(wù)實(shí)際執(zhí)行的路徑,其中每個(gè)狀態(tài)的精確的動(dòng)態(tài)依賴關(guān)系已計(jì)算出,第一行構(gòu)件集合表示該狀態(tài)的Future信息,第二行的構(gòu)件集合為Past信息。附圖5中虛線標(biāo)出的部分表示程序可能執(zhí)行,但還未在本次執(zhí)行中執(zhí)行的路徑。
權(quán)利要求
1.一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,其特征在于包括如下步驟 1)靜態(tài)分析階段,構(gòu)建程序的動(dòng)態(tài)依賴自動(dòng)機(jī),所述動(dòng)態(tài)依賴自動(dòng)機(jī)包括狀態(tài),事件和轉(zhuǎn)移,其中狀態(tài)指程序在一個(gè)代碼塊中穩(wěn)定不變的動(dòng)態(tài)依賴關(guān)系,事件指可能引起程序的動(dòng)態(tài)依賴關(guān)系發(fā)生變化的節(jié)點(diǎn),轉(zhuǎn)移是指當(dāng)事件發(fā)生時(shí),程序從一個(gè)狀態(tài)轉(zhuǎn)移到新的狀態(tài); 2)靜態(tài)分析階段,計(jì)算動(dòng)態(tài)依賴自動(dòng)機(jī)中的動(dòng)態(tài)依賴關(guān)系的Future信息,所述動(dòng)態(tài)依賴關(guān)系包括Future信息和Past信息,其中Future信息是指程序在當(dāng)前執(zhí)行環(huán)境下,將來可能使用的構(gòu)件集合,Past信息則指其過去使用過的構(gòu)件集合; 3)靜態(tài)分析階段,將已經(jīng)分析出的動(dòng)態(tài)依賴自動(dòng)機(jī)和驅(qū)動(dòng)動(dòng)態(tài)依賴自動(dòng)機(jī)正確自動(dòng)運(yùn)行的觸發(fā)信息插入原程序中; 4)動(dòng)態(tài)分析階段,當(dāng)程序運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)在觸發(fā)信息的驅(qū)動(dòng)下自動(dòng)運(yùn)行,同時(shí)自適應(yīng)地獲得當(dāng)前執(zhí)行環(huán)境下的動(dòng)態(tài)依賴關(guān)系。
2.根據(jù)權(quán)利要求I所述的一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,其特征在于所述步驟I)中構(gòu)建程序的動(dòng)態(tài)依賴自動(dòng)機(jī)的具體步驟為 ·1.1)構(gòu)建程序的控制流圖; ·I. 2)在程序的控制流圖上,采用深度優(yōu)先的搜索算法,從程序的入口節(jié)點(diǎn)開始,遞歸地分析每個(gè)節(jié)點(diǎn);同時(shí),初始化動(dòng)態(tài)依賴自動(dòng)機(jī)的初始狀態(tài)作為當(dāng)前狀態(tài)。
3.根據(jù)權(quán)利要求2所述的一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,其特征在于所述步驟I. 2)中分析節(jié)點(diǎn)的具體步驟為 遇到可能引起程序的動(dòng)態(tài)依賴關(guān)系發(fā)生變化的節(jié)點(diǎn),則執(zhí)行以下步驟 ·1.2. I)動(dòng)態(tài)依賴自動(dòng)機(jī)生成一個(gè)新狀態(tài),表不該節(jié)點(diǎn)執(zhí)行后的動(dòng)態(tài)依賴關(guān)系,并將當(dāng)前狀態(tài)、對應(yīng)事件和新狀態(tài)用轉(zhuǎn)移關(guān)系連接,并將新狀態(tài)作為當(dāng)前狀態(tài); ·1.2. 2)在原程序該節(jié)點(diǎn)后插入包含該事件信息的觸發(fā)狀態(tài)跳轉(zhuǎn)的語句。
4.根據(jù)權(quán)利要求I所述的一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,其特征在于所述步驟2)中計(jì)算動(dòng)態(tài)依賴關(guān)系中的Future信息的具體步驟為 ·2.I)對動(dòng)態(tài)依賴自動(dòng)機(jī)中的每個(gè)轉(zhuǎn)移,將轉(zhuǎn)移之前的狀態(tài)的動(dòng)態(tài)依賴關(guān)系的Future信息更新為轉(zhuǎn)移之前狀態(tài)的動(dòng)態(tài)依賴關(guān)系、觸發(fā)轉(zhuǎn)移的事件使用的構(gòu)件與轉(zhuǎn)移之后的狀態(tài)的動(dòng)態(tài)依賴關(guān)系的Future信息三者的并集; ·2.2)重復(fù)2. I)的步驟,直到所有狀態(tài)的動(dòng)態(tài)依賴關(guān)系的Future信息不發(fā)生變化為止,此時(shí)得到了包含動(dòng)態(tài)依賴關(guān)系的Future信息的動(dòng)態(tài)依賴自動(dòng)機(jī)。
5.根據(jù)權(quán)利要求2所述的一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,其特征在于所述步驟3)的具體步驟為 ·3.I)在原程序的注釋中插入所述步驟2)得到的動(dòng)態(tài)依賴自動(dòng)機(jī)。
6.根據(jù)權(quán)利要求I所述的一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析技方法,其特征在于所述步驟4)的具體步驟為 ·4.I)程序運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)從初始狀態(tài)開始運(yùn)行,同時(shí)初始化此時(shí)的動(dòng)態(tài)依賴關(guān)系中的Past信息為空. · 4. 2)每執(zhí)行步驟3)插入的觸發(fā)信息,則觸發(fā)程序自適應(yīng)地從當(dāng)前狀態(tài)轉(zhuǎn)移到下一狀態(tài),同時(shí)更新程序當(dāng)前的動(dòng)態(tài)依賴關(guān)系。
7.根據(jù)權(quán)利要求6所述的一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析技方法,其特征在于所述步驟4. 2)中執(zhí)行更新的具體步驟為· 4.2. I)新狀態(tài)的動(dòng)態(tài)依賴關(guān)系中的Future信息為搜索包含F(xiàn)uture信息的動(dòng)態(tài)依賴自動(dòng)機(jī),根據(jù)當(dāng)前狀態(tài)找到經(jīng)該觸發(fā)信息轉(zhuǎn)移到的下一狀態(tài),該下一狀態(tài)的內(nèi)容即為新狀態(tài)的Future信息;· 4.2. 2)新狀態(tài)的動(dòng)態(tài)依賴關(guān)系中的Past信息更新為當(dāng)前狀態(tài)的Past信息與觸發(fā)狀態(tài)轉(zhuǎn)移的事件使用的構(gòu)件的并集。
全文摘要
本發(fā)明公開了一種構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)分析方法,該方法在程序運(yùn)行時(shí),能自動(dòng)計(jì)算程序在當(dāng)前執(zhí)行環(huán)境下精確的動(dòng)態(tài)依賴關(guān)系。該方法,在程序運(yùn)行前,通過靜態(tài)分析的方法構(gòu)建程序的動(dòng)態(tài)依賴自動(dòng)機(jī)。當(dāng)程序運(yùn)行時(shí),其對應(yīng)的動(dòng)態(tài)依賴自動(dòng)機(jī)自動(dòng)運(yùn)行,同時(shí)根據(jù)當(dāng)前的執(zhí)行情況自適應(yīng)地更新程序的動(dòng)態(tài)依賴關(guān)系。該方法的所有工作都是自動(dòng)完成,與已有的方法相比,在開發(fā)效率和正確性上有了很大的提高。利用此項(xiàng)方法,開發(fā)了Java構(gòu)件間動(dòng)態(tài)依賴關(guān)系的自動(dòng)抽取工具——DDET。DDET對Java字節(jié)碼直接進(jìn)行分析和操作,對于任意一個(gè)支持動(dòng)態(tài)更新的Java構(gòu)件系統(tǒng),運(yùn)行時(shí)可自動(dòng)獲得其精確的依賴關(guān)系。
文檔編號(hào)G06F9/445GK102880493SQ20121036275
公開日2013年1月16日 申請日期2012年9月25日 優(yōu)先權(quán)日2012年9月25日
發(fā)明者馬曉星, 曹春, 呂建, 蘇萍 申請人:南京大學(xué)