示操作日期 privateintmillisecond;//表不操作時(shí)間 privateSequencePOsequence;//表不所屬的序列號(hào) } 上述定義中: primaryKey表示項(xiàng)的序號(hào);threadID表示線程的序號(hào); threadName表示線程名; methodLine表示被監(jiān)控方法所在行; methodName表示被監(jiān)控方法名; shareMemorylndex表示共享內(nèi)存的序號(hào); shareMemoryValue表示共享內(nèi)存的值; date表示操作日期; millisecond表示操作時(shí)間; sequence表示所屬的序列號(hào)。
[0042](四)獲取數(shù)據(jù)庫中每條軌跡序列的執(zhí)行結(jié)果,對(duì)軌跡序列進(jìn)行分類,得到成功執(zhí) 行序列集和失效執(zhí)行序列集。
[0043] 獲取軌跡序列中的執(zhí)行結(jié)果狀態(tài)(status),依據(jù)預(yù)先定義的失效結(jié)果,判定并發(fā) 程序中序列執(zhí)行結(jié)果的狀態(tài)是否丟失修改,或是否存在不可重復(fù)讀、或是否讀"臟"數(shù)據(jù)等 情況中的一種,如是則執(zhí)行結(jié)果是失效的,對(duì)軌跡序列進(jìn)行分類,得到成功執(zhí)行序列集和失 效執(zhí)行序列集。
[0044](五)基于軌跡序列的并發(fā)程序缺陷模式挖掘。
[0045] 在成功執(zhí)行序列集和失效執(zhí)行序列集中,利用以下改進(jìn)的序列模式挖掘算法 ISPAM對(duì)存儲(chǔ)在數(shù)據(jù)庫的數(shù)據(jù)集進(jìn)行挖掘,得到并發(fā)程序缺陷模式。
[0046] 序列模式挖掘算法ISPAM的相關(guān)變量含義如表3所示。
[0047] 表3序列模式挖掘算法ISPAM中的符號(hào)
所述序列模式挖掘算法ISPAM的步驟如下: (1) 將候選模式集合R和前k個(gè)缺陷模式的集合L設(shè)置為空集,并設(shè)置全局變量minsup 為〇 ; (2) 步驟二,將成功執(zhí)行序列集GS和失效執(zhí)行序列集BS分別轉(zhuǎn)化為垂直序列數(shù)據(jù)集 V(GS)和V(BS),生成V(BS)中項(xiàng)集列表Sinit; (3) 對(duì)于項(xiàng)集列表Sinit中的每一個(gè)項(xiàng)items,完成以下步驟: (3. 1)計(jì)算其是否是頻繁項(xiàng),如果是: (3. 1. 1)調(diào)用SAVEO方法對(duì)由單個(gè)項(xiàng)組成的模式存儲(chǔ)到L中; (3. 1. 2)在R集合添加項(xiàng)items,Sinit,Sinit>f在items之后的項(xiàng)的集合組成的三元組; (4) 如果存在元組< >屬于R集合并且r的支持度大于等于minsup,則重復(fù) 做以下步驟,直到不滿足這一條件為止: (4. 1)選擇R集合中擁有最高支持度的模式r的元組> ; (4. 2)通過調(diào)用SEARCHO方法對(duì)候選模式集合R進(jìn)行拓展,更新候選模式集合R,并將 拓展得到的模式調(diào)用SAVE()方法存儲(chǔ)到L中; (4. 3)將元組< >從1?中移除; (4. 4)將R中的所有滿足
條件的元組從R中移除; (5)返回含有前k個(gè)缺陷模式的集合L。 [0048] 其具體算法如下。
【主權(quán)項(xiàng)】
1. 一種并發(fā)程序的缺陷模式發(fā)現(xiàn)方法,其特征在于該方法包括以下步驟: (1) 監(jiān)控目標(biāo)程序,使用面向方面編程探針代碼的注入方法對(duì)監(jiān)控點(diǎn)進(jìn)行監(jiān)控以便獲 取狀態(tài)信息; (2) 使用動(dòng)態(tài)標(biāo)記迀移算法DLT對(duì)設(shè)置監(jiān)控點(diǎn)的目標(biāo)程序的執(zhí)行進(jìn)行調(diào)度,獲取目標(biāo) 程序的監(jiān)控點(diǎn)的狀態(tài)信息; (3) 把監(jiān)控到的狀態(tài)信息,以軌跡序列的形式存儲(chǔ)在數(shù)據(jù)庫中,獲取數(shù)據(jù)庫中每條軌跡 序列的執(zhí)行結(jié)果,對(duì)軌跡序列進(jìn)行分類,得到成功執(zhí)行序列集和失效執(zhí)行序列集; (4) 在成功執(zhí)行序列集和失效執(zhí)行序列集中,利用序列模式挖掘算法ISPAM進(jìn)行挖掘, 得到目標(biāo)程序缺陷模式。2. 根據(jù)權(quán)利要求1所述的并發(fā)程序的缺陷模式發(fā)現(xiàn)方法,其特征在于步驟(1)中所述 的獲取狀態(tài)信息的步驟如下: 步驟一,基于面向方面編程思想和待監(jiān)控的源程序,在待監(jiān)控的并發(fā)程序中針對(duì)共享 變量的讀寫操作定義監(jiān)控點(diǎn),接著在監(jiān)控點(diǎn)處添加若干個(gè)切點(diǎn); 步驟二,定義每一個(gè)切點(diǎn)對(duì)應(yīng)的通知,同時(shí)定義該通知需執(zhí)行的處理代碼,當(dāng)切點(diǎn)匹配 時(shí),通知內(nèi)定義的處理代碼在切點(diǎn)之前,或在切點(diǎn)之后,或在切點(diǎn)附近這3處執(zhí)行,通知內(nèi) 的transformO方法將用于存放包含源程序中被監(jiān)控方法的參數(shù)表數(shù)組args中的行號(hào)、序 列號(hào)信息的臨時(shí)變量meg中的內(nèi)容以及執(zhí)行環(huán)境中的線程標(biāo)識(shí)符轉(zhuǎn)換成監(jiān)控現(xiàn)場(chǎng)信息,并 存入在事件類EventPO中。3. 根據(jù)權(quán)利要求1所述的并發(fā)程序的缺陷模式發(fā)現(xiàn)方法,其特征在于步驟(2)中所 述的動(dòng)態(tài)標(biāo)記迀移算法DLT (S,T,t,SeS)的算法輸入?yún)?shù)有:全局狀態(tài)棧S,全局迀移序 列集T,局部迀移t和初始的全局序列集SeS ;算法輸出參數(shù)有:全局序列集SeS ;其步驟如 下: 步驟一,將S中的棧頂元素出棧存入狀態(tài)s,將SeS中的當(dāng)前序列存入序列變量σ中; 步驟二,更新s的回溯信息; 步驟三,如果存在線程P和s狀態(tài)下可行迀移集合s. enabled中線程ρ的一個(gè)迀移元 素 t,執(zhí)行以下步驟: (3. 1)將線程ρ賦值給狀態(tài)s的回溯集s. backtrack ; (3. 2)創(chuàng)建狀態(tài)s下已經(jīng)執(zhí)行過的迀移集合s. done,并將其置為空; (3. 3)如果存在某一線程q是狀態(tài)s的回溯集s. backtrack與狀態(tài)s下已經(jīng)執(zhí)行過的 迀移集合s. done的差集中的元素,重復(fù)執(zhí)行以下步驟,直到不存在這樣的線程q為止: (3. 3. 1)將q加入狀態(tài)s下已經(jīng)執(zhí)行過的迀移集合s. done中; (3. 3. 2)從狀態(tài)s的回溯集s. backtrack中刪除線程q ; (3. 3. 3)設(shè)ρ'是執(zhí)行迀移tm的線程,若線程ρ'屬于s. done,且t m屬于s. enabled,則 將乜加入集合s. retrieved中; (3. 3. 4)將s狀態(tài)下可行迀移集合s. enabled中線程q執(zhí)行的迀移設(shè)置為tn; (3. 3. 5)創(chuàng)建項(xiàng)集is并初始化為空,并將tn添加到is中; (3. 3. 6)將項(xiàng)集is添加到序列變量〇中; (3. 3. 7)判斷從狀態(tài)s出發(fā)且執(zhí)行tnS移后到達(dá)的狀態(tài)是否為空值,若不是,則執(zhí)行以 下步驟,否則不執(zhí)行: (3. 3. 7. 1)將從狀態(tài)s出發(fā)且執(zhí)行tnS移后得到的狀態(tài)設(shè)為s' ; (3. 3. 7. 2)將獨(dú)立于迀移t且屬于s. enabled中的迀移t'存入s', retrieved集合中; (3. 3. 7. 3)將 s' · enabled 與 s' · retrieved 集合的差集存入 s' · enabled 中; (3. 3. 7. 4)將迀移、添加入迀移序列T中; (3. 3. 7. 5)將狀態(tài)s'壓入狀態(tài)棧S中; (3.3.7.6)遞歸調(diào)用01^(5,1',七,565)算法; (3. 3. 7. 7)將T中的最后一項(xiàng)序列移出; (3. 3. 8)將S中的一項(xiàng)狀態(tài)出棧; 步驟四,返回全局序列集SeS。4.根據(jù)權(quán)利要求1所述的并發(fā)程序的缺陷模式發(fā)現(xiàn)方法,其特征在于步驟(4)中序列 模式挖掘算法ISPAM的步驟如下: 步驟一,將候選模式集合R和前k個(gè)缺陷模式的集合L設(shè)置為空集,并設(shè)置全局變量 minsup 為 O ; 步驟二,將成功執(zhí)行序列集GS和失效執(zhí)行序列集BS分別轉(zhuǎn)化為垂直序列數(shù)據(jù)集V (GS) 和V (BS),生成V (BS)中項(xiàng)集列表Sinit; 步驟三,對(duì)于項(xiàng)集列表Sinit中的每一個(gè)項(xiàng)items,完成以下步驟: (3. 1)計(jì)算其是否是頻繁項(xiàng),如果是: (3. I. 1)調(diào)用SAVEO方法對(duì)由單個(gè)項(xiàng)組成的模式存儲(chǔ)到L中; (3. 1. 2)在R集合添加項(xiàng)items,Sinit,SinitIf在items之后的項(xiàng)的集合組成的三元組; 步驟四,如果存在元組<:R>屬于R集合并且r的支持度大于等于minsup,則重 復(fù)做以下步驟,直到不滿足這一條件為止: (4. 1)選擇R集合中擁有最高支持度的模式r的元組<r.S:;S: > ; (4. 2)通過調(diào)用SEARCH0方法對(duì)候選模式集合R進(jìn)行拓展,更新候選模式集合R,并將 拓展得到的模式調(diào)用SAVEO方法存儲(chǔ)到L中; (4. 3)將元組< >從R中移除; (4. 4)將R中的所有滿足< r: -S1r S.i >e i? sup⑴< minsup >條件的元組從R中移除; 步驟五,返回含有前k個(gè)缺陷模式的集合L。
【專利摘要】本發(fā)明屬于軟件故障診斷領(lǐng)域,提供一種自主發(fā)現(xiàn)并發(fā)程序缺陷模式的方法,尤其是一種針對(duì)系統(tǒng)執(zhí)行軌跡使用序列模式挖掘的缺陷模式發(fā)現(xiàn)方法,本發(fā)明的技術(shù)方案是基于已插裝的并發(fā)程序,在其運(yùn)行過程中動(dòng)態(tài)調(diào)度線程的執(zhí)行,實(shí)時(shí)收集程序執(zhí)行信息,根據(jù)需要存儲(chǔ)程序軌跡序列,對(duì)執(zhí)行序列進(jìn)行挖掘,自主發(fā)現(xiàn)程序缺陷模式。
【IPC分類】G06F11/36
【公開號(hào)】CN104899137
【申請(qǐng)?zhí)枴緾N201510264963
【發(fā)明人】葉俊民, 李超, 曹洋洋, 葉竹君, 李蓉, 楊艷
【申請(qǐng)人】華中師范大學(xué)
【公開日】2015年9月9日
【申請(qǐng)日】2015年5月22日