基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法【專(zhuān)利說(shuō)明】[0001]
技術(shù)領(lǐng)域:
[0002]本發(fā)明涉及計(jì)算機(jī)程序分析領(lǐng)域,特別涉及一種基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法?!?br>背景技術(shù):
】[0003]程序切片技術(shù)是一種重要的程序分析和理解技術(shù),廣泛應(yīng)用于程序調(diào)試、測(cè)試及軟件維護(hù)中。其原理和方法最早出現(xiàn)在MarkWeiser的博士論文中,Weiser根據(jù)數(shù)據(jù)流方程的迭代解對(duì)程序切片進(jìn)行了定義,并提出了基于控制流圖(ControlFlowGraph,CFG)的計(jì)算過(guò)程內(nèi)程序切片的算法,但此方法所消耗的時(shí)間和空間均比較多,計(jì)算所得的程序切片準(zhǔn)確性也不是很好。K.J.Ottenstein等人引入了基于程序依賴(lài)圖(ProgramDependenceGraph,TOG)的圖形可達(dá)性算法,用于計(jì)算過(guò)程內(nèi)切片,但此算法只能計(jì)算一個(gè)過(guò)程內(nèi)的切片問(wèn)題,含有多個(gè)過(guò)程但程序切片計(jì)算問(wèn)題并未得到解決。后來(lái)S.Horwitz等人通過(guò)把TOG擴(kuò)展為系統(tǒng)依賴(lài)圖(SDG)以計(jì)算過(guò)程間切片,根據(jù)系統(tǒng)依賴(lài)圖,將函數(shù)間的切片問(wèn)題轉(zhuǎn)化為圖的可達(dá)性問(wèn)題,從而解決了包含多個(gè)過(guò)程程序的切片計(jì)算問(wèn)題。[0004]目前,計(jì)算程序靜態(tài)切片主要使用的方法是基于依賴(lài)圖的遍歷算法。系統(tǒng)依賴(lài)圖能夠充分表示程序的數(shù)據(jù)依賴(lài)、控制依賴(lài)信息以及函數(shù)調(diào)用信息,但是SDG數(shù)據(jù)流分析的復(fù)雜度較高,而且,生成系統(tǒng)依賴(lài)圖的過(guò)程中,需要計(jì)算與切片無(wú)關(guān)的數(shù)據(jù)依賴(lài),這些不必要的計(jì)算造成了時(shí)間和空間資源的浪費(fèi),并嚴(yán)重影響了切片計(jì)算的效率。類(lèi)似地,傳統(tǒng)的動(dòng)態(tài)切片算法使用動(dòng)態(tài)依賴(lài)圖,復(fù)雜性也很高,針對(duì)這一點(diǎn),Gyimothy提出利用D/U表達(dá)式計(jì)算動(dòng)態(tài)切片的方法,不需要使用動(dòng)態(tài)依賴(lài)圖,可以同時(shí)計(jì)算程序的控制依賴(lài)和數(shù)據(jù)依賴(lài),空間開(kāi)銷(xiāo)較小。但傳統(tǒng)的利用D/U表達(dá)式計(jì)算動(dòng)態(tài)切片的方法,只考慮了直接控制依賴(lài)關(guān)系沒(méi)有考慮多層嵌套的情況,而且由于未考慮函數(shù)調(diào)用的情況,只能用于過(guò)程內(nèi)動(dòng)態(tài)切片的計(jì)算中。【
發(fā)明內(nèi)容】[0005]本發(fā)明解決的問(wèn)題是現(xiàn)有切片計(jì)算方法占用計(jì)算機(jī)時(shí)間和空間大,切片提取效率低;為解決所述問(wèn)題,本發(fā)明提供一種基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法。[0006]本發(fā)明所提供的基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,包括:對(duì)程序中的靜態(tài)切片按照變量的類(lèi)型、靜態(tài)切片的位置進(jìn)行表達(dá),建立表達(dá)式;依據(jù)對(duì)變量的賦值,在所述表達(dá)式中進(jìn)行倒推式搜索;提取所述變量的值等于所述賦值的所有靜態(tài)切片。[0007]進(jìn)一步,本發(fā)明所提供的基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,包括:步驟一、對(duì)程序進(jìn)行詞法分析,生成TOKEN序列以及函數(shù)列表;步驟二、在TOKEN序列基礎(chǔ)上,建立復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表,所述復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表記錄程序中所有復(fù)合語(yǔ)句的開(kāi)始、結(jié)束位置;步驟三、根據(jù)TOKEN序列和復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表,建立idUCf五元結(jié)構(gòu),所述idUCf五元結(jié)構(gòu)是程序中定義變量、變量使用、變量控制依賴(lài)關(guān)系、函數(shù)調(diào)用關(guān)系的表達(dá)式;步驟四、利用基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片算法,提取靜態(tài)切片。[0008]進(jìn)一步,所述步驟四,包括:步驟4-1),為所述idUCf五元結(jié)構(gòu)中的變量賦值;步驟4-2),反向搜索靜態(tài)切片,提取變量值等于所述賦值的所有靜態(tài)切片。[0009]進(jìn)一步,搜索反向靜態(tài)切片包括搜索賦值語(yǔ)句和搜索函數(shù)調(diào)用語(yǔ)句。[0010]進(jìn)一步,搜索賦值語(yǔ)句包括在靜態(tài)切片中搜索等于所述賦值的變量,并提取對(duì)應(yīng)的靜態(tài)切片。[0011]進(jìn)一步,搜索函數(shù)調(diào)用語(yǔ)句包括靜態(tài)切片中的搜索函數(shù)調(diào)用語(yǔ)句,在函數(shù)調(diào)用語(yǔ)句與等于所述賦值的變量相關(guān)時(shí),提取對(duì)應(yīng)的靜態(tài)切片。[0012]本發(fā)明提出的基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片計(jì)算方法,既保留了程序的數(shù)據(jù)依賴(lài)、控制依賴(lài)以及函數(shù)調(diào)用信息,充分考慮了選擇、循環(huán)結(jié)構(gòu)的多層嵌套情況,又不需要使用SDG,無(wú)須計(jì)算與切片無(wú)關(guān)的數(shù)據(jù)依賴(lài)、控制依賴(lài)以及不相關(guān)函數(shù)。[0013]本發(fā)明的優(yōu)點(diǎn)包括:本文建立了idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片模型,主要包括以下四個(gè)部分:1.通過(guò)詞法分析生成TOKEN序列以及函數(shù)列表。函數(shù)列表中記錄了各個(gè)函數(shù)的函數(shù)名,函數(shù)返回值類(lèi)型,參數(shù)個(gè)數(shù),參數(shù)類(lèi)型以及此函數(shù)在TOKEN序列中的位置。將程序轉(zhuǎn)換為T(mén)OKEN序列,降低了程序分析的復(fù)雜度。函數(shù)列表為實(shí)現(xiàn)切片計(jì)算過(guò)程中函數(shù)調(diào)用的實(shí)參-形參之間的轉(zhuǎn)換奠定基礎(chǔ)。[0014]2.TOKEN序列缺少程序的結(jié)構(gòu)化信息,因而不能很好的表示變量間的依賴(lài)關(guān)系,系統(tǒng)依賴(lài)圖的復(fù)雜度較高,針對(duì)這一點(diǎn),本文定義了CNT,精簡(jiǎn)了控制流關(guān)系,利用CNT,在TOKEN序列上進(jìn)行分析,可根據(jù)程序切片的需要選擇性計(jì)算控制流關(guān)系,避免了無(wú)關(guān)控制依賴(lài)的計(jì)算,不僅能夠達(dá)到與控制流圖等同的功能,充分表達(dá)控制依賴(lài)關(guān)系,還降低了時(shí)間與空間復(fù)雜度。[0015]3.影響切片點(diǎn)變量值的直接操作是賦值語(yǔ)句以及函數(shù)調(diào)用語(yǔ)句,因此,本文在控制語(yǔ)句結(jié)構(gòu)列表的基礎(chǔ)上,提出了利用賦值語(yǔ)句和函數(shù)調(diào)用語(yǔ)句生成idUCf五元結(jié)構(gòu),充分考慮了數(shù)據(jù)依賴(lài)、控制依賴(lài)以及函數(shù)調(diào)用信息。[0016]4.應(yīng)用基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片算法,得到過(guò)程間靜態(tài)切片?!靖綀D說(shuō)明】[0017]圖1為本發(fā)明實(shí)施例所提供的基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法的流程示意圖。[0018]實(shí)施方式下面具體實(shí)施例,進(jìn)一步闡述本發(fā)明。[0019]本發(fā)明提供一種基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,靜態(tài)切片是由程序中的一些語(yǔ)句和控制謂詞組成的集合,它包含了所有可能影響興趣變量的語(yǔ)句,考慮了程序中所有可能的執(zhí)行路徑。根據(jù)切片方向的不同,可分為前向切片和后向切片。前向切片是指所有受興趣點(diǎn)變量的值影響的語(yǔ)句的集合;后向切片是指程序中所有能夠影響興趣點(diǎn)變量的值的語(yǔ)句的集合。本文所描述的是后向切片。[0020]本發(fā)明提供一種基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,包括:步驟一、對(duì)程序進(jìn)行詞法分析,生成TOKEN序列以及函數(shù)列表;步驟二、在TOKEN序列基礎(chǔ)上,建立復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表,所述復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表記錄程序中所有復(fù)合語(yǔ)句的開(kāi)始、結(jié)束位置;復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表是記錄程序P中的所有復(fù)合語(yǔ)句(選擇、循環(huán))的開(kāi)始、結(jié)束位置等關(guān)鍵信息的集合,它能夠精簡(jiǎn)的記錄程序的所有控制依賴(lài)關(guān)系,以下簡(jiǎn)稱(chēng)CNT(compoundnodetable)。其結(jié)構(gòu)定義如表1所不。[0021]表1【主權(quán)項(xiàng)】1.一種基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,其特征在于,包括:對(duì)程序中的靜態(tài)切片按照變量的類(lèi)型、靜態(tài)切片的位置進(jìn)行表達(dá),建立表達(dá)式;依據(jù)對(duì)變量的賦值,在所述表達(dá)式中進(jìn)行倒推式搜索;提取所述變量的值等于所述賦值的所有靜態(tài)切片。2.依據(jù)權(quán)利要求1所述的基于idUCf?五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,其特征在于,包括:步驟一、對(duì)程序進(jìn)行詞法分析,生成TOKEN序列以及函數(shù)列表;步驟二、在TOKEN序列基礎(chǔ)上,建立復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表,所述復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表記錄程序中所有復(fù)合語(yǔ)句的開(kāi)始、結(jié)束位置;步驟三、根據(jù)TOKEN序列和復(fù)合語(yǔ)句控制結(jié)構(gòu)信息表,建立idUCf?五元結(jié)構(gòu),所述idUCf五元結(jié)構(gòu)是程序中定義變量、變量使用、變量控制依賴(lài)關(guān)系、函數(shù)調(diào)用關(guān)系的表達(dá)式;步驟四、利用基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片算法,提取靜態(tài)切片。3.依據(jù)權(quán)利要求2所述的基于idUCf?五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,其特征在于,所述步驟四,包括:步驟4-1),為所述idUCf五元結(jié)構(gòu)中的變量賦值;步驟4-2),反向搜索靜態(tài)切片,提取變量值等于所述賦值的所有靜態(tài)切片。4.依據(jù)權(quán)利要求3所述的基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,其特征在于,搜索反向靜態(tài)切片包括搜索賦值語(yǔ)句和搜索函數(shù)調(diào)用語(yǔ)句。5.依據(jù)權(quán)利要求4所述的基于idUCf?五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,其特征在于,搜索賦值語(yǔ)句包括在靜態(tài)切片中搜索等于所述賦值的變量,并提取對(duì)應(yīng)的靜態(tài)切片。6.依據(jù)權(quán)利要求4所述的基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,其特征在于,搜索函數(shù)調(diào)用語(yǔ)句包括靜態(tài)切片中的搜索函數(shù)調(diào)用語(yǔ)句,在函數(shù)調(diào)用語(yǔ)句與等于所述賦值的變量相關(guān)時(shí),提取對(duì)應(yīng)的靜態(tài)切片?!緦?zhuān)利摘要】本發(fā)明公開(kāi)了一種基于idUCf五元結(jié)構(gòu)的過(guò)程間靜態(tài)切片提取方法,包括:對(duì)程序中的靜態(tài)切片按照變量的類(lèi)型、靜態(tài)切片的位置進(jìn)行表達(dá),建立表達(dá)式;依據(jù)對(duì)變量的賦值,在所述表達(dá)式中進(jìn)行倒推式搜索;提取所述變量的值等于所述賦值的所有靜態(tài)切片。通過(guò)本發(fā)明可以提高計(jì)算機(jī)空間和時(shí)間的利用率,提高切片提取效率?!綢PC分類(lèi)】G06F11-36【公開(kāi)號(hào)】CN104699599【申請(qǐng)?zhí)枴緾N201310666216【發(fā)明人】龔丹丹,陳春萍,蔣堅(jiān)鴻【申請(qǐng)人】上海精密計(jì)量測(cè)試研究所【公開(kāi)日】2015年6月10日【申請(qǐng)日】2013年12月10日